Last updated
Last updated
๊ธฐ์กด์๋ ์ ํตํด ์ฌ์ฉ์ ์ธ์ฆ์ ์ํํ์๋ค. ์ด ๋ฐฉ๋ฒ์ ์๋ฒ๊ฐ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์ฅํ๊ณ ์์ด์ผ ํ๊ณ , ์ด๋ ๋ค์์ ๋ฌธ์ ๋ฅผ ๋ฐ์์์ผฐ๋ค.
๋ชจ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋ถํ๋ฅผ ์ผ์ผํจ๋ค.
์๋ฒ๋ฅผ ํ์ฅํ๊ธฐ ์ด๋ ค์์ง๋ค. ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๊ฐ ๋๋ฉด ์ธ์ ์ ๋ณด๋ฅผ ๊ณต์ ํด์ผ ํ๋๋ฐ, ์ด ๊ณผ์ ์ด ๋ณต์กํ๊ธฐ ๋๋ฌธ
๋ฐ๋ผ์ Stateful ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ด๋ ค์์ ๋๋ผ๊ฒ ๋์๊ณ , ์ด์ ๋ํ ๋์์ผ๋ก ๋ฑ์ฅํ Stateless ๋ฐฉ์์ ์ธ์ฆ ๊ธฐ๋ฒ์ด ๋ฐ๋ก Token์ ์ด์ฉํ ์ธ์ฆ ๊ธฐ๋ฒ์ด๋ค.
JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ํ ํฐ
jwt ๋ ๊ฒ์ฆ ๊ฐ๋ฅํ(can be verified) ๋ฐ์ดํฐ ํต์ ์ ์ํ ๊ฒ
์ฃผ์. ์ํธํ๋ ๋ฐ์ดํฐ ํต์ ์ ์ํ ๊ฒ์ด ์๋!!!
๋ด๋ถ์ ๋ฐ์ดํฐ๋ ๋๊ตฌ๋ ๋ณผ ์ ์์ ํ์ง๋ง ๋ณ์กฐ๋ ๋ถ๊ฐ๋ฅ
SIGNATURE ๋ถ๋ถ์ ํค๋, ํ์ด๋ก๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก secret key(HMAC) ๋๋ public/private key pair(RSA/ECDSA)๋ฅผ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๊ณ์ฐ๋จ
๋ฐ๋ผ์, SIGNATURE ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋๋ฉด ์ ํจํ์ง ์์ ๊ฒ์ผ๋ก ํ๋จ
header, body๊ฐ ๋ณ์กฐ๋์๊ฑฐ๋ ์ด๋ค์ ์ํธํํ๋ ์๊ณ ๋ฆฌ์ฆ ๋๋ key ๊ฐ์ด ๋ณ์กฐ๋์๊ฑฐ๋์
header, body๊ฐ ๊ฐ๊ณ ์ํธํ ์๊ณ ๋ฆฌ์ฆ๊ณผ key ๊ฐ ๋ชจ๋ ๊ฐ์์ผ signature๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ
3๊ฐ์ง ๊ตฌ์ญ์ ๊ฐ๊ฐ์ ํด๋นํ๋ json ๋ฐ์ดํฐ๋ฅผ BASE64๋ก ์ธ์ฝ๋ฉํ ๊ฒ
๊ฐ json์ ํค๊ฐ์ compactํ๊ฒ ํํํ๋ ๊ฒ์ ๊ถ์ฅํจ
Header
sign ๊ณผ์ ์์ ์ฌ์ฉ๋ ์๊ณ ๋ฆฌ์ฆ (HS256, RSA256 ๋ฑ๋ฑโฆ)
ํ ํฐ์ ํ์ (JWT)
Payload
Claim์ ํฌํจํ ๋ฐ์ดํฐ
Claim์ด๋? ํด๋น ๋ฐ์ดํฐ์ ๋ํ ๋ถ๊ฐ ์ค๋ช
registered
๋ฐํ์, ๋ง๋ฃ์๊ฐ, subject, audience ๋ฑ
https://datatracker.ietf.org/doc/html/rfc7519#section-4.1
public
jwt๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ฉํ๋ ๋ถ๊ฐ ์ ๋ณด๋ค
https://www.iana.org/assignments/jwt/jwt.xhtml
registered ๊ณผ ์ค๋ณต๋๋ ๊ฒ๋ค ์์. ์์ ์๋ ๋ช ์ธ ๋ฐ์ดํฐ๋ค์ด public claim ์ ํด๋น
private
registered, public ์ ํด๋นํ์ง ์๋ ์ปค์คํ ๋ฐ์ดํฐ
์ ๋ฐ์ดํฐ์ id, name ๊ฐ์ ๊ฐ
Signature
ํด๋น JWT์ ๋ํ ์๋ช . ํ ํฐ์ด ๋ณ์กฐ๋์ง ์์์์ ๋ณด์ฅํ๊ธฐ ์ํด ์กด์ฌ
๋ฏธ๋ฆฌ ์ฝ์๋ ํค๋ฅผ ํตํด ๊ฒ์ฆํจ์ผ๋ก์จ ์ด ํ ํฐ์ด ์๋ง์ ์ฌ๋์๊ฒ์ ๋ฐํ๋์์๋ ๊ฒ์ฆ ๊ฐ๋ฅ
์ธ์ฝ๋ฉ๋ ํค๋, ํ์ด๋ก๋ ๊ฐ, ํค๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ํธํ๋ ๋ฐ์ดํฐ
๋ณด์ ์ํ์ด ์๋ ๋ฐ์ดํฐ๋ ๋ฃ์ผ๋ฉด ์ ๋จ. ๋จ์ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ด๋ฏ๋ก ๋๊ตฌ๋ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์์
๋ณ์กฐ๋ฅผ ๋ฐฉ์งํ๋ค์ง ๋ฐ์ดํฐ๋ฅผ ์๋ํ๋ ๊ธฐ๋ฅ์ ์์
๋ณดํต Authorization ํค๋์ ๋ด์ ๋ณด๋ด๋ ํ์์ ์ฌ์ฉ. ํค๋ ์ฌ์ด์ฆ๊ฐ ๋๋ฌด ํฌ๋ฉด ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ์๋ฒ๋ค์ด ์๊ฒจ jwt ํ ํฐ ์ฌ์ด์ฆ๋ ์ต๋ํ ์๊ฒ ๋ง๋๋ ๊ฒ์ ๊ถ์ฅํจ
ํค๋ ํฌ๊ธฐ๊ฐ 8KB๊ฐ ๋์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํจ
ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ ์๋ฒ์ ์ธ์ฆ ์์ฒญ์ ํ๋ค.
์ธ์ฆ ์ ์ฐจ์ ํต๊ณผํ๋ฉด, ์ธ์ฆ ์๋ฒ๋ ์ก์ธ์ค ํ ํฐ์ ๋ฐํํ๋ค.
ํด๋ผ์ด์ธํธ๋ ํ ํฐ๊ณผ ํจ๊ป ๋ฆฌ์์ค ์๋ฒ์ ๋ณดํธ ์์์ ์ ๊ทผํ๋ค.