π JWT : Json Web Token
JWTλ μΈ λΆλΆμΌλ‘ ꡬμ±λλ€ : ν€λ(Header), νμ΄λ‘λ(Payload), μλͺ (Signature).
- ν€λ (Header): ν ν°μ μ ν (μ¦, JWT)κ³Ό ν΄μ± μκ³ λ¦¬μ¦ (μ: HMAC SHA256 λλ RSA)μ μ μνλ λ° μ¬μ©λλ€.
- νμ΄λ‘λ (Payload): νμ΄λ‘λλ ν΄λ μμ ν¬ν¨νκ³ μμΌλ©°, μ΄λ μν°ν° (μΌλ°μ μΌλ‘ μ¬μ©μ)μ μΆκ° λ°μ΄ν°μ λν μ μΈμΌλ‘ ν΄λ μμλ λ±λ‘λ (μ¦, νμ€μ μ μλ), 곡κ°, λΉκ³΅κ° ν΄λ μμ΄ μλ€.
- μλͺ (Signature): ν€λμ νμ΄λ‘λλ₯Ό ν©μΉ ν, λΉλ°ν€λ₯Ό μ¬μ©νμ¬ μ΄λ₯Ό μνΈννλ€. μ΄ μλͺ μ ν ν°μ΄ λ³μ‘°λμ§ μμμμ νμΈνλ λ° μ¬μ©λλ©°, λΉλ° ν€λ₯Ό μκ³ μλ κ²½μ°μλ§ ν ν°μ νμΈνκ±°λ μμ±ν μ μλ€.
μ΄ μΈ λΆλΆμ μ ('.')μΌλ‘ ꡬλΆλμ΄ νλμ λ¬Έμμ΄λ‘ μ°κ²°λλ€. JWTμ κ°μ₯ ν° μ₯μ μ€ νλλ μ λ³΄κ° ν΄λΉ ν ν° μ체μ ν¬ν¨λμ΄ μκΈ° λλ¬Έμ, λ³λμ μΈμ¦ μ μ₯μκ° νμ μλ€λ κ²μ΄λ€. μ΄λ μνλ₯Ό μ μ§νμ§ μλ(stateless) μΈμ¦ λ©μ»€λμ¦μ΄ κ°λ₯νκ² νμ¬ μλ²μ νμ₯μ±μ μ¦κ°μν΅λλ€. νμ§λ§ JWTλ ν ν°μ΄ νμ·¨λλ©΄ 곡격μκ° κ·Έ ν ν°μ μ¬μ©ν΄ μμ€ν
μ μ κ·Όν μ μμΌλ―λ‘ λ³΄μμ μ£Όμν΄μΌ νλ€.
π JWT ν ν°μ μ μ¬μ© ν κΉ
μΈμ λ°©μ λ‘κ·ΈμΈ
λ‘κ·ΈμΈ μμ²μ΄ λ€μ΄μ€λ©΄ μ¬μ©μ μ 보λ₯Ό νμΈ ν μλ²μ μΈμ
μ λ§λ€μ΄ μ¬μ©μ μ 보λ₯Ό DBλ± μλ²μ μ μ₯νκ³ , ν΄λΌμ΄μΈνΈμ μΈμ
μ λ°νν΄ μΈμ
μ μ΄μ©ν΄ λ‘κ·ΈμΈ ν κ°λ₯ν μμ
λ€μ μνν μ μλ€.
μ΄λ¬ν μΈμ μ μ΄μ©νμ λμ λ¬Έμ μ μ
1. μλ² μμμ κ³Όλν μ¬μ©
- μΈμ
μ μλ²μ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° λλ¬Έμ λ§μ μ¬μ©μκ° λμμ μλ²μ μ μνκ² λλ©΄ μλ²μ λΆνλ₯Ό μ¦κ°μν€κ³ μ±λ₯μ μ νμν¬ μ μλ€.
2. νμ₯μ± μ ν
- λ‘λλ°Έλ°μλ₯Ό ν΅ν λ€μ€ μλ²λ₯Ό κ°μ§κ³ μμ λ μλ²λ€ κ°μ μΈμ
μ΄ κ³΅μ λμ§ λͺ»νμ¬ μΈμ
λΆμΌμΉ λ¬Έμ κ° λ°μνλ€.
- μΈμ
λΆμΌμΉ λ¬Έμ ν΄κ²°λ°©μ [https://hudi.blog/session-consistency-issue/]
μ¬μ©μ μ΄λμ± μ ν
- κΈ°κΈ°λ₯Ό λ³κ²½νκ±°λ λΈλΌμ°μ λ₯Ό λ°κΎΈλ©΄ μ΄μ μ λ‘κ·ΈμΈν μΈμ
μ 보λ₯Ό μ΄μ©ν μ μκ² λλ€.
jwtλ₯Ό μ¬μ©νλ©΄ μν¬λ¦Ών€λ§ κ°μ§κ³ μμΌλ©΄ λλ―λ‘ μλ²κ° μ¬λ¬λ μ‘΄μ¬ν΄λ λ¬Έμ κ° μλ€.
π JWT Token μ¬μ© μ μ£Όμν΄μΌν μ
- ν ν° ν¬κΈ°
- JWTλ μΈμ κ³Ό λΉκ΅ν λ μλμ μΌλ‘ ν¬κΈ°κ° 컀 λ€νΈμν¬ λμνμ λΆλ΄μ μ€ μ μλ€.
- μλ² μΈ‘μμμ μΈμ
κ΄λ¦¬ λΆκ°
- μΌλ°μ μΌλ‘ JWTλ μνλ₯Ό μ μ§νμ§ μλ(stateless) νΉμ±μ κ°μ§κΈ° λλ¬Έμ μ΄λ μλ² μΈ‘μμ κ°λ³ JWTλ₯Ό 무ν¨ννκ±°λ λ§λ£μν€λ κ²μ΄ μ΄λ ΅λ€.
- ν ν°μ΄ νμ·¨λΉνκ±°λ μ€μλ‘ λ ΈμΆλλ©΄, κ·Έ ν ν°μ μ ν¨κΈ°κ°μ΄ λ§λ£λ λκΉμ§ μ ν¨νκ² λλ€.
- 보μ λ¬Έμ
- ν ν°μ΄ νμ·¨λλ©΄, 곡격μλ κ·Έ ν ν°μ μ¬μ©ν΄ μμ€ν μ μ κ·Όν μ μλ€.
- JWTλ μ 보λ₯Ό μ¨κΈ°μ§ μλλ€
- JWTμ νμ΄λ‘λλ Base64λ‘ μΈμ½λ©λμ΄ μμ΄ μ½κ² λμ½λ©λ μ μκΈ° λλ¬Έμ μ€μν κ°μΈμ 보λ λ―Όκ°ν λ°μ΄ν°λ JWTμ ν¬ν¨ν΄μλ μ λλ€.
π JWT Token VS μΈμ
JWTλ₯Ό μ¬μ©νλ κ²½μ°
- λΆμ° μμ€ν
- μ¬λ¬ μλΉμ€κ° μ¬μ©μμ μΈμ¦ μνλ₯Ό 곡μ ν΄μΌ νλ λΆμ° μμ€ν μ κ²½μ° JWTκ° μ μ©νλ€.
- JWTλ μ¬μ©μ μ 보λ₯Ό λ΄μ₯νλ―λ‘ μλΉμ€ κ°μ μ½κ² μ λ¬ν μ μλ€.
- μ€μΌμΌλ§κ³Ό μ±λ₯
- μΈμ μ μΌλ°μ μΌλ‘ λ©λͺ¨λ¦¬μ μ μ₯λλ―λ‘, μ¬μ©μ μκ° μ¦κ°νλ©΄ μλ² λΆνλ₯Ό λ릴 μ μλ€.
- λ°λ©΄μ, JWTλ ν΄λΌμ΄μΈνΈ μΈ‘μμ 보κ΄λλ―λ‘ μ΄ λ¬Έμ λ₯Ό μννλλ° λμμ΄ λλ€.
- λͺ¨λ°μΌ μ ν리μΌμ΄μ
- μΌλΆ λͺ¨λ°μΌ νλ«νΌμμλ μΏ ν€λ₯Ό μ§μνμ§ μκ±°λ μ νμ μΌλ‘ μ§μνκΈ° λλ¬Έμ JWTκ° λ μ ν©ν μ μλ€.
μΈμ μ μ¬μ©νλ κ²½μ°
- μμ κ·λͺ¨μ μ ν리μΌμ΄μ : μ¬μ©μ μκ° λ§μ§ μμ κ²½μ°, μΈμ κΈ°λ° μΈμ¦μ΄ λ κ°λ¨νκ³ μ§κ΄μ μΌ μ μλ€. μΈμ μ μ¬μ©μλ§λ€ μλ²μ μ μΌν IDλ₯Ό μ μ₯νλ©°, μ΄ IDλ₯Ό μ¬μ©ν΄ μ¬μ©μ μ 보μ μ κ·Όνλ€.
- μΈλ°ν μ κ·Ό μ μ΄: μΈμ μ μ¬μ©νλ©΄ μλ² μΈ‘μμ μ¬μ©μμ μΈμ¦ μνλ₯Ό λ μ μ μ΄ν μ μλ€. μλ₯Ό λ€μ΄, λ‘κ·Έμμ μμ μ μ¬μ©μ μΈμ μ 무ν¨νν μ μμΌλ©°, μ΄λ JWTμμλ λΆκ°λ₯νλ€.
- 보μ: JWTλ 보μμμ μ΄μλ₯Ό κ°μ§ μ μμ΅λλ€. νΉν, JWTλ ν ν°μ΄ νμ·¨λλ©΄ κ·Έ ν ν°μ μ ν¨κΈ°κ°μ΄ λ§λ£λ λκΉμ§ μ¬μ©ν μ μλ€λ λ¬Έμ κ° μμ΄ μΈμ μ μ΄μ©νλ κ²μ΄ λ μμ ν μ μλ€.
TODO. Spring Security JWT Token μ μ©νκΈ°
π§π« reference
'Spring > Spring Security' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring Security] ajax login (0) | 2023.02.15 |
---|---|
[Spring Security] GET λ‘κ·Έμμ μ²λ¦¬ (0) | 2022.11.03 |
[Spring Security] μ€νλ§ μν리ν°λ₯Ό μ΄μ©νμ¬ λ‘κ·ΈμΈ, νμκ°μ ꡬννκΈ° (0) | 2022.10.30 |
[Spring Secururity ERROR] μ€νλ§ λΉ μν μ°Έμ‘° μλ¬ The dependencies of some of the beans i (1) | 2022.10.30 |
[Spring Security] Spring Security μ€μ νκΈ° (0) | 2022.10.29 |