์น ์๋น์ค๋ฅผ ๋ง๋ค๋ค ๋ณด๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ถ๋ชํ๋ ๊ฒ์ด โ์ฌ์ฉ์ ์ธ์ฆโ ๋ฌธ์ ์
๋๋ค.
์ธ์
/์ฟ ํค ๋ฐฉ์๋ถํฐ OAuth, ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ๊น์ง ๋ค์ํ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋๋ฐ, ๊ทธ์ค ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๊ฒ์ด JWT(Json Web Token) ์
๋๋ค.
์ด๋ฒ ๊ธ์์๋ JWT๊ฐ ๋ฌด์์ด๊ณ , ์ ํ์ํ์ง, ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
JWT(Json Web Token) ๋ ์น ํ์ค(RFC 7519)์ผ๋ก ์ ์๋ ์ธ์ฆ ๋ฐ ์ ๋ณด ๊ตํ์ ์ํ ํ ํฐ ํ์์ ๋๋ค.
JSON ํฌ๋งท์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด์ต๋๋ค.
์ ์์๋ช (Signature) ์ ํฌํจํด ์ยท๋ณ์กฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
์๋ฒ๊ฐ ์ธ์ ์ ์ง์ ์ ์ฅํ์ง ์์๋ ๋๋ฏ๋ก Stateless ์ธ์ฆ ๋ฐฉ์์ ํ์ฉ๋ฉ๋๋ค.
์ฆ, ํด๋ผ์ด์ธํธ๊ฐ JWT๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด ์๋ฒ๋ ์ถ๊ฐ DB ์กฐํ๋ ์ธ์ ์ ์ฅ์ ์์ด๋ ์ฌ์ฉ์์ ์ ์์ ํ์ธํ ์ ์์ต๋๋ค.
JWT๋ Header.Payload.Signature ํํ์ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
xxxxx.yyyyy.zzzzz

| ๊ตฌ์ฑ ์์ | ์ค๋ช |
|---|---|
| Header | ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด(HS256, RS256 ๋ฑ) + ํ์ (JWT) |
| Payload | ์ฌ์ฉ์ ์ ๋ณด(์: id, email, role) + ๋ง๋ฃ ์๊ฐ(exp) |
| Signature | Header + Payload๋ฅผ ๋น๋ฐํค๋ก ์๋ช ํ์ฌ ๋ณ์กฐ ๋ฐฉ์ง |
์์ (๋์ฝ๋ฉ ํ):
{
"alg": "HS256",
"typ": "JWT"
}
{
"id": 1,
"username": "seunghyeok",
"exp": 1692897200
}
๋ก๊ทธ์ธ ์์ฒญ โ ์ฌ์ฉ์๊ฐ ID/PW๋ฅผ ์๋ฒ์ ์ ๋ฌ
ํ ํฐ ๋ฐ๊ธ โ ์๋ฒ๊ฐ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ์ธ ํ JWT ์์ฑ, ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
์ธ์ฆ ์์ฒญ โ ํด๋ผ์ด์ธํธ๊ฐ API ์์ฒญ ์ Authorization: Bearer ํค๋์ ๋ด์ ์ ๋ฌ
์๋ฒ ๊ฒ์ฆ โ ์๋ฒ๋ ๋น๋ฐํค๋ก JWT ์๋ช (Signature) ๊ฒ์ฆ ํ ๊ถํ ์ฒดํฌ
์๋ต โ ์ ์ ์์ฒญ์ด๋ฉด ๋ฐ์ดํฐ ๋ฐํ
๐ ์ธ์ /์ฟ ํค ๊ธฐ๋ฐ ์ธ์ฆ๊ณผ ๋ฌ๋ฆฌ ์๋ฒ๊ฐ ์ํ(state)๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ Stateless ์ธ์ฆ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
Stateless: ์๋ฒ์ ์ธ์ ์ ์ฅ์๊ฐ ํ์ ์์
ํ์ฅ์ฑ: ๋ง์ดํฌ๋ก์๋น์ค, ๋ค๋ฅธ ๋๋ฉ์ธ ๊ฐ ์ธ์ฆ์ ์ฉ์ด
๋ณดํธ์ฑ: OAuth2, OpenID Connect ๋ฑ ๋ค์ํ ์ธ์ฆ ํ์ค์์ ํ์ฉ
ํ ํฐ ํฌ๊ธฐ: Payload์ ๋ง์ ์ ๋ณด๋ฅผ ๋ฃ์ผ๋ฉด ํฌ๊ธฐ๊ฐ ์ปค์ง โ ๋คํธ์ํฌ ๋ถ๋ด
๋ฌดํจํ ์ด๋ ค์: ๋ฐ๊ธ๋ ํ ํฐ์ ๋ง๋ฃ ์ ๊น์ง ์ ํจ โ ๊ฐ์ ๋ก๊ทธ์์ ์ฒ๋ฆฌ ์ด๋ ค์
๋ณด์ ์ทจ์ฝ์ฑ: ํ ํฐ ํ์ทจ ์ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ โ ๋ฐ๋์ HTTPS ํ์
๐ก ๋ณด์ ๊ณ ๋ ค์ฌํญ
- ํ ํฐ ์ ์ฅ ์์น
- localStorage: ๊ฐ๋จํ์ง๋ง XSS ๊ณต๊ฒฉ์ ์ทจ์ฝ
- HttpOnly Cookie: ๋ณด์์ฑ โ, ํ์ง๋ง CORS ์ค์ ํ์
- ํ ํฐ ๋ง๋ฃ ์๊ฐ ์ค์
- Access Token ์งง๊ฒ, Refresh Token ๊ธธ๊ฒ โ ์ฌ๋ฐ๊ธ ์ ๋ต ํ์
- HTTPS ํ์
- ํ๋ฌธ ์ ์ก ์ ํ ํฐ ํ์ทจ ์ํ
์น/๋ชจ๋ฐ์ผ ๋ก๊ทธ์ธ ์ธ์ฆ
OAuth2 ๊ธฐ๋ฐ SNS ๋ก๊ทธ์ธ (๊ตฌ๊ธ, ๋ค์ด๋ฒ, ์นด์นด์ค)
API ์๋ฒ ๊ฐ ํต์ ์ธ์ฆ (Microservice ํ๊ฒฝ)
Refresh Token ์ ๋ต์ผ๋ก ์ฅ๊ธฐ ์ธ์ ์ ์ง
JWT๋ ํ๋ ์น ์๋น์ค์์ ์ธ์ฆ์ ํต์ฌ ์์์ ๋๋ค.
ํ์ง๋ง ๋ง๋ฅ์ ์๋๋ฉฐ, ์ ์ ํ ๋ง๋ฃ ์ ์ฑ , ์ ์ฅ ์ ๋ต, Refresh Token ์ด์ฉ ๋ฑ์ ํจ๊ป ๊ณ ๋ คํด์ผ ์์ ํ ์ธ์ฆ ์์คํ ์ ๋ง๋ค ์ ์์ต๋๋ค.