๐ก Access Token์ ์ด์ฉํ ์ธ์ฆ
JWT
- JSON Web Token์ ์ฝ์
- ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ ํ ํฐ์ ๋งํ๋ฉฐ Access Token์ผ๋ก ์ฌ์ฉ๋จ
- JWT๋ฅผ ์์ฑํ๊ธฐ ์ํด์ Header, Payload, Verify Signature ๊ฐ์ฒด๋ฅผ ํ์๋ก ํจ
Header
- ํ ํฐ์ ํ์ ์ ๋ํ๋ด๋ typ์ ์ํธํํ ๋ฐฉ์์ ์ ํ๋ alg๋ก ๊ตฌ์ฑ๋จ
{
'alg': 'HS256',
'typ': 'JWT'
}
Paylod
- ํ ํฐ์ ๋ด์ ์ ๋ณด๋ฅผ ํฌํจ
- ํ๋์ ์ ๋ณด ์กฐ๊ฐ์ ํด๋ ์์ด๋ผ ๋ถ๋ฆ
- ํด๋ ์์ ์ข ๋ฅ → Registered, Public, Private 3๊ฐ์ง ์กด์ฌ
- ๋ณดํต ๋ง๋ฃ ์ผ์, ๋ฐ๊ธ ์ผ์, ๋ฐ๊ธ์, ๊ถํ ์ ๋ณด ๋ฑ์ ํฌํจ
{
'sub': '1234567890',
'name': 'John Doe',
'admin': true,
'iat': 1516239022
}
Verify Signature
- Paylod๊ฐ ์๋ณ์กฐ๋์ง ์์๋ค๋ ์ฌ์ค์ ์ฆ๋ช ํ๋ ๋ฌธ์์ด
- Base64 ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉํ Header, Payload ๊ทธ๋ฆฌ๊ณ Secret Key๋ฅผ ๋ํ ํ ์๋ช ๋จ
HMACSHA256 {
base64UrlEncode(header) + '.' +
base64UrlEncode(payload),
your-256-bit-secret
}
์์ฑ๋ ํ ํฐ
- Header, Payload๋ ์ธ์ฝ๋ฉ๋ ๋ฟ, ๋ฐ๋ก ์ํธํ๋์ง ์์→ ํ์ง๋ง Verify Signature๋ Sercret Key๋ฅผ ์์ง ๋ชปํ๋ฉด ๋ณตํธํํ ์ ์์
- → ๋ฐ๋ผ์ Header, Payload๋ ๋๊ตฌ๋ ๋์ฝ๋ฉํ์ฌ ํ์ธํ ์ ์๊ธฐ์ ์ ๋ณด๊ฐ ์ฝ๊ฒ ๋ ธ์ถ๋ ์ ์์
- ๋ง์ฝ ํค์ปค๊ฐ ์ฌ์ฉ์์ ํ ํฐ์ ํ์ณ Payload์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ฌ ํ ํฐ์ ์๋ฒ๋ก ๋ณด๋ธ๋ค๋ฉด, ์๋ฒ์์ Verify Signature๋ฅผ ๊ฒ์ฌํ๊ฒ ๋จ→ ์ด๋ฅผ ํตํด ์ฌ์ฉ์์ Sercret Key๋ฅผ ์์ง ๋ชปํ๋ฉด ํ ํฐ์ ์กฐ์ํ ์ ์์
- → ์ฌ๊ธฐ์ Verify Signature๋ ํด์ปค์ ์ ๋ณด๊ฐ ์๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํธํ๋์๊ธฐ ๋๋ฌธ์ ํด์ปค๊ฐ ๋ณ๊ฒฝํ ์ ๋ณด๋ก ๋ณด๋ธ ํ ํฐ์ ์ ํจํ์ง ์์ ํ ํฌ์ผ๋ก ๊ฐ์ฃผํจ
์ธ์ฆ ์์
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํจ
- ์๋ฒ์์๋ ๊ณ์ ์ ๋ณด๋ฅผ ์ฝ์ด ์ฌ์ฉ์ ํ์ธ ํ, ์ฌ์ฉ์์ ๊ณ ์ ํ ID๊ฐ์ ๋ถ์ฌํ๊ณ Payload์ ์ ๋ณด๋ฅผ ๋ฃ์
- JWT ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ ์ค์
- Sercret Key๋ฅผ ํตํด ์ํธํ๋ Access Token์ HTTP ์๋ต ํค๋์ ์ค์ด ๋ณด๋
- ์ฌ์ฉ์๋ Access Token์ ๋ฐ์ ์ ์ฅ ํ, ์ธ์ฆ์ด ํ์ํ ์์ฒญ๋ง๋ค ํ ํฐ์ HTTP ์์ฒญ ํค๋์ ์ค์ด ๋ณด๋
- ์๋ฒ์์๋ ํด๋น ํ ํฐ์ Verify Signature๋ฅผ Sercret Key๋ก ๋ณตํธํํ ํ, ์กฐ์ ์ฌ๋ถ, ์ ํจ ๊ธฐ๊ฐ์ ํ์ธ
- ๊ฒ์ฆ์ด ์๋ฃ๋๋ค๋ฉด, Payload๋ฅผ ๋์ฝ๋ฉํ์ฌ ์ฌ์ฉ์์ ID์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
์ฅ์
- ๊ฐํธํจ
- ์ธ์ ๊ณผ ์ฟ ํค๋ฅผ ์ด์ฉํ ์ธ์ฆ์ ๋ณ๋์ ์ธ์ ์ ์ฅ์์ ๊ด๋ฆฌ๊ฐ ํ์ํจ. ๊ทธ๋ฌ๋ JWT๋ ๋ฐ๊ธ ํ ๊ฒ์ฆ๋ง ๊ฑฐ์น๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ์ ์ฅ์๊ฐ ํ์์์
- ํ์ฅ์ฑ์ด ๋ฐ์ด๋จ. ํ ํฐ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ค๋ฅธ ์ธ์ฆ ์์คํ ์ ์ ๊ทผ์ด ๊ฐ๋ฅํจ
๋จ์
- JWT๋ ํ ๋ฒ ๋ฐ๊ธ๋๋ฉด ์ ํจ๊ธฐ๊ฐ์ด ์๋ฃ๋ ๋๊น์ง๋ ๊ณ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ ์ค๊ฐ์ ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅ⇒ ํด๊ฒฐ์ฑ : Refresh Token์ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ๊ธํ์ฌ ํด๊ฒฐํ๋ ๋ฐฉ์
- → ๋ฐ๋ผ์ ํด์ปค์ ์ํด ์ ๋ณด๊ฐ ํธ๋ฆฐ๋ค๋ฉด ๋์ฒ ๋ฐฉ๋ฒ ์์
- Payload ์ ๋ณด๊ฐ ๋์ฝ๋ฉํ๋ฉด ๋๊ตฌ๋ ์ ๊ทผํ ์ ์๊ธฐ์ ์ค์ํ ์ ๋ณด๋ค์ ๋ณด๊ดํ ์ ์์
- JWT์ ๊ธธ์ด๊ฐ ๊ธธ๊ธฐ ๋๋ฌธ์ ์ธ์ฆ ์์ฒญ์ด ๋ง์์ง๋ฉด ์๋ฒ์ ์์๋ญ๋น๊ฐ ๋ฐ์
'Web & Android > Spring Security' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Security] ์นด์นด์ค ๋ก๊ทธ์ธ ์ค์ต - Web (0) | 2023.10.19 |
---|---|
[Spring Security] Access Token+ Refresh Token์ ์ด์ฉํ ์ธ์ฆ (1) | 2023.10.19 |
[Spring Security] ์ธ์ ๊ณผ ์ฟ ํค๋ฅผ ์ด์ฉํ ์ธ์ฆ (0) | 2023.10.17 |
[Spring Security] Form Login ๊ฐ๋ & ์ฌ์ฉ๋ฒ (0) | 2023.10.17 |
[Spring Security] Security์ ํ๋ฆ (1) | 2023.10.17 |