Json Web Token - g-market/b-shop-backend GitHub Wiki
JWT
λΉλ°ν€λ₯Ό μ΄μ©νμ¬ μλͺ λ JSON ννμ λ°μ΄ν°μ λλ€. νμ΄λ‘λμ μ¬μ©μ μΈμ¦ μ 보λ₯Ό λ£μ΄μ ν ν°μ λ°κΈν΄μ£Όλ©΄ μΆν μΈμ¦μ΄ νμν 리μμ€μ μ κ·Ό μ μ¬μ©μκ° μλ²μ ν ν°μ ν¬ν¨ν΄μ μ μ‘νμ¬ μλ²μΈ‘μμλ 볡μ‘ν μΈμ¦ κ³Όμ μμ΄ ν ν°λ§μΌλ‘ μ¬μ©μλ₯Ό μΈμ¦ λ° μΈκ°ν μ μλ κ²μ λλ€.
JWTλ ν€λ, νμ΄λ‘λ, sign(μλͺ ) μΈ κ°μ§ μ 보λ₯Ό base64λ‘ μΈμ½λ©ν κ°μ μ½€λ§('.')λ₯Ό μ¬μ΄μ λκ³ μ΄μ΄λΆμΈ ννλ‘ μμ±λ©λλ€.
- ν€λ: JWT μλͺ μ μ¬μ©λ μκ³ λ¦¬μ¦μ λ΄μλλ€.
- νμ΄λ‘λ: ν ν°μ λ΄κΈ΄ 주체(Subject), λ§λ£μΌ(exp), μμ±μ(issuer) λ±μ λ΄μλλ€.
- μκ·Έλμ²: ν€λμ νμ΄λ‘λλ₯Ό κ°κ° base64λ‘ μΈμ½λ©ν ν μ½€λ§λ‘ μ΄μ΄λΆμΈλ€. κ·Έλ¦¬κ³ μ΄λ₯Ό ν€λμ λͺ μλ μκ³ λ¦¬μ¦μΌλ‘ μνΈνν κ°μ λ΄μλλ€.
λΉλμΉν€ μνΈν λ°©μμ μ¬μ©νκΈ° λλ¬Έμ μλ²μΈ‘μμλ μ΄ ν ν°μ λ°μμ μκ·Έλμ²λ₯Ό 볡νΈννμ¬ λμ½λ©νλ λ°©μμΌλ‘ ν ν°μ μ ν¨μ±μ κ²μ¦ν μ μμ΅λλ€.
Access Token, Refresh Token
μλ²μΈ‘ 리μμ€μ μ κ·Όν λ ν΄λΌμ΄μΈνΈ λ³ΈμΈμ μΈμ¦ν μ μλ μ‘μΈμ€ ν ν°μΌλ‘ λμν©λλ€. κ·Έλ°λ° μ΄ JWTλ Statelessν λ°©μμ΄κΈ° λλ¬Έμ μλ²μΈ‘μμλ μ΄ ν ν°μ κ°κ³ μλ ν΄λΌμ΄μΈνΈκ° μ λ§ ν΄λΌμ΄μΈνΈ λ³ΈμΈμ΄ λ§λμ§ νμΈν μ μλ€λ λ¬Έμ μ μ΄ μμ΅λλ€.
κ·Έλμ μ΄μ λν 보μ λμ± μΌλ‘ 리νλ μ¬ ν ν°μ΄λΌλ μΆκ°μ μΈ ν ν°μ νμ©ν μ μμ΅λλ€. μ΄ λ¦¬νλ μ¬ ν ν°μ μ¬μ©μ μΈμ¦μ΄ μλ μλ‘μ΄ μ‘μΈμ€ ν ν°μ μμ±νλ μ©λλ‘λ§ μ¬μ©λ©λλ€.
κ·Έλ¬λ©΄ μ κ΅³μ΄ λ³λμ ν ν°μ λκ³ μλ‘μ΄ μ‘μΈμ€ ν ν°μ λ°κΈλ°λλ‘ ν κ²μΌκΉμ? μ΄λ μμ JWT μ μΆ λ¬Έμ λ₯Ό λ€μμ²λΌ ν΄κ²°νκΈ° μν κ²μ λλ€.
- μ¬μ©μλ Access Tokenκ³Ό Refresh Tokenμ λ λ€ μλ²μ μ μ‘νμ¬ μ μλ‘ μΈμ¦νκ³ λ§λ£λμ μ νμλ‘ μλ‘μ΄ Access Tokenμ λ°κΈ.
- 곡격μλ Access Tokenμ νμ·¨νλλΌλ μ§§μ μ ν¨ κΈ°κ°μ΄ μ§λλ©΄ μ¬μ©ν μ μμ΅λλ€.
- μ μμ μΈ ν΄λΌμ΄μΈνΈλ μ ν¨ κΈ°κ°μ΄ μ§λλλΌλ Refresh Tokenμ μ¬μ©νμ¬ μλ‘μ΄ Access Tokenμ μμ±, μ¬μ©ν μ μμ΅λλ€.
λ§μ½ Refresh Tokenμ νμ·¨κ° λ°μνλ€λ©΄?
곡격μλ μ΄ ν ν°μ μ ν¨ κΈ°κ°λ§νΌ λ€μ Access Tokenμ μμ±ν΄μ λ€μ μ μμ μΈ μ¬μ©μμΈ μ² μμ₯ν μ μλ€. κ·Έλ κΈ° λλ¬Έμ μ¬κΈ°μλ μλ²μΈ‘μ κ²μ¦ λ‘μ§μ΄ νμν©λλ€.
ν΄κ²° λ°©λ²: μλ² NO_SQL REDIS μμ Refresh Tokenμ μμ
Refresh_Token_αα
‘α―αα
±
(https://user-images.githubusercontent.com/32899025/228708386-bef5f54c-1912-4dfa-9937-1c0801a56174.mp4)