[μ 보보μ] JWT(JSON Web Token) μ΄λ?
π JWT(JSON Web Token)
π½ κ°μ
μ΄μ©μκ° Loginμ ν λ, ν΄λΉ νμμ κ³ μ ν Tokenμ λ§λ€μ΄μΌ νλλ°, κ·Έλ `JWT`λ₯Ό μ΄μ©νλ κ²μ΄μμ.
μΈμ¦μλ λνμ 3μΈλ°©μ΄ μλλ°, `Cookie, Session, Token` λ°©μμ΄ μλ κ²μ΄μμ.
JWTλ λΉμ¬μκ°μ μ 보λ₯Ό `JSON` κ°μ²΄λ‘ μμ νκ² μ μ‘νκΈ° μν κ°λ³κ³ , λ 립μ μΈ λ°©μμ μ μνλ κ°λ°©ν νμ€(RFC 7519)μΈ κ²μ΄μμ. μ΄ μ 보λ `Digital Sign` κ°λ μ΄ λ€μ΄κ° μμ΄ ν΄λΉ κ°μ νμΈνκ³ , μλλ°©μ΄ λ³΄λλ€λ κ²μ μ λ’°ν μ μλ κ²μ΄μμ.
μ’ λ κ°λ¨ν μ΄μΌκΈ°νλ©΄ μ 보λ₯Ό μμ νκ² μ λ¬νκΈ° μν΄ νμμ κΆν κ°μ κ²μ νμΈνκΈ° μν΄ μ¬μ©νλ μΉκ΅¬μΈ κ²μ΄μμ.
JWT 곡μ ννμ΄μ§
π¦ ꡬ쑰
JWTλ μμ κ°μ΄ μκΈ΄ κ²μ΄μμ. ν¬κ² μΈκ°μ§λ‘ ꡬλΆμ΄ λλ κ²μ΄μμ.
`Header`λ Tokenμ λν `Meta Data`λ₯Ό ν¬ν¨νκ³ μλ κ²μ΄μμ.
`Meta Data`μμλ `μνΈ μκ³ λ¦¬μ¦ μ’ λ₯(SHA256, RSA λ±λ±)`μ `Type`μ΄ λ€μ΄ μλ κ²μ΄μμ.
`Payload`λ `νμ μ 보(Issuer)`, `λ§λ£ κΈ°κ°(Expiration Time)`, `μ£Όμ (Subject)` λ±λ±μ΄ μ¬ μ μλ κ²μ΄μμ.
μ¦ κ°μ₯ μ€μν Dataκ° λ΄κΈ°λ λΆλΆμΈ κ²μ΄μμ.
`Verify Signature`λ JWTμ λ§μ§λ§ μΈκ·Έλ¨ΌνΈμΈλ°, Tokenμ λ³΄λΈ μ¬λμ μν΄ μ μ μλͺ μ΄ λμμΌλ©°, μ΄λ€ μμΌλ‘λ λ³κ²½λμ§ μμλμ§ νμΈνλλ° μ¬μ©λλ κ²μ΄μμ.
μλͺ μ `Header`, `Payload`, `μνΈνν κ°`μ μ΄μ©νμ¬ λ§λ€μ΄μ§λ κ²μ΄μμ.
π¦ JWT μ¬μ© νλ¦
μ΅μ΄ νμμ΄ Loginμ νλ©΄ Tokenμ μμ±νκ² λλλ°, `Payload` λΆμ νμ μ΄λ¦, νμ μν , Token μμ±μΌμ, Token λ§λ£ μΌμμ ν¨κ» μνΈνμ μ¬μ©λ Key κ°(νλ¬Έ)μ ν©μ³μ `Hash` μκ³ λ¦¬μ¦μ ν΅ν΄ λ¨λ°©ν₯μΌλ‘ μνΈν νλ κ²μ΄μμ.
μ΄λ€ μ΄μ©μκ° κ΄λ¦¬μλ§ λ³΄κ³ μΆμ λ΄μ©μ λ³΄λ €κ³ ν λμ κ΄λ¦¬μκ° ν΄λΉ λ΄μ©μ λ³΄λ €κ³ ν λ μ΄λ€ μΌμ΄ λ°μν κΉμ?
μ΅μ΄ Clientμμλ μμ²μ λ³΄λΌ λ 보κ΄νκ³ μλ Token(Loginμ λ°ν)μ `HTTP Request Header`μ λ£μ΄ ν¨κ» Serverμκ² λ³΄λ΄κ² λλ κ²μ΄μμ.
Serverλ ν΄λΉ κ°μ κ²μ¦νκΈ° μν΄ Tokenμ λ€μ λ§λ€μ΄ λ κ°λ₯Ό λΉκ΅νλ κ²μ΄μμ.
μ΄λ μμ²μΌλ‘ λ€μ΄μ¨ `JWT Header`μ `JWT Payload`λ₯Ό κ°μ Έμ€κ³ Serverμμ κ°μ§κ³ μλ λΉλ°κ°μ μ΄μ©ν΄μ `Signature` λΆλΆμ λ€μ λ§λλ κ²μ΄μμ.
κ·Έλμ κ°μ΄ λ§λ€λ©΄ κ΄λ¦¬μλΌκ³ νλ¨νκ³ ν΄λΉ λ΄μ©μ λ³Ό μ μκ² ν΄μ£Όκ³ , μλλ©΄ κ΄λ¦¬μκ° μλλΌκ³ νλ¨νκ³ , ν΄λΉ κ²μκΈμ λ³΄μ§ λͺ»νκ² ν μ μλ κ²μ΄μμ.
π½ μμΈ λ΄μ©
π¦ Access Tokenκ³Ό Refresh Token μ΄μΌκΈ°
JWT (Json Web Token)λ μΈμ¦μ μν΄ μ¬μ©λλ ν ν° νμμΌλ‘ μΌλ°μ μΌλ‘ λ κ°μ§ μ’
λ₯μ ν ν°μ μ¬μ©ν΄μ.
λ°λ‘ Access Tokenκ³Ό Refresh Tokenμ΄μμ.
μ’ λ₯ | μ ν | νΉ μ§ |
Access Token | μ£Όλ‘ Clientκ° λ³΄νΈλ μμ(Resource) μ κ·Ό μ μ¬μ© | β
μ§§μ μ ν¨ κΈ°κ°μ κ°μ§λ©°, λ³΄ν΅ λͺ λΆμμ λͺ μκ° μ λλ‘ μ€μ . β Clientκ° Serverμ Loginνμ¬ μΈμ¦ λ°μ λ€ λ°κΈ. β Clientλ Access Tokenμ HTTP Headerλ, Query Parameter λ±μ ν΅ν΄ Serverμ μ μνμ¬ λ³΄νΈλ μμμ μ κ·Όν μ μλμ§ μ¬λΆλ₯Ό κ²μ¦. β μ£Όλ‘ μΈκ°(Authorization) Serverμμ λ°κΈ. |
Refresh Token | Access Token λ§λ£ μ Refresh Tokenμ μ¬μ©νμ¬ μλ‘μ΄ Access Token λ°κΈ | β
Access Token λ³΄λ€ κΈ΄ μ ν¨ κΈ°κ°μ κ°μ§λ©°, μΌλ°μ μΌλ‘ μμΌμμ μμ£ΌμΌ μ λ μ€μ . β Access Token λ§λ£ νΉμ κ°±μ νμμ μ¬μ©. β μ£Όλ‘ μΈκ°(Authorization) Serverμμ λ°κΈ. β 보μ μ μ€μν μ 보μ΄λ―λ‘, μμ ν μ μ₯μ(λ°μ΄ν° λ² μ΄μ€ λ±)μ μ μ₯. |
μ¬μ€ JWTλ₯Ό μ¬μ©ν λ, Refresh Tokenμ ꡬννλ λ§λμ λν΄ κ°λ‘ μλ°μ΄ μ‘΄μ¬νκ³ μμ΄μ. κ·Έλ λ€λ©΄ Refresh Tokenμ μ₯, λ¨μ μ 무μμ΄ μμκΉμ?
μ₯ μ | λ¨ μ |
1. Access Tokenμ μ§§μ μ ν¨ κΈ°κ°μΌλ‘ μΈν΄ Access Token λ§λ£ μμλ Refresh Tokenμ μ¬μ©νμ¬ μλ‘μ΄ Access Tokenμ μ»μ μ μλ€. 2. μ΄μ©μ λ° μ¬μ©μλ μμ μ΄μ λ‘ μμ£Ό Loginμ νμ§ μμλ λλ€. |
1. 보μ μ μ£Όμκ° λμ± νμ. Refresh Tokenμ΄ λ
ΈμΆλκ² λ κ²½μ° μ
μμ μΈ μ¬μ©μκ° κ³μν΄μ μλ‘μ΄ Access Tokenμ λ°κΈ λ°μ μ μλ λ¬Έμ . 2. Refresh Tokenμ μ¬μ©νλ κ²½μ° μ£ΌκΈ°μ μΌλ‘ κ°±μ μ΄λ, νμ μ μ± μ μ€μ νμ¬ λ³΄μ κ°νμ λν λ Έλ ₯ νμ. |
μμ λ΄μ©λ€λ‘ μΈν΄ Refresh Tokenμ μ¬μ© μ¬λΆλ 보μ μ건, μ΄μ©μ νΉμ μ¬μ©μ κ²½ν λ° Applicationμ νΉμ μꡬ μ¬νμ λ°λΌ μ μ©ν μ§ λ§μ§κ° κ²°μ λκ² λΌμ.
Refresh Tokenμ μμ ν μ μ₯μμ 보μμ μΌλ‘ κ΄λ¦¬λκ³ , μ μ ν κ°±μ λ° νμ μ μ±
μ΄ μ μ©λλ€λ©΄ Refresh Tokenμ μ¬μ©νλ κ²μ΄ λ§€μ° ν¨μ¨μ μΈ μΈμ¦/μΈκ° ꡬν λ°©μμΌ μ μμ΄μ.
λ€λ§, μ μ ν κ΄λ¦¬ μμ΄ μ¬μ©λ κ²½μ° λ³΄μ μνμ΄ λ μ μκΈ° λλ¬Έμ μ£Όμκ° νμν΄μ.