πͺ JWT κ°λ
πͺ JWT κ°λ
JWT
λ?
JWT
(Json Web Token
)μΒ κ°κ²°νκ³ λ λ 립λ λ°©μμΌλ‘Β μ λ¨ μ¬μ΄μ μ 보λ₯Ό μ μ‘ν μ μλλ‘ μ μλRFC 7519
μΉ νμ€μ΄λ€.- μ μ‘λ μ 보λ λμ§νΈ μλͺ μ ν΅ν΄ κ²μ¦λλ―λ‘ μ λ’°ν μ μλ€.
- λ€μ λ κ°μ§ λ°©μμΌλ‘ λμ§νΈ μλͺ μ ν μ μλ€.
β
RSA
λλ ECDSA
μκ³ λ¦¬μ¦μ ν΅ν΄ 곡κ°/λΉκ³΅κ° ν€ μμΌλ‘ μλͺ
- μλͺ λ ν΄λ μμ΄ μμ‘° Β· λ³μ‘° λμ§ μμλμ§ κ²μ¦ν μ μλ€.
- μλͺ μ μμ±ν μͺ½μ΄ ν΄λΉ λΉκ³΅κ° ν€λ₯Ό μμ νκ³ μμμ μ¦λͺ ν μ μλ€.
β
HMAC
μκ³ λ¦¬μ¦μ ν΅ν΄ λΉλ°ν€λ‘ μλͺ
- ν ν°μ 무결μ±μ κ²μ¦ν μ μλ€.
- κ°μ λΉλ°ν€λ₯Ό κ°μ§ μ£Όμ²΄λ§ μ ν¨ν μλͺ μ μμ±ν μ μλ€.
- ν΄λ μ λ΄μ©μ μνΈνλμ§ μκ³ λꡬλ λ³Ό μ μλ€.
JWT
λμ
κ·Όκ±°
HTTP
μ μ€μν νΉμ§ μ€ νλλStateless
λ₯Ό μ§ν₯νλ€λ μ μ΄λ€.Stateless
λ ν΄λΌμ΄μΈνΈκ° λ³΄λΈ μ 보λ₯Ό μλ²μμ μ μ₯νμ§ μλλ€λ κ²μ΄λ€.Stateless
μ μ€μμνλ μ΄μ λ μλ²μ νμ₯μ±μΌλ‘ μ΄μ΄μ§λ€.Session
μ κ²½μ°Session ID
λ₯ΌMemory
λDB
λ μ΄λ ν λ°©μμΌλ‘ μλ²μ μ μ₯νλ€.- κ°λ Ή μλΉμ€κ° ν₯νν΄μ νΈλν½ λΆνλ₯Ό κ΄λ¦¬νκΈ° μν΄ μλ²μ μλ₯Ό λλ¦°λ€κ³ νμ.
- μ΄λ° κ²½μ° μ¬λ¬ κ°μ μλ²μμ κ΄λ¦¬νλ
Session ID
λ μλ‘ κ³΅μ λμ§ μκΈ° λλ¬Έμ μ¬μ©μ μμ²μ λν μΈκ° κΈ°λ₯μ΄ μ μ νκ² μ²λ¦¬λμ§ λͺ»νλ€.Β - μ΄λ
Server Clustering
μ΄λSession
μ μ₯μλ₯Ό μΈλΆμ λ μΌλ‘μ¨ μλ² κ°Session ID
λ₯Ό 곡μ ν μ μμ§λ§ λ³λͺ© νμ λ±μΌλ‘Session Storage
μ κ·Ό μλ μ νλ μ€μSession Storage
μ λΆνκ° μ§μ€λλ€λ λ¬Έμ κ° λ°μνλ€. - λν
Server Clustering
μ λ Έλ κ° ν΅μ λ¬Έμ λ‘Session
λΆμΌμΉ νμμ΄ λ°μν μ μλ€κ³ νλ€. - λ°λ©΄
JWT
λ μ¬μ©μ μ 보λ₯Ό μλ²μ μ μ₯νμ§ μκΈ° λλ¬Έμ μλ²κ° λμ΄λλ λ¬Έμ κ° μλ€λ λ»μ΄λ€.
JWT
ꡬ쑰
JWT
λ.
μΌλ‘ λΆλ¦¬λHeader
,Payload
,Verify-Signature
μΈ λΆλΆμΌλ‘ λλλ€.- μ¬κΈ°μ
Header
,Payload
λBase64Url
λ‘ μΈμ½λ© λ λ¬Έμμ΄μ΄λ€.
β
Header
- μλͺ μκ³ λ¦¬μ¦κ³Ό ν ν°μ νμ μ ν¬ν¨νλ€.
- μλͺ
μκ³ λ¦¬μ¦μλ
HMAC SHA256
λλRSA
λ±μ΄ λ€μ΄κ° μ μλ€. - ν ν°μ νμ
μλ
JWT
κ° λ¬Έμμ΄ κ°μΌλ‘ λ€μ΄κ°λ€.
β
Payload
- μ¬μ©μμ μΆκ° λ°μ΄ν°λ₯Ό λνλ΄λ ν΄λ μμ ν¬ν¨νλ€.
- ν΄λ μμ λ€μ μΈ κ°μ§ μ νμΌλ‘ λλλ€.
- λ±λ‘λ ν΄λ μ
- νμλ μλμ§λ§ κΆμ₯λλ ν΄λ μμ΄λ€.
- μνΈ μ΄μ©μ±μ μν΄ μ¬μ©λλ©°
JWT
μ κ°κ²°μ±μ μν΄ ν΄λ μ ν€λ μΈ κΈμλ‘ μ νλλ€. iss
,exp
,sub
,aud
,nbf
,iat
,jti
λ±μ΄ μλ€.
- κ³΅κ° ν΄λ μ
- 곡κ°λλλΌλ μκ΄μλ μ 보λ‘, μΆ©λ λ°©μ§λ₯Ό μν΄
URI
λ‘ μ μν΄μΌ νλ€.
- 곡κ°λλλΌλ μκ΄μλ μ 보λ‘, μΆ©λ λ°©μ§λ₯Ό μν΄
- λΉκ³΅κ° ν΄λ μ
JWT
λ₯Ό μ¬μ©νλ λΉμ¬μ κ°μ ν©μμ λ°λΌ μ μλ 컀μ€ν ν΄λ μμΌλ‘, λ±λ‘λκ±°λ 곡κ°λμ§ μμ μ 보μ΄λ€.
- λ±λ‘λ ν΄λ μ
β
Verify-Signature
- μλͺ
μ ν΅ν΄ λ©μμ§κ° μ μ‘ μ€ λ³κ²½λμ§ μμλ€λ μ¬μ€κ³Ό
JWT
μ λ°μ μκ° μ¬λ°λ₯Έμ§ νμΈν μ μλ€. - μλͺ
μ μμ±νλ €λ©΄ μλ νλͺ©λ€μ κ²°ν©νμ¬ μλͺ
ν΄μΌ νλ€.
- μΈμ½λ© λ
Header
- μΈμ½λ© λ
Payload
- λΉκ³΅κ° ν€
Header
μ μ§μ λ μκ³ λ¦¬μ¦
- μΈμ½λ© λ
JWT
μλ μ리
- μΈμ¦μμ μ¬μ©μκ° λ‘κ·ΈμΈνλ©΄
JWT
κ° λ°ν λλ€. - ν ν°μ μ격 μ¦λͺ μ΄λ―λ‘ λ³΄μ λ¬Έμ λ₯Ό λ°©μ§νκΈ° μν΄ νμν κΈ°κ° μ΄μ 보κ΄νμ§ μμμΌ νλ€.
- 보μμ΄ λΆμ‘±ν λΈλΌμ°μ μ μ₯μμ λ―Όκ°ν
Session
λ°μ΄ν°λ₯Ό μ μ₯νμ§ μλ κ²μ΄ μ’λ€κ³ νλ€. Local Storage
보λ€λHTTP-Only Cookie
μSession
λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ κ²μ΄ 보μμ±μ λμΌ μ μλ€κ³ νλ€.- μ¬μ©μκ° λ³΄νΈλ κ²½λ‘λ
Resource
μ μ κ·Όνλ € ν λ, ν΄λΌμ΄μΈνΈλJWT
λ₯Ό μ μ‘ν΄μΌ νλ€. - μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ΄
Authorization
ν€λμBearer
Schema
λ₯Ό μ¬μ©νμ¬JWT
λ₯Ό 보λΈλ€.
1
Authorization: Bearer <token>
- μλ²μμλ
Authorization
ν€λμμ μ ν¨νJWT
λ₯Ό νμΈνκ³ , μ ν¨νλ©΄ μ¬μ©μκ° λ³΄νΈλResource
μ μ κ·Όν μ μλλ‘ νμ©νλ€.
JWT
λ₯Ό ν΅ν μΌλ°μ μΈ λ‘κ·ΈμΈ κ³Όμ
- μ¬μ©μκ° ν΄λΌμ΄μΈνΈμμ λ‘κ·ΈμΈμ νλ€.
- μλ²μμ
Access Token
κ³ΌRefreshh Token
μ λ°ννλ€. - ν΄λΌμ΄μΈνΈμμ
Resource
λ₯Ό μμ²ν λλ§λ€Access Token
μ ν¬ν¨νλ€. - μλ²μμ ν΄λΉ ν ν°μ΄ μ ν¨νμ§ νμΈνλ€.
- λ§μ½ μ ν¨ κΈ°κ°μ΄ λ§λ£λλ λ± μ ν¨νμ§ μμ κ²½μ°
Refresh Token
μ νμΈνμ¬ ν΄λΌμ΄μΈνΈμAccess Token
κ³ΌRefresh Token
μ μ¬λ°κΈνλ€.
νκ³
- μλ
μ
JWT
μΈμ¦μ ꡬνν΄ λ³Έ μ μ μλλ° λΉμGoogle
κ²μμ ν΅ν΄ μ½λλ₯Ό λλΆλΆ κ°μ Έλ€ μΌλ κΈ°μ΅μ΄ μλ€. - κ·Έ λΉμ μ리λ₯Ό μ λλ‘ μ΄ν΄νμ§ λͺ»νκΈ° λλ¬Έμ
Refresh Token
μDB
μ μ μ₯ν΄μStateless
λ μ§μΌμ§μ§ μμλ€.
This post is licensed under CC BY 4.0 by the author.