-
[Server] JWT๋?๐ปProgramming/Server 2023. 10. 2. 10:00
JWT๋?
Json Web Token์ ์ค๋ง๋ก, ๊ทธ๋๋ก ํด์ํ๋ฉด Jsonํ์์ผ๋ก๋ ์น ํ ํฐ์ด๋ผ๋ ๋ง์ด๋ค. ์ ๋ณด๋ฅผ ๋น๋ฐ๋ฆฌ์ ์ ๋ฌํ๊ฑฐ๋ ์ธ์ฆํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ํต์ ํ ๋ ๊ถํ์ ์ํด ์ฌ์ฉํ๋ ํ ํฐ์ด๋ค.
JWT๋ ํ ํฐ ์์ฒด์ ์ ๋ณด๋ฅผ ๋ด๋ Self-Contained ํ์์ ์ฌ์ฉํ๋ค. Jsonํํ๋ก ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์ ํ์ค ๊ท์ฝ์ ๋ฐ๋ผ ์์ฑํ ์ํธํ๋ ํ ํฐ์ผ๋ก ๋ณต์กํ๊ณ ์ฝ์ ์ ์๋ String ํํ๋ก ์ ์ฅ๋์ด ์๋ค.
JWT์ ๊ตฌ์ฑ์์
JWT๋ ํค๋(header), ํ์ด๋ก๋(paylod), ์๋ช (signature) ์ธ ํํธ๋ก ๋๋ ์ ธ ์์ผ๋ฉฐ ์๋์ ๊ฐ์ ํํ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. JSON ํํ์ธ ๊ฐ ๋ถ๋ถ์ Base64Url๋ก ์ธ์ฝ๋ฉ ๋์ด ํํ๋๋ค.
*Base64Url์ ์ํธํ๋ ๋ฌธ์์ด์ด ์๋๋ผ ๊ฐ์ ๋ฌธ์์ด์ ๋ํด ํญ์ ๊ฐ์ ์ธ์ฝ๋ฉ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
ํค๋(Header)
ํ ํฐ์ ํค๋๋ ๋๊ฐ์ง ์ ๋ณด๋ก ๊ตฌ์ฑ๋๋ค. alg๋ ํค๋๋ฅผ ์ํธํํ๋ ๊ฒ์ด ์๋, Signature๋ฅผ ํด์ฑํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํ๋ ๊ฒ.
{ "alg": "HS256", "typ": JWT }
typ: ํ ํฐ์ ํ์ ์ ์ง์ ํด์ค๋ค.(ex. JWT)
alg: ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ ์ง์ ํด์ฃผ๊ณ , ์๋ช ๋ฐ ํ ํฐ ๊ฒ์ฆ์ ์ฌ์ฉ๋๋ค.
ํ์ด๋ก๋(Payload)
ํ ํฐ์์ ์ฌ์ฉํ ์ ๋ณด์ ์กฐ๊ฐ๋ค์ธ ํด๋ ์(Claim)์ด ๋ด๊ฒจ์๋ค. ์ ๋ฌํ๋ ค๋ ์ ๋ณด(์ฌ์ฉ์ id๋ผ๋๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ค..=ํด๋ ์)
payload์ ๋ด์ฉ์ "์์ "์ด ๊ฐ๋ฅํ์ฌ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ํ์ง๋ง, ๋ ธ์ถ๊ณผ ์์ ์ด ๊ฐ๋ฅํ ์ง์ ์ด๊ธฐ ๋๋ฌธ์ ์ธ์ฆ์ ํ์ํ ์ต์ํ์ ์ ๋ณด(ex. ํ ํฐ์ ๊ถํ์ ๋ฒ์, ํ ํฐ์ ๋ฐ๊ธ์ผ์ด๋ ๋ง๋ฃ์ผ)๋ง ๋ด์์ผํ๋ค.
์๋ช (Signature)
๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ผ๋ก ํค๋์ ์ ๋ณด๋ฅผ ํฉ์น ํ ๋ฐ๊ธํด์ค ์๋ฒ๊ฐ ์ง์ ํ ์ํฌ๋ฆฟ ํค๋ก ์ํธํ์์ผ ํ ํฐ์ "๋ณ์กฐ"ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์ด์ค๋ค. ํ ํฐ์ ์ธ์ฝ๋ฉํ๊ฑฐ๋ ์ ํจ์ฑ ๊ฒ์ฆ์ ํ ๋ ์ฌ์ฉํ๋ ๊ณ ์ ํ ์ํธํ ์ฝ๋์ด๋ค. ์๋ช ์ ์์์ ๋ง๋ ํค๋์ ํ์ด๋ก๋์ ๊ฐ์ ๊ฐ๊ฐ Base64Url๋ก ์ธ์ฝ๋ฉํ๊ณ , ์ธ์ฝ๋ฉํ ๋น๋ฐ ํค๋ฅผ ์ด์ฉ์ ํค๋์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด์ฑ์ ํ๊ณ , ์ด ๊ฐ์ ๋ค์ Base64Url๋ก ์ธ์ฝ๋ฉํ์ฌ ์์ฑํ๋ค.
JWT์ ๋จ์
Self-contained: ํ ํฐ ์์ฒด์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฏ๋ก ์๋ ์ ๊ฒ์ด ๋ ์ ์๋ค.
ํ ํฐ ๊ธธ์ด: ํ์ด๋ก๋์ 3์ข ๋ฅ์ ํด๋ ์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ ๋ณด๊ฐ ๋ง์์ง์๋ก ํ ํฐ์ ๊ธธ์ด๊ฐ ๋์ด๋์ ๋คํธ์ํฌ์ ๋ถํ๋ฅผ ์ค ์ ์๋ค.
Stateless: JWT๋ ์ํ๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ๋ง๋ค์ด์ง๋ฉด ์ ์ด๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ํ ํฐ์ ์์๋ก ์ญ์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ํ ํฐ ๋ง๋ฃ ์๊ฐ์ ๊ผญ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
Store Token: ํด๋ผ์ด์ธํธ ์ธก์์ ํ ํฐ์ ์ ์ฅํด์ผํ๋ค.
'๐ปProgramming > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ