πͺ 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ν€λμBearerSchemaλ₯Ό μ¬μ©νμ¬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.

