JWT๋ฅผ ์์์ผ ํ๋ ์ด์
๋ฐ์คํฌํฑ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ฐ์ผ์์๋ ๋์ผํ ์ธํฐํ์ด์ค๋ก ๋ก๊ทธ์ธ์ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด
์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ๋๋ฉด
JWT๋ฅผ ์ด์ฉํ์ฌ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
JWT๋ฅผ ์ด์ฉํ Login ํ๋ฆ
ํด๋ผ์ด์ธํธ์์ ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ด๋ฒ ๋ฏธ์
์์ ๊ทธ์ค ์ฐ๋ฆฌ๋ JWT๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ์ด์ฉํ ๊ฒ์
๋๋ค. JWT๋ ๋ชจ๋ฐ์ผ๊ณผ ์น์ ์ธ์ฆ์ ์ํด ์ฌ์ฉํ๋ ๋ํ์ ์ธ ๋๊ตฌ ์ค ํ๋์ธ๋ฐ์. ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ ํ ํฐ์ ์๋ฏธํฉ๋๋ค. ์ด JWT๋ฅผ ์ด์ฉํ์ฌ Access Token์ HTTP Header์ ํฌํจํ์ฌ ์๋ฒ๋ก API๋ฅผ ์์ฒญํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
JWT
JWT ๋ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์์ฒด์ ์ผ๋ก ์ง๋๊ณ ์์ต๋๋ค. ๊ทธ๋์ ๋ณ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ด๋ ํด๋น ํ ํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
โข
Header: ์ 3๊ฐ์ง ์ ๋ณด๋ฅผ ์ํธํํ ๋ฐฉ์๊ณผ ํ์
์ด ๋ค์ด๊ฐ๋ค.
โข
Payload: ์๋ฒ์์ ๋ณด๋ผ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ์ ์ ๊ณ ์ id๊ฐ, ์ ํจ๊ธฐ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
โข
Signature: Base64 ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉํ Header,payload ๊ทธ๋ฆฌ๊ณ SECRET KEY๋ฅผ ๋ํ ํ ์๋ช
๋๋ค.
Authentication ํ๋ฆ
1.
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ๋ค.
2.
์๋ฒ์์๋ ๊ณ์ ์ ๋ณด๋ฅผ ์ฝ์ด ์ฌ์ฉ์๋ฅผ ํ์ธ ํ, ์ฌ์ฉ์์ ๊ณ ์ ํ ID๊ฐ์ ๋ถ์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ์ ๋ณด์ ํจ๊ป Payload์ ๋ฃ๋๋ค.
โข
JWT ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ์ ์ค์ ํ๋ค.
3.
์ํธํํ SECRET KEY๋ฅผ ์ด์ฉํด ACCESS TOKEN์ ๋ฐ๊ธํ๋ค.
4.
ํด๋ผ์ด์ธํธ๋ Access Token์ ๋ฐ์ ์ ์ฅํ๋ค.
5.
ํด๋ผ์ด์ธํธ๋ ์ธ์ฆ์ด ํ์ํ ์์ฒญ๋ง๋ค ํ ํฐ์ ํค๋์ ์ค์ด ๋ณด๋ธ๋ค.
6.
์๋ฒ์์๋ ํด๋น ํ ํฐ์ Verify Signature๋ฅผ SECRET KEY๋ก ๋ณตํธํํ ํ, ์กฐ์ ์ฌ๋ถ, ์ ํจ๊ธฐ๊ฐ์ ํ์ธํ๋ค.
7.
๊ฒ์ฆ์ด ์๋ฃ๋๋ค๋ฉด, Payload๋ฅผ ๋์ฝ๋ฉํ์ฌ ์ฌ์ฉ์์ ID์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
Bearer HTTP Authentication
API์ ์ ์ํ๊ธฐ ์ํด์๋ access token์ API ์๋ฒ์ ์ ์ถํด์ ์ธ์ฆ์ ํด์ผ ํฉ๋๋ค. JWT ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ธ์ฆํ๋ ๊ฒฝ์ฐ ์ธ์ฆ ํ์
์ bearer ๋ก ์ฌ์ฉํ๊ณ ์ด๋ฌํ ์ธ์ฆ ๋ฐฉ๋ฒ์ Bearer Authentication๋ผ๊ณ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ ํฐ์ ์๋์ฒ๋ผ ์์ฒญ ํค๋์ Authorization ํ๋์ ๋ด์์ ธ ๋ณด๋
๋๋ค.
Authorization: <type> <credentials>
JSON
๋ณต์ฌ
์ธ์ฆ ํ์
์ bearer ์ด์ธ์๋ Basic, Digest, HOBA, Mutual ๋ฑ์ด ์์ต๋๋ค.
์ ๋ฆฌ
โข
JWT๋ ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ ํ ํฐ์ ์๋ฏธํ๋ค.
โข
JWT๋ Header, Payload, Signature๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
โข
JWT ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ธ์ฆํ๋ ๋ฐฉ๋ฒ์ Bearer Authentication๋ผ๊ณ ํ๋ค.
์ฐธ๊ณ ๋งํฌ
โข