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 ์ ๋ณด๊ฐ ๋ง์์ง๋ฉด ๋คํธ์ํฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํจ.
ํ ํฐ์ด ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๊ธฐ์ ์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ํ ํฐ์ ์กฐ์ํ ์ ์๋ค.
์ฐธ์กฐ
JWT.IO
JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.
jwt.io
https://ko.wikipedia.org/wiki/JSON_%EC%9B%B9_%ED%86%A0%ED%81%B0
JSON ์น ํ ํฐ - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
JSON ์น ํ ํฐ์ํ์ธํฐ๋ท ํ์ค์ต์ด ์ถํ์ผ2010๋ 12์ 28์ผ (2010-12-28)๋ง์ง๋ง ๋ฒ์ RFC 75192015๋ 5์์กฐ์งIETF์ฝ์ดJWT JSON ์น ํ ํฐ(JSON Web Token, JWT, "jotโ[1])์ ์ ํ์ ์๋ช ๋ฐ ์ ํ์ ์ํธํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ
ko.wikipedia.org
Express์์ JWT๋ก ์ธ์ฆ์์คํ ๊ตฌํํ๊ธฐ ( Access Token๊ณผ Refresh Token )
Express์์ jwt๋ฅผ ์ด์ฉํ์ฌ access token์ผ๋ก๋ง ์ธ์ฆ์ ํ๋ ๊ธ์ ๋ง์ด ์๋๋ฐ, refresh token๊น์ง ๊ตฌํํ ์๋ฃ๋ ๊ทธ๋ ๊ฒ ๋ง์ง์์ ์ด ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค.์ด ๊ธ์ ๊ตฌํ์ ์น์ค๋์ด ์์ด, JWT์ ์์ธํ
velog.io
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-jwt/dashboard
[๋ฌด๋ฃ] Spring Boot JWT Tutorial - ์ธํ๋ฐ | ๊ฐ์
Spring Boot, Spring Security, JWT๋ฅผ ์ด์ฉํ ํํ ๋ฆฌ์ผ์ ํตํด ์ธ์ฆ๊ณผ ์ธ๊ฐ์ ๋ํ ๊ธฐ์ด ์ง์์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ํ์ตํ ์ ์์ต๋๋ค., [์ฌ์ง] ๋ณธ ๊ฐ์๋ Spring Boot, Spring Security๋ฅผ ์ด์ฉํด์ JWT ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ์ฝ
www.inflearn.com
https://techdocs.akamai.com/api-gateway/docs/json-web-token-jwt-val#jwt-claims
JSON web token (JWT) validation
JSON web token is an open standard (RFC 7519) that defines a compact and self-contained method for securely transmitting JSON-encoded information between parties. With <<COMPANY_NICKNAME>>, you can use JWTs to quickly identify and authorize API consumers w
techdocs.akamai.com
'๊ฐ๋ฐ > 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 |