json web token
์ค๋ช
JSON ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฐ ์์ฒด์ ์ ๋ณด๋ค์ ์ ์ฅํ๊ณ ์๋ ์นํ ํฐ.
claims์ ์์ ํ๊ฒ ์ ๋ฌํ๋ ํ์ค.
HMAC ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ ํ๊ฑฐ๋, RSA or ECDSA๋ฅผ ์ฌ์ฉํ๋ ๊ณต๊ฐ / ๊ฐ์ธํค ์์ ์ฌ์ฉํ์ฌ ์๋ช
์ด ๊ฐ๋ฅํจ.
๊ถํ ๋ถ์ฌ ๋ฐ ์ ๋ณด๊ตํ์์ ์์ ์ฌ์ฉ.
โณ๏ธ claims ?
JWT ์ PAYLOAD ๋ถ๋ถ์ ๊ตฌ์ฑํ๊ณ ๊ตํ๋๋ ์ ๋ณด ์งํฉ.
ํ ํฐ์๊น์
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY0MDI2NjczOX0.A5bzyF4jkKVmdDzboK8_qsPbDh3qGO3v2lgcSp5K41CxmSgyDZlKxBfcZNiZ754S_IDhFOPO7m18bsBqhZgBMw |
์์ ๊ฐ์ ํํ๋ก ์๊ฒผ์ผ๋ฉฐ, https://jwt.io/ ์ฌ์ดํธ์์ ํ ํฐ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
๊ตฌ์ฑ๋ฐฉ์
HEADER, PAYLOAD, SIGNITURE ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
์ด ์ธ๋ถ๋ถ์ Base64url ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ์ฌ ๋ณ๋๋ก ์ธ์ฝ๋ฉ๋๋ฉฐ JWT ์์ฑ์ ์ํ ์ (.)์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ๋๋ค.
var token = base64UrlEncoding(HEADER) + '.' + base64UrlEncoding(PAYLOAD) + '.' + base64UrlEncoding(SIGNITURE); ↓↓↓↓ var token = eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY0MDI2NjczOX0.A5bzyF4jkKVmdDzboK8_qsPbDh3qGO3v2lgcSp5K41CxmSgyDZlKxBfcZNiZ754S_IDhFOPO7m18bsBqhZgBMw |
๊ฐ ๊ตฌ์ฑ ์ค๋ช ์ ์๋์ ๊ฐ๋ค.
HEADER | signiture ์ ๋ณด๋ฅผ ํด์ฑํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด๋ค์ด ๋ด๊ฒจ์๋๊ณณ. HMAC, SHA256 or RSA ์ ๊ฐ์ ์๋ช ์๊ณ ๋ฆฌ์ฆ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋จ. |
PAYLOAD | ์๋ฒ, ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ์์คํ
์์ ์ค์ ๋ก ์ฌ์ฉ๋ ์ ๋ณด์ ๋ํ ๋ด์ฉ์ด ๋ด๊ฒจ์์. PAYLOAD claims ์ 3๊ฐ์ง ์ ํ์ด ์กด์ฌ - registered claims: ํ์๋ ์๋์ง๋ง ์ํธ ์ด์ฉ์ ์ํด ๋ฏธ๋ฆฌ ์ ์๋ ํด๋ ์(RFC 7519) ์งํฉ (iss, exp, sub, aud..) - public claims: jwt ์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ๋ง์๋๋ก ์ ์. ์ถฉ๋ ๋ฐฉ์ง ์ํด ๋ค์์คํ์ด์ค๋ฅผ ํฌํจํ๋ URL๋ก ์ ์ ํ์ - private claims: ์ฌ์ฉ์ ๋์ํ๊ณ ๋ฑ๋ก๋ ํด๋ ์์ด๋ ๊ณต๊ฐ ํด๋ ์์ด ์๋ ๋น์ฌ์๊ฐ์ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ์์ฑ๋ ๋ง์ถค ํด๋ ์ |
SIGNITURE | ํ ํฐ์ ์ ํจ์ฑ ๊ฒ์ฆ์ ์ํ ๋ฌธ์์ด. ์ด ๋ฌธ์์ด๋ก ์ ํจํ ํ ํฐ์ธ์ง ํ์ธํจ. ๋ฉ์ธ์ง๊ฐ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํ๋๋ฐ ์ฌ์ฉ. |
๋์๋ฐฉ์
jwt ํ ํฐ ์ธ์ฆ ๋ฐฉ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ ค๋ณธ๊ฒ์ด๋ค. (oauth2์ ํ๊ฐ๋ ์๋ต)
์ฅ์ ๊ณผ ๋จ์
- ์ฅ์
์ค์์ ์ธ์ฆ์๋ฒ, ๋ฐ์ดํฐ ์คํ ์ด์ ๋ํ ์์กด์ฑ์ด ์๊ณ , ์์คํ ์ํํ์ฅ์ ์ ๋ฆฌํ๋ค. - ๋จ์
PAYLOAD ์ ๋ณด๊ฐ ๋ง์์ง๋ฉด ๋คํธ์ํฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํจ.
ํ ํฐ์ด ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๊ธฐ์ ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ํ ํฐ์ ์กฐ์ํ ์ ์๋ค.
์ฐธ์กฐ
https://ko.wikipedia.org/wiki/JSON_%EC%9B%B9_%ED%86%A0%ED%81%B0
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-jwt/dashboard
https://techdocs.akamai.com/api-gateway/docs/json-web-token-jwt-val#jwt-claims
'๊ฐ๋ฐ > etc' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SSE (Server Sent Event) (1) | 2023.08.20 |
---|---|
Vault (1) | 2023.02.07 |
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ (Hexagonal Architecture) (2) | 2022.09.25 |
Rest API (0) | 2021.06.02 |
HTTP๊ด๋ จ (https, spdy, ajax, websocket) (0) | 2018.12.09 |