'์ค๋์ ๊ณ์ , ์ค๋์ ๋ ธ๋' ๋ผ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์
JWT๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ+ํ์๊ฐ์ ์ ํ๋ก๊ทธ๋๋ฐ์ ํด๋ณด์์ง๋ง,
JWT์ ์นํด์ง์ง ์์ ์์ธํ ์์๋ณด๊ธฐ๋ก ํด๋ณด์๋ค.
JWT ๋ ๋ฌด์์ผ๊น?
JWT๋ JSON Web Token์ ์ฝ์๋ก ์ ์ ์๋ช ๋ URL-safe (URL๋ก ์ด์ฉํ ์์๋ ๋ฌธ์ ๋ง ๊ตฌ์ฑ๋)์ JSON์ ๋๋ค.
JWS (Jason Web Signature) : JSON์ ์ํธํํ์ฌ URL-safe ๋ฌธ์์ด๋ก ํํํ ๊ฒ
JWE (Jason Web Encryption) : JSON ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ ๋ฐฉ๋ฒ
*URL Safe : URL์ ํฌํจ ํ ์ ์๋ ๋ฌธ์๋ฅผ ํฌํจํ์ง ์๋ ๊ฒ
JWT ํ ํฐ ๊ตฌ์ฑ
JWT ํ ํฐ ๊ตฌ์ฑ์ ํค์ด(header) + ํ์ด๋ก๋(payload) + ์๋ช (Signature)๋ก ๊ตฌ์ฑ๋๋ฉฐ,
๊ฐ ๋ถ๋ถ์ Base64๋ก ์ธ์ฝ๋ฉ ๋์ด ํํ๋๋ค.
ํค์ด(header) : ํ ํฐ์ ์ ํ (JWT) + HMAC, HS256(SHA256) ๋๋ RSA์ ๊ฐ์ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ๋ธ๋ค.
ํ์ด๋ก๋(payload) : ํ ํฐ์ ๋ด์ (name/value)๋ฅผ ํ์์ผ๋ก ์ด๋ฃฌ ํด๋ ์(claim)์ ๋ณด๋ฅผ ๋ํ๋ธ๋ค.
ํด๋ ์ ์ ๋ณด๋ ๋ฑ๋ก๋ ํด๋ ์, ๊ณต๊ฐ ํด๋ ์, ๋น๊ณต๊ฐ ํด๋ ์์ผ๋ก ๋๋๋ค.
์๋ช (Signature) : secret key๋ฅผ ํฌํจํ์ฌ ์ํธํ ๋์ด์๋ค.
JWT Process
- ํด๋ผ์ด์ธํธ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์ฅํ์ง ์์, ํ ํฐ๊ธฐ๋ฐ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค.
- ๋ก๊ทธ์์ ์, ๋ก์ปฌ ์คํ ๋ฆฌ์ง ์ ์ฅ๋ JWT ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ค.
JWT์ ์ ์ฉ
- ํ์์ธ์ฆ : JWT์ ๊ฐ์ฅ ํํ ๋ฐฉ๋ฒ
- ์ ๋ณด๊ต๋ฅ : ๋ ๊ฐ์ฒด ์ฌ์ด์์ ์์ ์ฑ์๊ฒ ์ ๋ณด๋ฅผ ๊ตํํ๊ธฐ์ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
์ ๋ณด๊ฐ ์๋ช ๋์ด์๊ธฐ ๋๋ฌธ์, ๋ณด๋ธ์ด๊ฐ ๋ฐ๋์ง ์์๋์ง ๋์ค์ ์กฐ์๋์ง ์์๋์ง ํ์ธํ ์ ์๋ค.
JWT ์ฅ์
- ์ฌ์ฉ์ ์ธ์ฆ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ ํ ํฐ ์์ฒด์ ํฌํจ๋์ด ๋ณ๋ ์ธ์ฆ ์ ์ฅ์๊ฐ ํ์์๋ค.
- ๋๋ฒ๊น ๋ฐ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค.
- ํธ๋ํฝ ๋ถ๋ด์ด ๋ฎ๋ค.
- ๋ ๋ฆฝ์ ์ธ JWT
JWT ๋จ์
- ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ ์๋ก ํ ํฐ์ด ์ปค์ ธ ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ค ์ ์๋ค.
- JWT๋ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ ์ ์ด๊ฐ ์ด๋ ต๋ค.
- ์์๋ก ํ ํฐ์ ์ญ์ ํ ์ ์์ด 'ํ ํฐ ๋ง๋ฃ ์๊ฐ'์ ๊ผญ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
- Payload ๋ ์ํธํ ํ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์
- JWE๋ฅผ ์ํธํ ํ๊ฑฐ๋ Payload์ ์ค์ํ ๋ฐ์ํฐ๋ฅผ ๋ฃ์ง ๋ง์์ผํ๋ค.
opennaru blog, 'JWT(JSON Web Token) ์ดํด์ ํ์ฉ' ์ฐธ๊ณ ํ์์ต๋๋ค.