์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ฑ
- ๊ฐ๋ฐ
- ComputerScience
- ์ํ
- ๊นํ๋จ
- JavaScript
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ์๋ฐ
- ์ฝ๋ฉ
- ๋ผํ๋ผ์ค์๋ง๋
- Python
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ์ปดํจํฐ๊ณผํ
- ํ๋ก๊ทธ๋๋ฐ
- Java
- ํ์ด์ฌ
- css
- ์ค๋ผํด
- K๋ฐฐํฐ๋ฆฌ
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ๋ฐ์ํ
- ์ฅํธ์์ค
- html
- ๋ ์
- ๊น๋ฏธ๊ฒฝ
- database
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์นํผ๋ธ๋ฆฌ์ฑ
- Today
- Total
JiYoung Dev ๐ฅ
Spring Security ์ ์ฉ๊ธฐ (3) JWT(JSON Web Tokens) ๊ฐ๋ ๋ณธ๋ฌธ
์ด์ ์๊ฐ์๋ Spring Security๋ ๋ฌด์์ด๋ฉฐ, ์ด๋ป๊ฒ ์ ์ฉ ๊ฐ๋ฅํ์ง์ ๋ํด ์์๋ณด์๋ค.
- 2024.04.22 - [Study/Java] - Spring Security ์ ์ฉ๊ธฐ (1) Spring Security๋?
- 2024.04.25 - [Study/Java] - Spring Security ์ ์ฉ๊ธฐ (2) Spring Security Configuration
ํ์๋ ๋ณธ ํ๋ก์ ํธ์์ jwt๋ฅผ ํ์ฉํ ์ธ์ฆ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ ํ๋ค.
jwt ์ค์ ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ jwt๋ ๋ฌด์์ธ์ง ๋จผ์ ์ดํด๋ณด๊ณ ์ ํ๋ค.
JWT(JSON Web Token)์ด๋?
JWT(JSON Web Token)์ ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ JSON ํ ํฐ์ ์๋ฏธํ๋ค.
JWT๋ HMAC ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋น๋ฐํค๋ก ์๋ช ํ๊ฑฐ๋ RSA ๋๋ ECDSA๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฐ/๊ฐ์ธํค ์์ ์ฌ์ฉํด ์๋ช ํ ์ ์๋ค.
HMAC ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ๋ด์ฉ์ ์ด์ ์ OTP ๊ด๋ จ ํฌ์คํ ์์ ํ์ธํ ์ ์๋ค.
https://danyoujeong.tistory.com/223
OTP์ ๋์ ์๋ฆฌ, HOTP์ TOTP ์ดํดํ๊ธฐ
์๋ ํ์ธ์. ์ค๋์ ๊ธ์ต ๊ฑฐ๋์์ ์์ฃผ ์ฐ์ด๋ ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ์๋ ๋ก๊ทธ์ธ 2์ฐจ ์ธ์ฆ์ผ๋ก๋ ์์ฃผ ์ฐ์ด๋ OTP์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. OTP๋ ๋ฌด์์ธ์ง ์์๋ณด๊ณ , OTP์ ์ข ๋ฅ์ธ HOTP์ TOTP๊ฐ ์ด๋ ํ ์
danyoujeong.tistory.com
JWT์ ํ์ฉ
JWT๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ๋ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
1. ์ธ์ฆ(Authorization)
2. ์ ๋ณด๊ตํ(Information Exchange)
1๋ฒ์ ์ธ์ฆ(Authorization)์ JWT๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ํฉ์ด๋ค.
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ํ ๊ฐ ํ์ ์์ฒญ, ์๋ฅผ ๋ค๋ฉด ์ฃผ๋ฌธ/๊ฒฐ์ ๋ฑ์ ์์ฒญ ํค๋์ JWT๊ฐ ํฌํจ๋์ด ํด๋น ํ ํฐ์ผ๋ก ํ์ฉ๋ ๊ฒฝ๋ก, ์๋น์ค์ ์์ธ์ค ํ ์ ์๋ค.
2๋ฒ์ ์ ๋ณด๊ตํ์ ๊ด๊ณ์ ๊ฐ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ์กํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
JWT๋ ์์ ์ ์์์ ์ธ๊ธํ๋ฏ์ด ๊ณต๊ฐ/๊ฐ์ธํค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ ์ ์๋ค.
JWT ๊ตฌ์กฐ
JWT ๋ ( . )์ ๊ธฐ์ค์ผ๋ก 3 ๋ถ๋ถ์ผ๋ก ๋๋์ด์ง๋ค.
1. Header
2. Payload
3. Signature
xxxxx.yyyyy.zzzzz
Header
Header์๋ 2๊ฐ์ง ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋๋ค.
์ฒซ๋ฒ์งธ๋ JWT์ ๊ฐ์ token์ ํ์ ์ ๋ช ์ํ๊ณ , ๋๋ฒ์งธ๋ HMAC, SHA256, RSA์ ๊ฐ์ ์๋ช ์๊ณ ๋ฆฌ์ฆ์ ๋ช ์ํ๋ค.
{
"alg" : "HS256",
"typ" : "JWT"
}
๊ทธ๋ฆฌ๊ณ ์ด JSON์ Base64Url ์ธ์ฝ๋ฉ๋์ด JWT์ ์ฒซ๋ฒ์งธ ๋ถ๋ถ์ ํ์ฑํ๋ค.
Base64Url ์ธ์ฝ๋ฉ
URL์์ ์์ ํ ๋ฌธ์ ์งํฉ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ธ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ
์ผ๋ฐ์ ์ธ Base64 ์ธ์ฝ๋ฉ์์๋ '+', '/'์ ๊ฐ์ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง๋ง ์ด๋ URL์์ ์์ ํ์ง ์์ ์ ์๋ค.
๋ฐ๋ผ์ '+'๋ '-'๋ก, '/'๋ '_'๋ก ๋์ฒดํ๊ณ , '='์ ์๋ตํ์ฌ URL์์ ์์ ํ ๋ฌธ์์ด๋ก ์ธ์ฝ๋ฉํ๋ ๋ฐฉ์์ด๋ค.
Payload
Payload๋ ํด๋ ์์ ํฌํจํ๋ ๋ถ๋ถ์ด๋ค. ํด๋ ์(Claim)์ ์ด๋ฆ, ๋ฑ๊ธ๊ณผ ๊ฐ์ ๊ฐ์ฒด(์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์)์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค.
ํด๋ ์์ 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค.
1. ๋ฑ๋ก๋ ํด๋ ์ : ์๋ฌด์ ์ด์ง๋ ์์ง๋ง ์ ์ฉํ๊ณ ์ํธ ์ด์ฉ ๊ฐ๋ฅํ ํด๋ ์ ์งํฉ. ๋ฐํ์(iss), ๋ง๋ฃ ์๊ฐ(exp), ์ฃผ์ฒด(sub) ๋ฑ์ ์๋ฏธํ๋ค. ํด๋ ์ ์ด๋ฆ์ JWT๊ฐ ๊ฐ๊ฒฐํ๊ฒ ๋๋๋ก ์ธ ๊ธ์๋ก๋ง ๋์ด ์๋ค.
2. ๊ณต๊ฐ ํด๋ ์ : JWT๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ด ์์ ๋กญ๊ฒ ์ ์ํ ์ ์๋ ํด๋ ์์ด๋ค.
3. ๋น๊ณต๊ฐ ํด๋ ์ : ์ฌ์ฉ์๋ค์ด ์ฌ์ฉ์ ๋์ํ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ฌ์ฉ์ ์ ์ ํด๋ ์์ด๋ค.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
ํ์ด๋ก๋๋ Base64Url ์ธ์ฝ๋ฉ๋์ด JSON Web Token์ ๋๋ฒ์งธ ๋ถ๋ถ์ ํ์ฑํ๋ค.
์๋ช ๋ ํ ํฐ์ ๊ฒฝ์ฐ ํ์ด๋ก๋์ ์ ๋ณด๋ ๋ณ์กฐ๋ฅผ ๋ฐฉ์งํ๋๋ก ๋ณดํธ๋์ง๋ง ๋๊ตฌ๋ ์ฝ์ ์ ์๋ค.
๋ฐ๋ผ์ ํ์ด๋ก๋๋ ํค๋ ์์์ ๋น๋ฐ ์ ๋ณด ํน์ ์ํธํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์๋ ์๋๋ค.
Signature
์๋ช ๋ถ๋ถ์ ์์ฑํ๊ธฐ ์ํด์๋ ์ธ์ฝ๋ฉ๋ ํค๋, ์ธ์ฝ๋ฉ๋ ํ์ด๋ก๋, ํค๋์์ ์ง์ ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ธ์์ผ ํ๋ค. ๊ทธ ํ ์ด๋ฅผ ์๋ช ํ๋ค.
์๋ฅผ ๋ค์ด HMAC SHA256 ์๋ก๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ์๋ช ์ด ์์ฑ๋๋ค.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
์๋ช (Signature)๋ ํด๋น ๋ฉ์์ง๊ฐ ์ค๊ฐ์ ๋ณ๊ฒฝ๋์ง ์์์(๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ)์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ๋น๊ณต๊ฐํค๋ก ์๋ช ๋ ํ ํฐ์ ๊ฒฝ์ฐ JWT์ ๋ฐ์ ์๊ฐ ์์ ์ด ๋งํ๋๋ก์์ ๊ฒ์ฆํ ์๋ ์๋ค.
์๋์ ์ฌ์ง์ JWT ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋ค.
์ฒซ๋ฒ์งธ์ค์ ํค๋๋ฅผ Base64Url ์ธ์ฝ๋ฉํ ๋ถ๋ถ์ด๋ฉฐ,
๋๋ฒ์งธ, ์ธ๋ฒ์งธ ์ค์ ํ์ด๋ก๋๋ฅผ ์ธ์ฝ๋ฉํ ๋ถ๋ถ,
๋ง์ง๋ง์ค์ ์๋ HMACSHA256๊ณผ ๊ฐ์ด ์๋ช ๋ ๋ถ๋ถ์ด๋ค.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
JWT ์๋ ๋ฐฉ์
์ธ์ฆ ๊ณผ์ ์์ ์ฌ์ฉ์๊ฐ ์๊ฒฉ์ฆ๋ช ์ผ๋ก ์ฌ์ฉํ์ฌ ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ์ธํ๋ฉด JSON Web Token์ด ๋ฐํ๋๋ค.
์ฌ์ฉ์๊ฐ ๋ณดํธ๋ ๊ฒฝ๋ก ํน์ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค๋ ๊ฒฝ์ฐ Bearer ์คํค๋ง๋ฅผ ์ฌ์ฉํ์ฌ Authorization ํค๋์ JWT๋ฅผ ๋ณด๋ด์ผ ํ๋ค. ํค๋์ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
Authorization: Bearer <token>
์๋ฒ๋ Authorization ํค๋์ ์ ํจํ JWT๋ฅผ ํ์ธํ๊ณ , ์ ํจํ JWT๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ณดํธ๋ ๋ฆฌ์์ค์ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
HTTP ํค๋๋ฅผ ํตํด JWT์ ์ ์กํ ๋ ์ฃผ์ํ ์ ์ ๋๋ฌด ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ฉด ์๋๋ค๋ ๊ฒ์ด๋ค. ์ผ๋ถ ์๋ฒ์์๋ ํค๋์ 8KB ์ด์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ์๋ฝํ์ง ์๋๋ค. ์ด์ ๊ฐ์ด JWT์ ๋๋ฌด ๋ง์ ์ ๋ณด๋ฅผ ํฌํจํ๋ฉด ์๋๋ค. ๋ํ, JWT๋ Authorization ํค๋์ ์ ์ก๋๋ ๊ฒฝ์ฐ ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก CORS ๋ฌธ์ ๊ฐ ์ผ์ด๋์ง ์๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ Authorization ์๋ฒ์ ์ธ๊ฐ๋ฅผ ์์ฒญํ๋ค.
- ๊ถํ์ด ๋ถ์ฌ๋ Authorization ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ธ์ค ํ ํฐ์ ๋ฐํํ๋ค.
- ํด๋ผ์ด์ธํธ๋ Authorization ์๋ฒ๋ก ๋ถํฐ ๋ฐ์ ์์ธ์ค ํ ํฐ์ ์ฌ์ฉํ์ฌ ๋ณดํธ๋ ๋ฆฌ์์ค(API ๋ฑ)์ ์ ๊ทผํ ์ ์๋ค.
JWT์ ์ฅ๋จ์
์ฅ์
1. Header์ Payload์ ๋ฐ์ดํฐ๋ฅผ Secret ํน์ ๋น๋ฐํค/๊ณต๊ฐํค๋ก ์๋ช ํ๋ฏ๋ก ๋ฐ์ดํฐ ์๋ณ์กฐ๋ฅผ ๋ง์ ์ ์๋ค.
2. ์ธ์ฆ ์ ๋ณด์ ๋ํ ๋ณ๋์ ์ ์ฅ์๊ฐ ํ์์๋ค.
3. JWT๋ ํ ํฐ์ ๋ํ ๊ธฐ๋ณธ ์ ๋ณด์ ์ ๋ฌํ ์ ๋ณด ๋ฐ ํ ํฐ์ด ๊ฒ์ฆ๋์์์ ์ฆ๋ช ํ๋ ์๋ช ๋ฑ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์์ฒด์ ์ผ๋ก ์ง๋๊ณ ์๋ค.
4. ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ธ์ ๊ณผ ๋ค๋ฅด๊ฒ ์๋ฒ๋ ๋ฌด์ํ(Stateless)๊ฐ ๋์ด ์๋ฒ ํ์ฅ์ฑ์ด ์ฐ์ํด์ง ์ ์๋ค.
5. ํ ํฐ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ๋ก๊ทธ์ธ ์์คํ ์ ์ ๊ทผ ๋ฐ ๊ถํ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
6. OAuth์ ๊ฒฝ์ฐ Facebook, Google ๋ฑ ์์ ๊ณ์ ์ ์ด์ฉํ์ฌ ๋ค๋ฅธ ์น์๋น์ค์์๋ ๋ก๊ทธ์ธ์ ํ ์ ์๋ค.
7. ๋ชจ๋ฐ์ผ ์ดํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์์๋ ์ ๋์ํ๋ค. (๋ชจ๋ฐ์ผ์ ์ธ์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ)
๋จ์
1. Self-contained : ํ ํฐ ์์ฒด์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฏ๋ก ์๋ ์ ๊ฒ์ด ๋ ์ ์๋ค.
2. ํ ํฐ ๊ธธ์ด : ํ ํฐ์ Payload์ 3์ข ๋ฅ์ ํด๋ ์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ ๋ณด๊ฐ ๋ง์์ง์๋ก ํ ํฐ์ ๊ธธ์ด๊ฐ ๋์ด๋ ๋คํธ์ํฌ์ ๋ถํ๋ฅผ ์ค ์ ์๋ค.
3. Payload ์ธ์ฝ๋ฉ : payload ์์ฒด๋ ์ํธํ ๋ ๊ฒ์ด ์๋๋ผ Base64๋ก ์ธ์ฝ๋ฉ๋์ด๋ฏ๋ก ์ค๊ฐ์ Payload๋ฅผ ํ์ทจํ์ฌ ๋์ฝ๋ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์์ผ๋ฏ๋ก payload์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉด ์๋๋ค.
4. Store Token : stateless ํน์ง์ ๊ฐ์ง๋ฏ๋ก ํ ํฐ์ ํด๋ผ์ด์ธํธ ์ธก์์ ๊ด๋ฆฌํ๊ณ ์ ์ฅํ๋ค. ๋๋ฌธ์ ํ ํฐ ์์ฒด๋ฅผ ํ์ทจ ๋นํ๋ฉด ๋์ฒํ๊ธฐ ์ด๋ ต๋ค.
Refresh Token์ ํ์์ฑ
JWT๋ฅผ ์ด์ฉํด ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด OAuth ๊ธฐ๋ฐ์ ์ธ์ฆ ์ฒด๊ณ(์นด์นด์ค, ๊ตฌ๊ธ ๋ฑ)์์ Refresh Token์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. Refresh Token์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋ญ๊น? ์ด๋ JWT์ ๋จ์ ์์ ์ดํด๋ณด์๋ Store Token ํน์ง๊ณผ ๊ด๊ณ๊ฐ ์๋ค.
์์ธ์ค ํ ํฐ์ ์ค๋ซ๋์ ์ฌ์ฉํ๋ฉด ํด์ปค๊ฐ ์ด๋ฅผ ๋์ฉํ์ฌ ์ ์ฉํ ์ ์๋ค. ๋ฐ๋ผ์ ์์ธ์ค ํ ํฐ์ ์ฅ์๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ ๋ค๊ณ ์์ธ์ค ํ ํฐ์ ๋๋ฌด ์์ฃผ ๋ฐํํ๊ฒ ๋๋ฉด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ ์์ฃผํด์ผ ํ๋ฏ๋ก ๋ถํธํ๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ผ๋ก ๋ํ๋ ๊ฒ์ด 'Refresh Token'์ด๋ค.
๋ฆฌํ๋ ์ ํ ํฐ์ ์์ธ์ค ํ ํฐ๊ณผ ๋๊ฐ์ ํํ์ JWT์ด๋ค. ์ด ๋ฆฌํ๋ ์ ํ ํฐ์ ์์ธ์ค ํ ํฐ์ ์ป๋๋ฐ ์ฌ์ฉ๋๋ค.
์์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋๋ฉด ๋ฆฌํ๋ ์ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ธ์ฆ ์ปจํธ๋กค๋ฌ๋ถํฐ ์๋ก์ด ์์ธ์ค ํ ํฐ์ ์ป์ ์ ์๋ค. ๋ฆฌํ๋ ์ ํ ํฐ์ ์ผ๋ฐ์ ์ผ๋ก ์์ธ์ค ํ ํฐ๋ณด๋ค ์๋ช ์ด ํจ์ฌ ๊ธธ๋ค. ๋ฐ๋ฉด, ์์ธ์ค ํ ํฐ์ ์๋ช ์ด ์งง๋ค.
1. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด ์ธ์ฆ ์๋ฒ์์ ์์ธ์ค ํ ํฐ๊ณผ ๋ฆฌํ๋ ์ ํ ํฐ์ ๋ฐ๊ธํ๋ค. ์ผ๋ฐ์ ์ผ๋ก DB์ ๋ฆฌํ๋ ์ ํ ํฐ์ ์ ์ฅํด๋๋ค.
2. ์ฌ์ฉ์๋ ๋ฆฌํ๋ ์ ํ ํฐ์ ์์ ํ ์ ์ฅ์์ ์ ์ฅํ ํ, ์ก์ธ์ค ํ ํฐ์ ํค๋์ ์ค์ด ์์ฒญ์ ๋ณด๋ธ๋ค.
3. ์๋ฒํผ ์์ธ์ค ํ ํฐ์ ๊ฒ์ฆํ์ฌ ์ ๊ทผ์ ํ์ฉํ๋ค.
4. ์๊ฐ์ด ์ง๋ ์์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋๋ค.
5. ์ฌ์ฉ์๋ ์ด์ ๊ณผ ๋์ผํ๊ฒ ์์ธ์ค ํ ํฐ์ ํค๋์ ์ค์ด ์์ฒญ์ ๋ณด๋ธ๋ค.
6. ์๋ฒ๋ ์์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋์์์ ํ์ธํ๊ณ ๊ถํ ์์ ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
7. ์ฌ์ฉ์๋ ๋ฆฌํ๋ ์ ํ ํฐ๊ณผ ์์ธ์ค ํ ํฐ์ ํจ๊ป ์๋ฒ๋ก ๋ณด๋ธ๋ค.
8. ์๋ฒ๋ ์์ธ์ค ํ ํฐ์ด ์กฐ์๋์ง ์์๋์ง ํ์ธ ํ ๋ฆฌํ๋ ์ ํ ํฐ๊ณผ ์ฌ์ฉ์์ DB์ ์ ์ฅ๋์ด ์๋ ๋ฆฌํ๋ ์ ํ ํฐ์ ๋น๊ตํ๋ค. ํ ํฐ์ด ๋์ผํ๊ณ ์ ํจ๊ธฐ๊ฐ๋ ์ง๋์ง ์์๋ค๋ฉด ์๋ก์ ์์ธ์ค ํ ํฐ์ ๋ฐ๊ธํ๋ค.
9. ์ฌ์ฉ์๋ ์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ํค๋์ ์ค์ด ๋ค์ API ์์ฒญ์ ์งํํ๋ค.
ํ ํฐ ๋ง๋ฃ ์ ํ 4๊ฐ์ง์ ๊ทธ์ ๋ฐ๋ฅธ ์ฌ๋ฐ๊ธ ๋ฐฉ๋ฒ
1. access token๊ณผ refresh token ๋ชจ๋ ๋ง๋ฃ๋ ๊ฒฝ์ฐ
- ์๋ฌ ๋ฐ์, ์ฌ๋ก๊ทธ์ธํ์ฌ ๋ ๋ค ์๋ก ๋ฐ๊ธ
2. access token์ ๋ง๋ฃ๋์ง๋ง, refresh token์ ์ ํจํ ๊ฒฝ์ฐ
- refresh token์ ๊ฒ์ฆํ์ฌ access token ์ฌ๋ฐ๊ธ
- DB์ ์ ์ฅ๋ refresh token ์ ๋ณด์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ refresh token ๋น๊ต
3. access token์ ์ ํจํ์ง๋ง, refresh token์ ๋ง๋ฃ๋ ๊ฒฝ์ฐ
- access token ๊ฒ์ฆํ์ฌ refresh token ์ฌ๋ฐ๊ธ
- access token์ด ์ ํจํ๋ค๋ ๊ฒ์ ์ด๋ฏธ ์ธ์ฆ๋ ๊ฒ์ด๋ฏ๋ก ๋ฐ๋ก refresh token ์ฌ๋ฐ๊ธ
4. access token๊ณผ refresh token ๋ชจ๋ ์ ํจํ ๊ฒฝ์ฐ
- ์ ์ ์ฒ๋ฆฌ
์ฐธ๊ณ ์๋ฃ
JWT.IO
JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.
jwt.io
๐ JWT ํ ํฐ ์ธ์ฆ ์ด๋? (์ฟ ํค vs ์ธ์ vs ํ ํฐ)
Cookie / Session / Token ์ธ์ฆ ๋ฐฉ์ ์ข ๋ฅ ๋ณดํต ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ํ์ธํ๋ ๋ฐฉ์์ ๋ํ์ ์ผ๋ก ์ฟ ํค, ์ธ์ , ํ ํฐ 3๊ฐ์ง ๋ฐฉ์์ด ์๋ค. JWT๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ ์ฐ์ ์ฟ ํค์ ์ธ์ ์ ํต์ ๋ฐฉ์์ ๋ณต์ตํด
inpa.tistory.com
https://medium.com/@chauhanshubham19765/jwt-refresh-token-61823e888bc7
JWT Refresh Token
This article will go through an example of how to implement JWT (JSON Web Token) authentication with refresh tokens in an ASP.NET Core 5.0…
medium.com
'Study > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Security ์ ์ฉ๊ธฐ (6) Spring Security Authorization(HttpServletRequests) (0) | 2024.05.05 |
---|---|
Spring Security ์ ์ฉ๊ธฐ (5) Spring Security Authentication ๋์์๋ฆฌ (0) | 2024.05.05 |
Spring Security ์ ์ฉ๊ธฐ (2) Spring Security Configuration (0) | 2024.04.25 |
Spring Security ์ ์ฉ๊ธฐ (1) Spring Security๋? (0) | 2024.04.22 |
๊ธฐ์ ๋ฉด์ ์ค๋น 5. Java ์ง๋ฌธ ์ ๋ฆฌ (1) | 2023.11.18 |