JWT - JSON Web Token
ν ν° κΈ°λ° μΈμ¦

ν ν° κΈ°λ° μμ€ν μ statelessνλ―λ‘ μ μ μ μΈμ¦ μ 보λ₯Ό μλ²λ μΈμ μ λ΄μλμ§ μλλ€.
μ μ κ° μλμ΄μ λΉλ°λ²νΈλ‘ λ‘κ·ΈμΈμ νλ€.
μλ²μΈ‘μμ ν΄λΉ κ³μ μ 보λ₯Ό κ²μ¦νλ€.
κ³μ μ λ³΄κ° μ ννλ©΄, μλ²μΈ‘μμ μ μ μκ² signed ν ν°μ λ°κΈν΄μ€λ€.
signedλ ν΄λΉ ν ν°μ΄ μλ²μμ μ μμ μΌλ‘ λ°κΈλ ν ν°μμ μ¦λͺ νλ signatureμ΄λ€.
ν΄λΌμ΄μΈνΈ μΈ‘μμ μ λ¬λ°μ ν ν°μ μ μ₯ν΄λκ³ , μλ²μ μμ²ν λλ§λ€, ν΄λΉ ν ν°μ ν¨κ» μλ²μ μ λ¬νλ€.
μλ²λ ν ν°μ κ²μ¦νκ³ μμ²μ μλ΅νλ€.
μΉ μλ²μμ ν ν°μ μλ²μ μ λ¬ν λλ, HTTP μμ²μ ν€λμ ν ν°κ°μ ν¬ν¨μμΌμ μ λ¬νλ€.
μ₯μ
무μν(Stateless)μ΄λ©° νμ₯μ±(scalability)κ° μλ€.
ν ν°μ ν΄λΌμ΄μΈνΈ μ¬μ΄λμ μ μ₯νκΈ°λλ¬Έμ μμ statelessνλ©°, μλ² νμ₯νκΈ°μ μ ν©ν νκ²½μ μ 곡νλ€.
보μμ±
ν΄λΌμ΄μΈνΈκ° μλ²μ μμ²μ λ³΄λΌ λ μΏ ν€λ₯Ό μ¬μ©ν¨μΌλ‘ μΈν΄ λ°μνλ μ·¨μ½μ μ΄ μ¬λΌμ§λ€.
νμ₯μ±(Extensibility)
ν ν°μ μ¬μ©ν΄ λ€λ₯Έ μλΉμ€μμλ κΆνμ 곡μ ν μ μλ€. μλ₯Ό λ€μ΄μ Fackbook, Naver, Google, Kakao κ³μ μΌλ‘ λ‘κ·ΈμΈν μ μλ€λ©΄, ν ν°μ μ νμ μΈ κΆνλ§ λΆμ¬ν΄ λ°κΈν μ μλ€.
μ¬λ¬ νλ«νΌ λ° λλ©μΈ
μλΉμ€μ κ·λͺ¨κ° 컀μ§λ©΄, μ°λ¦¬λ μ¬λ¬ λλ°μ΄μ€λ₯Ό νΈνμν€κ³ , λ λ§μ μ’ λ₯μ μλΉμ€λ₯Ό μ 곡νλ€. ν ν°μ μ¬μ©νλ€λ©΄, μ΄λ€ λλ°μ΄μ€μμλ, λλ©μΈμμλ ν ν°λ§ μ ν¨νλ€λ©΄ μμ²μ΄ μ μμ μΌλ‘ μ²λ¦¬λλ€.
JSON Web Token
JWTλ μΉνμ€(RFC7519)μΌλ‘μ JSON κ°μ²΄λ₯Ό μ¬μ©ν΄ κ°λ³κ³ μκ° μμ©μ μΈ λ°©μμΌλ‘ μ 보λ₯Ό μμ μ± μκ² μ λ¬ν΄μ€λ€.
λ§μ νλ‘κ·Έλλ° μΈμ΄μμ μ§μ(C, Java, Python, C++, R, JavaScript, Ruby...)
μκ° μμ©μ (self-contained) : JWTλ νμν λͺ¨λ μ 보λ₯Ό μ체μ μΌλ‘ μ§λκ³ μλ€.
μ½κ² μ λ¬ κ°λ₯ : μΉ μλ²μ κ²½μ° HTTP ν€λμ λ£μ΄ μ λ¬ν μ μκ³ , URLμ νλΌλ―Έν°λ‘ μ λ¬ν μ μλ€.
μ£Όλ‘ νμ μΈμ¦μ΄λ, μμ μ±μκ² μ 보 κ΅λ₯λ₯Ό ν λ μ¬μ©λλ€.

Header
typ : ν ν°μ νμ μ μ§μ
alg : ν΄μ± μκ³ λ¦¬μ¦μ μ§μ (HMAC SHA256 , RSA)
Payload
Payload λΆλΆμλ ν ν°μ λ΄μ μ λ³΄κ° λ€μ΄μλ°. μ¬κΈ°μ λ΄λ μ 보μ ν μ‘°κ°μ clame μ΄λΌ νλ©°, μ΄λ name,value μμΌλ‘ μ΄λ£¨μ΄μ Έμλ€.
ν΄λ μμ ν¬κ² μΈλΆλ₯λ‘ λλλ€.
Registered claim
μλΉμ€μμ νμν μ 보λ€μ΄ μλ, ν ν°μ λν μ 보λ€μ λ΄κΈ° μν΄ μ΄λ―Έ μ΄λ¦μ΄ μ ν΄μ§ ν΄λ μλ€μ΄λ€. λ±λ‘λ ν΄λ μμ μ¬μ©μ λͺ¨λ μ νμ (optional)νλ€.
registered claim
μ€λͺ
iss
ν ν° λ°κΈμ(issuer)
sub
ν ν° μ λͺ©(subject)
aud
ν ν° λμμ(audience)
exp
ν ν°λ§λ£μκ°(expriation)
nbf
Not Beforeλ‘ ν ν° νμ± λ μ§μ λΉμ·ν κ°λ
iat
ν ν°μ΄ λ°κΈλ μκ°(issued at)
jti
JWTμ κ³ μ μλ³μλ‘, μ€λ³΅μ²λ¦¬λ₯Ό λ°©μ§νκΈ° μν΄ μ¬μ©
Public Claim
κ³΅κ° ν΄λ μλ€μ μΆ©λμ΄ λ°©μ§λ μ΄λ¦μ κ°κ³ μμ΄μΌνλ€. μΆ©λ λ°©μ§λ₯Ό μν΄μλ ν΄λ μμ΄λ¦μ URI νμμΌλ‘ μ§λλ€.
Private Claim
ν΄λΌμ΄μΈνΈ <-> μλ² κ°μ νμνμ μ¬μ©λλ ν΄λ μλ€μ΄λ€. κ³΅κ° ν΄λ μκ³Ό λ¬λ¦¬ μ΄λ¦μ΄ μ€λ³΅λμ΄ μΆ©λ λ μ μμΌλ―λ‘ μ£Όμν΄μΌνλ€.
Signature
μλͺ μ Headerμ μΈμ½λ©λ κ°κ³Ό Payloadμ μΈμ½λ©λ κ°μ ν©μΉ ν μ£Όμ΄μ§ λΉλ°ν€λ‘ Hashλ₯Ό μμ±νλ€.
μ΄λ κ² λ§λ ν΄μ¬λ₯Ό base64ννλ‘ λνλ΄λ©΄λλ€.
λ€μκ³Ό κ°μ΄ μμ±λλ κ²μ νμΈν μ μλ€.
base64
λ€μκ³Ό κ°μ΄ base64λ₯Ό μ΄μ©ν΄ μμ±ν μ μλ€.
μ°Έκ³
Last updated