์ธ์ฆํ ํฐ์ ๋ํ์ธ JWT์ ๋ํด ๊ณต๋ถํ๋ ค๊ณ ํฉ๋๋ค.
(๋ค๋ฅธ ํ ํฐ์ด ์๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง...)
JWT(JSON Web Token)๋ ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ฅผ ์ํธํ์ํจ JSONํํ์ ์๋ช ๋ ํ ํฐ์ ๋๋ค.
์ ๋ฒ ๊ธ์์ ๋ฐฐ์ ๋ ํ ํฐ์ธ์ฆ์ ํ ๋ ์ฌ์ฉ๋๋ ๋ฐฉ์?์ ๋๋ค.
https://jwt.io/
ํน์ง
- JWTํ ํฐ์ ๋ฐ๊ธํ๋ฉด ๋ณ๋๋ก ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฉฐ ์ ํจ์๊ฐ์ ํตํด ๊ด๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
- JWTํ ํฐ์ ์ฌ์ฉํ๋ฉด DB์กฐํ๋ฅผ ํ์ง ์๊ณ , ์ธ์ฆ์ ํ์ธํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ์ ๋ณ์กฐ๋ฅผ ๋ง์ ์ ์์ต๋๋ค.
- ์๋ฒ ์ธก์์ ๋ณ๋์ ์ ์ฅ์๊ฐ ํ์ ์์ต๋๋ค. (ํด๋ผ์ด์ธํธ์์ ์ฃผ๋ก ์ฟ ํค๋ ์น์คํ ๋ฆฌ์ง์ ์ ์ฅํด์ ๊ด๋ฆฌ)
- ์ ํจ๊ธฐ๊ฐ์ผ๋ก Auth๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๊ฐ์ ์งง๊ฒ ํ๋ฉด ์์ฃผ ๋ก๊ทธ์ธ ํด์ผ ๋๊ณ , ๊ธธ๊ฒ ํ๋ฉด ๋ณด์์ ์ทจ์ฝํ๊ฒ ๋ฉ๋๋ค.
- ํ ํฐ์ ๊ธธ์ด๊ฐ ๊ธธ์ด์ง ๊ฒฝ์ฐ, ๋คํธ์ํฌ์ ๋ถํ๋ฅผ ์ค ์ ์์ต๋๋ค.
๊ตฌ์กฐ
Header.Payload.Signature
์ด 3๊ฐ์ ๋ฌธ์์ด์ด ํฉ์ณ์ง ๊ฒ์ JWT๋ผ๊ณ ํฉ๋๋ค.
- Header : JWT์์ ์ฌ์ฉํ ํ์ ๊ณผ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ
- Payload : ์ฌ์ฉ์ ๊ถํ ์ ๋ณด์ ๋ฐ์ดํฐ
- Signature : Header, Payload๋ฅผ ํด์ํจ์๋ฅผ ์ ์ฉ์ํจ ๋ค, ์ ์์๋ช

Header
JWT์์ ์ฌ์ฉํ ํ์ ๊ณผ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ๋ฅผ ๋ด์์ค๋๋ค.
- alg : ์๋ช ์ํธํ ์๊ณ ๋ฆฌ์ฆ
- typ : ํ ํฐ ์ ํ
(๋ค๋ฅธ ๊ฒ๋ค๋ ์์ ๊ฑฐ ๊ฐ๊ธฐ๋ ํ๋ฐ... ์ฐพ์๋ณด๋ ๊ฑฐ ๋ง์ HS256๊ณผ JWT๋ฐ์ ์ ๋ณด์ธ๋ค.)
Payload
ํ ํฐ์์ ์ฌ์ฉ๋ ์ ๋ณด๋ค์ด ๋ด๊ฒจ ์์ต๋๋ค.
Key-Valueํ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ ๋ณด ํ ๋ฌถ์์ Claim์ด๋ผ๊ณ ์ง์นญํ๋ค๊ณ ํฉ๋๋ค.
Registered claims, Public claims, Private claim ์ด 3๊ฐ์ง๋ก ๋๋๋ค๊ณ ํ๋ค.
- Registered claims : ๋ฏธ๋ฆฌ ์ ์ํ ํด๋ ์
- sub : ์ ๋ชฉ
- iss : ๋ฐํ์
- lat : ๋ฐํ ์๊ฐ
- exp : ๋ง๋ฃ ์๊ฐ
- Public claims : ์ฌ์ฉ์๊ฐ ์ ์ํ ์ ์๋ ๊ณต๊ฐ์ฉ ์ ๋ณด ํด๋ ์. ์ถฉ๋ ๋ฐฉ์ง๋ฅผ ์ํด URL ํฌ๋งท์ ์ด์ฉ
- ์ ์์์์ https://wanga... ์ด ๋ถ๋ถ์ด ํด๋น๋๋ค.
- Private claims : ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํด๋ ์.
- ์ ์์์์ username: wanga ์ด ๋ถ๋ถ์ด ํด๋น๋ฉ๋๋ค.
Signature
Header์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์(alg) ๊ฐ์ ํ์ฉํ๊ฒ ๋ฉ๋๋ค.
Header์ Payload์ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ ์ผํ key๊ฐ์ ํฉ์น๋ฉด ๋ฉ๋๋ค.
์ ์ฒด์ ์ผ๋ก ์ทจํฉํด์ ํ ํฐ์ ๋ง๋ค๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ต๋๋ค.

Refresh Token
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ์์ JWTํ ํฐ์ ๋ฐํํ ๋๋ 2๊ฐ์ ์ข ๋ฅ(AccessToken, RefreshToken)๋ก ํ ํฐ์ ๋ฐํํฉ๋๋ค.
ํ ํฐ์ ๊ฐ์ ๊ฐ์ง๋ง ์ ํจ์๊ฐ๋ง ๋ค๋ฅธ ํ ํฐ์ ๋๋ค.
Refresh Token๋ Access Token๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฟ ํค๋ ์น์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ฉ๋๋ค.
Refresh Token์ ์ถ๊ฐ๋ก ๋ฐํํ๋ ์ด์ ๋
Access Token์ด ํ์ทจ๋นํ ์ํ์ด ๋๊ธฐ ๋๋ฌธ์ธ๋ฐ, ํ์ทจํ Access Token์ ํตํด์ ์๋ฒ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ Access Token์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ Refresh Token์ด๋ผ๋ ๋ ํ๋์ ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ์ ๊ธธ๊ฒ ๋ฐํํ์ฌ Access Token์ด ๋ง๋ฃ ๋์ ๋, ์๋ก ๋ฐ๊ธํด ์ฃผ๋ ํ ํฐ์ ๋ฐํํ๊ฒ ๋ฉ๋๋ค.
(ํด๋ผ์ด์ธํธ์์ Access Token์ด ๋ง๋ฃ๋ ๊ฒ์ Payload๋ฅผ ํตํด ์ ์ ์์ผ๋, ์ ์ด์ ์ฌ๋ฐ๊ธ์ ์์ฒญํ ์๋ ์์ต๋๋ค.)
Access Token์ด ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋ ์ํ์์ ์๋ฒ๋ก ๋ณด๋ด์ง๊ฒ ๋๋ฉด,
์๋ฒ๋ ๋ง๋ฃ๋๋ค๋ ์๋ต์ ๋ณด๋ด๊ฒ ๋๊ณ ,
๊ทธ๋ Access Token๊ณผ Refeash Token์ ๊ฐ์ด ๋ณด๋ด๋ฉด์ ์๋ก์ด Access Token์ ๋ฐ๊ธํ๊ฒ ๋๊ณ
ํด๋ผ์ด์ธํธ์์๋ Access Token์ด ์ ๋ฐ์ดํธ ๋๊ฒ ๋ฉ๋๋ค.
๋ก๊ทธ์์ ํ๊ฒ ๋๋ฉด ๋ ๊ฐ์ ํ ํฐ์ ์ญ์ ๋๊ฒ ๋ฉ๋๋ค.
์ฃผ๋ก Refresh Token์ 2์ฃผ, Access Token์ 1~2์๊ฐ์ ์ ํจ๊ธฐ๊ฐ์ ๊ฐ๊ฒ ๋ฐ๊ธํฉ๋๋ค.
Refresh Token๋ ํ์ทจ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ฌด ๊ธธ๋ฉด ์ ๋๊ณ , ํ ํฐ ํ์ทจ์ ์ํ์ด ์์ ํ ํด๊ฒฐ๋ ๊ฒ์ ์๋๋๋ค.
๋์ ์์
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์๋ํ์ฌ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ ์๋ฒ๋ DB์กฐํํ์ฌ ์ฌ์ฉ์ ๋ก๊ทธ์ธ์ ๋ณด๋ฅผ ํ์ธํ ๋ค,
JWTํ ํฐ์ Header.PayLoad.Signature๋ก ๋ง๋ค๊ณ ์ํธํํ์ฌ ํ ํฐ์ ์์ฑํฉ๋๋ค. - ์์ฑ๋ ํ ํฐ์ ์ฟ ํค์ ๋ด์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค.
- ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ์ฟ ํค์ ๋ด๊ธด ํ ํฐ ๊ฐ์ ์ฟ ํค, ๋ก์ปฌ์คํ ๋ฆฌ์ง ๋ฑ์ ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ด์ API๋ฅผ ์์ฒญํ ๋, Authorization header๊ฐ์ ํ ํฐ๊ฐ์ ๋ด์์ ๋ณด๋ด๊ฒ ๋ฉ๋๋ค.
- ์๋ฒ๋ ์ด์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ๋ฐ์ ๋๋ง๋ค ํ ํฐ ๊ฐ์ ํ์ธํ๋ฉด ๋ฉ๋๋ค.
- ๋ง์ฝ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์๋๋ฐ ํ ํฐ ๊ฐ์ด ๋ง๋ฃ๋์์ ๊ฒฝ์ฐ,
ํด๋ผ์ด์ธํธ๋ Refresh Token์ ํตํด Access Token์ ์ฌ๋ฐ๊ธ๋ฐ๊ฒ ๋ฉ๋๋ค.
Cookie, Session์ ์ด์ด Token, JWT๊น์ง ํด์ ๊ณต๋ถํ์ต๋๋ค.
์์ธํ ์ ๊ฒฝ ์ ์ฐ๊ณ ๊ฐ๋ฐ๋ง ํ์๋๋ฐ, ๊ฐ๋ ์ก๊ณ ์๊ฐํ๋ฉด์ ๊ฐ๋ฐ์ ํ ์ ์์ ๋ฏ์ถ์ต๋๋ค.
Auth ์ชฝ์ ๊ฒฐ๊ตญ ์ ์ฐ์ด๋ ๊ณณ์ด ์์ผ๋...
Cookie Session JWT 3๊ฐ๋ฅผ ๋น๊ตํด ๊ฐ๋ฉด์ ์๋ก ์ฐ์ด๋ ๊ฒ์ ํ์ธํ๋ฉด ์ข์ ๋ฏ์ถ์ต๋๋ค.
'Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CSR vs SSR vs SSG (+SEO) (0) | 2023.08.06 |
---|---|
Token] Token๋? ์ ์ (0) | 2023.07.23 |
Session์ด๋? (0) | 2023.07.20 |
Cookie] ์ฌ์ฉํ๋ ์ด์ (0) | 2023.07.16 |
Cookie] ์ ์ (0) | 2023.07.15 |