π JWT (JSON Web Token)
β JWT λ?
JWTλ λΉμ¬μκ°μ μ 보λ₯Ό JSON κ°μ²΄λ‘ μμ νκ² μ μ‘νκΈ° μν μ»΄ν©νΈνκ³ λ 립μ μΈ λ°©μμ μ μ νλ κ°λ°©ν νμ€μ΄λ€. μ΄ μ 보λ λμ§νΈ μλͺ μ΄ λμ΄ μμΌλ―λ‘ νμΈνκ³ μ λ’°ν μ μλ€. JWT λ λΉλ°(HMAC μκ³ λ¦¬μ¦ μ¬μ©) λλ RSA λλ ECDSAλ₯Ό μ¬μ©νλ 곡κ°/κ°μΈν€ κΉ‘μ μ¬μ©νμ¬ μλͺ ν μ μλ€.
JWTλ₯Ό μνΈννμ¬ λΉμ¬μ κ°μ λΉλ°μ±μ μ 곡ν μλ μμ§λ§ μ¬κΈ°μλ μλͺ λ ν ν°μ μ€μ μ λ κ²μ΄λ€. μλͺ λ ν ν°μ κ·Έ μμ ν¬ν¨λ μ 보, μꡬμ¬ν λ±μ 무결μ±μ νμΈν μ μλ λ°λ©΄ μνΈνλ ν ν°μ λ€λ₯Έ λΉμ¬μλ‘λΆν° ν΄λΉ ν΄λ μμ μ¨κΈ΄λ€ . 곡κ°/κ°μΈ ν€ μμ μ¬μ©νμ¬ ν ν°μ μλͺ ν λ μλͺ μ κ°μΈ ν€λ₯Ό 보μ ν λΉμ¬μλ§μ΄ μλͺ ν λΉμ¬μμμ μΈμ¦νλ€.
β JWT μ ꡬ쑰
κ°λ¨ν ννμ JSON μΉ ν ν°μ μ ( .)μΌλ‘ ꡬλΆλ μΈ λΆλΆμΌλ‘ ꡬμ±λλ€.
- 머리κΈ
- μ ν¨ νμ¬λ
- μλͺ
λ°λΌμ JWTλ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°λ€.
xxxxx.yyyyy.zzzzz
ν€λ (Header)
ν€λλ μΌλ°μ μΌλ‘ ν ν° μ ν(JWT)κ³Ό μ¬μ© μ€μΈ μλͺ μκ³ λ¦¬μ¦(μ: HMAC SHA256 λλ RSA)μ λ λΆλΆμΌλ‘ ꡬμ±λλ€.
{
"alg": "HS256",
"typ": "JWT"
}
κ·Έλ° λ€μ μ΄ JSONμ Base64Urlλ‘ μΈμ½λ©λμ΄ JWTμ 첫 λ²μ§Έ λΆλΆμ νμ±νλ€.
νμ΄λ‘λ(μ 보) (PayLoad)
ν ν°μ λ λ²μ§Έ λΆλΆμ μ 보λ₯Ό ν¬ν¨νλ νμ΄λ‘λλ€. ν΄λ μμ μν°ν°(μΌλ°μ μΌλ‘ μ¬μ©μ) λ° μΆκ° λ°μ΄ν°μ λν μ€λͺ μ΄λ€. ν΄λ μμλ λ±λ‘λ ν΄λ μ , κ³΅κ° ν΄λ μ λ° λΉκ³΅κ° ν΄λ μ μ μΈ κ°μ§ μ νμ΄ μλ€ .
νμ΄λ‘λμ μλ λ€μκ³Ό κ°λ€.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
κ·Έλ° λ€μ νμ΄λ‘λλ Base64Urlλ‘ μΈμ½λ©λμ΄ JSON μΉ ν ν°μ λ λ²μ§Έ λΆλΆμ νμ±νλ€.
μλͺ (Signiture)
μλͺ λΆλΆμ μμ±νλ €λ©΄ μΈμ½λ©λ ν€λ, μΈμ½λ©λ νμ΄λ‘λ, λΉλ°, ν€λμ μ§μ λ μκ³ λ¦¬μ¦μ κ°μ Έμμ μλͺ ν΄μΌ νλ€.
μλ₯Ό λ€μ΄ HMAC SHA256 μκ³ λ¦¬μ¦μ μ¬μ©νλ €λ κ²½μ° μλͺ μ λ€μκ³Ό κ°μ λ°©μμΌλ‘ μμ±λλ€.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
μλͺ μ λμ€μ λ©μμ§κ° λ³κ²½λμ§ μμλμ§ νμΈνλ λ° μ¬μ©λλ©° κ°μΈ ν€λ‘ μλͺ λ ν ν°μ κ²½μ° JWT λ°μ μκ° λꡬμΈμ§ νμΈν μλ μλ€.
'Back > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring] Bean (5) | 2023.07.19 |
---|---|
[Spring/Security] Authentication κ°μ²΄κ° κ°μ§ μ μλ 2κ°μ§ νμ (4) | 2023.06.23 |
[Spring/Security] κ΅¬κΈ νμ νλ‘ν μ 보 λ°μμ€κΈ° (5) | 2023.06.23 |
[Spring/Security] κ΅¬κΈ λ‘κ·ΈμΈ μ€λΉ (6) | 2023.06.23 |
[Spring] μ€νλ§ AOP - ν¬μΈνΈμ»· / ν¬μΈνΈμ»· μ§μμμ μ’ λ₯ / execution / @target / @within (0) | 2023.05.25 |