JWT (JSON Web Token) μ΄λ
JWT(JSON Web Token)μ΄λ μ μ λ₯Ό μΈμ¦νκ³ μλ³νκΈ° μν JSON ν ν°μ μλ―Έν©λλ€.
μ΄ ν ν° λ΄μλ μ¬μ©μμ κΆν μ 보μ κ°μ μΈμ¦ μ λ³΄κ° Base64 URL λ°©μμΌλ‘ μΈμ½λ©λμ΄ ν¬ν¨λμ΄ μμ΅λλ€.
ν΄λΌμ΄μΈνΈκ° ν ν°μ HTTP ν€λμ μ€μ΄ μλ΅μ λ³΄λ΄ μλ²κ° ν΄λΌμ΄μΈνΈλ₯Ό μλ³νκ³ μΈμ¦/μΈκ°λ₯Ό μνν©λλ€.
JWT ꡬ쑰
JWTλ μΈ ννΈλ‘ λλμ΄μ§λ©°, κ° ννΈλ μ μΌλ‘ ꡬλΆλ©λλ€.
ν€λ(Header), νμ΄λ‘λ(Payload), μλͺ (Signature)μΌλ‘ ꡬμ±λ©λλ€.

ν€λ(Header)
ν€λμλ ν΄μ μνΈν μκ³ λ¦¬μ¦κ³Ό ν ν° νμ μ λ³΄κ° μμ΅λλ€.
- μκ³ λ¦¬μ¦: μλͺ
μμ±μ μ¬μ©ν μκ³ λ¦¬μ¦ μ’
λ₯
- ex) HS256, RS256
- νμ : ν ν°μ νμ , μ¬κΈ°μλ JWTκ° λμ£ .
νμ΄λ‘λ(Payload)
νμ΄λ‘λμλ ν ν°μ λ΄κΈΈ, μλ²μ ν΄λΌμ΄μΈνΈμμ μ£Όκ³ λ°κ³ μ νλ μ€μ μ 보λ€μ΄ μμ΅λλ€.
μ 보 νλλ₯Ό 'ν΄λ μ(claim)'μ΄λΌκ³ ν©λλ€.
- ν΄λ μ: key(name)-value νμμΌλ‘ μ΄λ£¨μ΄μ§ ν μμ μ 보
- ν΄λ μ μμ
- νμ€ ν΄λ μ(Registered Claim): JWT μ¬μμμ μ μν ν΄λ μ
- iss(issuer: λ°νμ)
- exp(expiration time: λ§λ£ μκ°)
- sub(subject: μ λͺ©)
- iat(issue at: λ°ν μκ°)
- jti(JWT ID)
- κ³΅κ° ν΄λ μ(Public Claim): μ¬μ μ μ μλ, 곡κ°μ© μ 보 μ λ¬μ μν ν΄λ μ
- λΉκ³΅κ° ν΄λ μ(Private Claim): λ°κΈμμ μμ μ κ°μ νμμ λ°λΌ μ μλ ν΄λ μ
- νμ€ ν΄λ μ(Registered Claim): JWT μ¬μμμ μ μν ν΄λ μ
μλͺ (Signature)
μλͺ μ ν€λμ νμ΄λ‘λλ₯Ό μ΄μ΄ λΆμΈ ν, μν¬λ¦Ώ(Secret Key) λλ νλΌμ΄λΉ ν€(Private Key)λ‘ μνΈνν κ°μ λλ€.
μνΈνλ ν€λμμ μ μν μκ³ λ¦¬μ¦ λ°©μμ μ¬μ©ν©λλ€.
μ΄λ ν€(Key)λ μλ²μμλ§ κ°κ³ μλ κ°μΌλ‘ μ΄ λΉλ°ν€κ° μ μΆλμ§ μλ μ΄μ νμΈμ΄ 볡νΈνν μ μμ΅λλ€.
μλͺ μ ν€λμ νμ΄λ‘λμ 무결μ±μ 보μ₯ν©λλ€. ν΄λΌμ΄μΈνΈκ° ν ν°μ μμ‘°νμ§ μμμμ μλ²κ° μλͺ μ κ²μ¦νμ¬ νμΈν μ μκ² ν΄μ€λλ€.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)
+ JWT μμ
JWTλ Base64URLλ‘ μΈμ½λ©μ΄ λμ΄ μμ΅λλ€.
Base64URLμ μΉ(URL) νκ²½μμ μμ νκ² μ¬μ©ν μ μλλ‘ μ€κ³λ μΈμ½λ© λ°©μμΌλ‘
λꡬλ λμ½λ©ν μ μμ΄ μνΈνμ κΈ°λ₯μ μμ΅λλ€.
https://jwt.io/μμ JWT Decoder / Encoder 체νμ ν μ μμ΅λλ€.

JWT λμ λ°©μ

- μ¬μ©μλ μμ΄λ/λΉλ°λ²νΈ λ±μ μΈμ¦ μ 보λ₯Ό μ λ ₯ν΄ μλ²λ‘ λ‘κ·ΈμΈ μμ²μ 보λ λλ€.
- μλ²λ μ
λ ₯λ°μ μ 보λ₯Ό νμΈνκ³ , μΈμ¦μ΄ μ±κ³΅νλ©΄ JWTλ₯Ό μμ±ν©λλ€.
- ν€λμ νμ΄λ‘λλ₯Ό μ μνκ³ , μν¬λ¦Ώ ν€μ νμ΄λ‘λλ₯Ό ν€λμ μ μλ μνΈν μκ³ λ¦¬μ¦μΌλ‘ μνΈννμ¬ μλͺ μ λ§λλλ€.
- ν΄λΌμ΄μΈνΈλ μλ²λ‘λΆν° λ°μ JWTλ₯Ό μ μ₯ν©λλ€(λ‘컬 μ€ν λ¦¬μ§ λ±). μ΄ν μμ² μ HTTP ν€λ Authorizationμ λ€μκ³Ό κ°μ΄ JWTλ₯Ό λ΄μ 보λ
λλ€.
- Authorization: Bearer <JWT>
- μλ²λ ν ν°μ μ ν¨μ±μ κ²μ¦ν©λλ€.
- μλͺ μ΄ μ ν¨νμ§, λ§λ£ μκ°μ΄ μ§λμ§ μμλμ§
- μλ²λ νμ΄λ‘λμμ μ¬μ©μ μ 보λ₯Ό μΆμΆνμ¬ μΈκ° μ²λ¦¬λ₯Ό ν©λλ€.
- μλ²λ ν΄λΉ μμ²μ μ²λ¦¬νκ³ , κ²°κ³Όλ₯Ό μλ΅μΌλ‘ ν΄λΌμ΄μΈνΈμκ² μλ΅ν©λλ€.
JWT μ₯λ¨μ
β μ₯μ
- μΈμ
μ μ₯μ λΆνμ (Stateless)
- JWT μμ²΄κ° μΈμ¦λ μ 보λ₯Ό ν¬ν¨νλ―λ‘, μΈμ μ μ₯μ κ°μ λ³λμ μ μ₯μκ° νμ μμ΅λλ€.
- λ°λΌμ μλ²λ ν΄λΌμ΄μΈνΈμ μνλ₯Ό κΈ°μ΅νμ§ μλ 무μν(stateless) κ΅¬μ‘°λ‘ λμν μ μμ΅λλ€.
- μλ² νμ₯μ μ 리
- 무μν μν€ν μ² λλΆμ, μλ² κ° μΈμ 곡μ κ° νμ μμ΄ νμ₯μ μ ν©ν©λλ€.
- μ¬μ©μ μΈμ¦ μ λ³΄κ° μΈμ¦ μ λ³΄κ° νμ΄λ‘λμ ν¬ν¨λμ΄ μμ΄, μμ² μλ§λ€ DBλ₯Ό μ‘°ννμ§ μμλ λ©λλ€.
- λΉλ° ν€λ₯Ό κΈ°λ°μΌλ‘ μλͺ μ μμ±νλ―λ‘ λ°μ΄ν° μλ³μ‘°λ₯Ό λ§μ μ μμ΅λλ€.
π₯ λ¨μ
- ν ν° μ체μ μ¬μ©μ μ λ³΄κ° μμΌλ―λ‘, ν ν° νμ·¨ μ μνν μ μμ΅λλ€.
- ν ν°μ μλ²κ° μλ ν΄λΌμ΄μΈνΈμμ κ΄λ¦¬νκΈ° λλ¬Έ νμ·¨λΉνλ©΄ λμ²νκΈ° μ΄λ ΅μ΅λλ€.
- μ΄λ―Έ λ°κΈλ ν ν°μ μ€κ°μ κ°μ λ‘ λ¬΄ν¨ννκΈ° νλλλ€.
- νμ΄λ‘λμ λ§μ μ 보λ₯Ό λ΄μ ν ν°μ΄ κΈΈμ΄μ§λ©΄ λ€νΈμν¬ μ±λ₯μ λΆλ΄μ΄ λ μ μμ΅λλ€.
- ν ν° λ§λ£ μκ° λλ λ§
- λ무 μ§§μΌλ©΄ μ¦μ μ¬λ°κΈμΌλ‘ λΆνΈνκ³
- λ무 κΈΈλ©΄ νμ·¨ μ μ₯κΈ°κ° μ μ©λ μ μμ΄ μ λΉν κ· νμ‘μμΌ ν©λλ€.
μ°Έκ³ μλ£
https://ivory-room.tistory.com/88
https://research.securitum.com/jwt-json-web-token-security/
https://www.geeksforgeeks.org/json-web-token-jwt/
