TOC
JWT
๐JWT๋ ๋ฌด์์ธ๊ฐ
- JSON Web Token์ ์ค์๋ง๋ก ๋น์ฌ์ ๊ฐ์ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ์กํ๊ธฐ ์ํ ๋ฐฉ์์ json ๊ฐ์ฒด์ด๋ค.
- ๋์งํธ ์๋ช ์ด ๋์ด ์์ด ํ์ธํ๊ณ ์ ๋ขฐํ ์ ์๋ค.
- ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ํ ๋ ํน์ ์ ์ ์ ๊ถํ์ ์ฒดํฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋๋ฐ ์ ์ฉํ ๋ชจ๋ ์ด๋ค.
๐JWT ๊ตฌ์กฐ
https://jwt.io/์ ๊ฐ๋ฉด jwt ํ ํฐ์ ๋ง๋ค์ด ๋ณผ ์ ์๋ค.
JWT๋ ์๋์ ๊ฐ์ด xxxx.yyyy.zzzz
์ธ ๊ตฌ์กฐ๋ก ๋๋๋ค.
header
- ํค๋๋ ์ผ๋ฐ์ ์ผ๋ก token ํ์ ๊ณผ HMAC SHA256 RSA ์ ๊ฐ์ด ์ฌ์ฉ๋๋ signing ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ณด๊ฐ ํ์๋๋ค.
- ์ด๋ฌํ json๊ฐ์ฒด๋ฅผ base64url๋ก ์ธ์ฝ๋ฉํ์ฌ jwt์ ์ฒซ๋ฒ์งธ ๋ถ๋ถ์ ํ์ฑํ๋ค.
- ํ ํฐ์ ๋ํ ๋ฉํ ๋ฐ์ดํฐ๋ค์ด ๋ค์ด๊ฐ๋ค.
payload
- claim ๋ค์ด ํฌํจ๋๋ค.
- claim (ํด๋ ์)์ด๋ ์ํฐํฐ(์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์)์ ์ถ๊ฐ ๋ฐ์ดํฐ์ ๋ํ ์ค๋ช ์ด๋ค.
- Register claims
- ๋ฏธ๋ฆฌ ์ ์ ๋ ํด๋ ์
- iss,exp,sub,aud ๋ฑ์ด ์๋ค.
- ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด 3๊ธ์๋ก ์ ์ํ๋ค.
- Public claims
- ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ์ํ๋ ๋๋ก ์ ์
- ์ถฉ๋์ ํผํ๊ธฐ ์ํด IANA JWT Registry์ ์ ์ ๋๊ฑฐ๋ ,์ถฉ๋์ ์ ํญ๋ ฅ์ด ์๋ ๋ค์์คํ์ด์ค๋ฅผ ํฌํจํ๋ URL๋ก ์ ์ ๋์ด์ผํ๋ค.
- ์ถฉ๋์ด๋ , ๋ ๊ฐ ์ด์์ ์์๊ฐ ๋์ผํ ์๋ณ์๋ฅผ ๊ณต์ ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ค.
- IANA ๋ ์ธํฐ๋ท์์ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์์์ ๊ด๋ฆฌํ๋ ๊ธฐ๊ด์ด๋ค.
- INAN JSON Registry์์ JWT์์ ์ฌ์ฉํ๋ ๊ณต๊ฐ ํด๋์ ์ด๋ฆ๋ค์ ๋ชจ์๋ ๋ชฉ๋ก์ด๋ค.
- โhttp://mywebsite.com/jwt/claims/user_levelโ ๊ฐ์ ํํ๋ก ๊ณต๊ฐ ํด๋ ์์ ์ ์ํ ์ ์๋ค. (ํด๋น ๋ค์์คํ์ด์ค ๋ด์์๋ง ์ ํจํ๋ฏ๋ก ๋ค๋ฅธ ์์คํ ๊ณผ ์ถฉ๋ํ์ง ์๊ฒ๋จ)
- Private claims
- ์ฌ์ฉ์ ๋์ํ ๋น์ฌ์๊ฐ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ๋ง๋ ๋ง์ถคํ ํด๋ ์
- Base64URL๋ก ์ธ์ฝ๋ฉ ๋์ด ๋๋ฒ ์งธ ๋ถ๋ถ์ ํ์ฑํ๋ค.
- ์๋ช
๋ ํ ํฐ์ ๋ณ์กฐ๋ก๋ถํฐ ๋ณดํธ๋์ง๋ง ๋๊ตฌ๋ ์ฝ์ ์ ์์ผ๋ฏ๋ก payload๋ header ์์์ ์ํธํ ๋์ง ์์ ๋น๋ฐ ์ ๋ณด๋ฅผ ๋ฃ์ง ๋ง์์ผํ๋ค.
- signed token : ์๋ช ๋ ํ ํฐ : jwt์ ๋์งํธ ์๋ช ์ด ์ถ๊ฐ๋์์์ ์
- ๋์งํธ ์๋ช ์ ๋ฉ์์ง์ ๋ฌด๊ฒฐ์ฑ๊ณผ ๋ฐ์ ์์ ์ ์์ ๊ฒ์ฆํ๋๋ฐ ์ฌ์ฉ
- ํ ํฐ์ด ๋ฐํ์์ ์ํด ์์ฑ๋ ๊ฒ์์ ํ์ธํ๊ณ ์ ์ก๊ณผ์ ์์ ๋ฐ์ดํฐ๊ฐ ๋ณ์กฐ๋์ง ์์์์ ๋ณด์ฅ
signature
- ์ธ์ฝ๋ฉ๋ ํค๋, ์ธ์ฝ๋ฉ๋ ํ์ด๋ก๋, ๋น๋ฐํค , ํค๋์ ๋ช ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์๋ช ์ ํ๋ค.
- ์๋ช ์ ๋ฉ์์ง๊ฐ ์ค๊ฐ์ ๋ณ๊ฒฝ๋์ง ์์์์ ๊ฒ์ฆํ๋๋ฐ ์ฌ์ฉํ๋ค,
- ๊ฐ์ธํค๋ก ์๋ช ๋ ํ ํฐ์ ๊ฒฝ์ฐ jwt์ ๋ฐ์ ์๊ฐ ์์ ์ด ์ฃผ์ฅํ๋ ์ฃผ์ฒด์์ ๊ฒ์ฆํ ์ ์๋ค
๐์ ๋ฆฌ
- header์๋ ์ด๋ ํ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋์๋์ง ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ค.
- payload์๋ ์ค์ ์ ๋ฌํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ค.
- signature์์ ์์ ์ ๋ณด๋ค์ด ๋ณ์กฐ๋์ง ์์๋ค๋ ๊ฒ์ ํ์ธํ๊ธฐ ์ํด header์ payload๋ฅผ ์ด์ฉํด์ ์์ฑํ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
๐JWT ๋์ ๋ฐฉ์
- ์ธ์ฆ์์ ์ฌ์ฉ์๊ฐ ์์ ์ ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ์ฌ ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ์ธํ๋ฉด JSON Web Token์ด ๋ฐํ๋๋ค.
- ํ ํฐ์ ์๊ฒฉ ์ฆ๋ช ์ด๋ฏ๋ก, ์ผ๋ฐ์ ์ผ๋ก ํ์ํ ๊ฒ๋ณด๋ค ๋ ์ค๋ ํ ํฐ์ ์ ์งํด์๋ ์๋๋ค.
- ๋ณด์์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์ ์ฅ์์ ๋ฏผ๊ฐํ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์๋ ์ ๋๋ค.
- ์ฌ์ฉ์๊ฐ ๋ณดํธ๋ ๊ฒฝ๋ก๋ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค ํ ๋๋ง๋ค, ์ฌ์ฉ์ ์์ด์ ํธ๋ ์ผ๋ฐ์ ์ผ๋ก Bearer ์คํค๋ง๋ฅผ ์ฌ์ฉํ์ฌ Authorization ํค๋์์ JWT๋ฅผ ์ ์กํด์ผ ํ๋ค.
Authorization: Bearer <token>
- ํน์ ๊ฒฝ์ฐ์ stateless ์ธ์ฆ ๋งค์ปค๋์ฆ์ด ๋ ์ ์๋ค.
- ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์์๋ ๋๋ฏ๋ก ๋ฌด์ํ๋ผ ํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ ์์ฒญ๋ง๋ค JWT(์ธ์ฆ์ ๋ณด)๊ฐ ํจ๊ป ์ค๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ธก์์๋ ๋ณ๋์ ์ธ์ ๊ด๋ฆฌ ์์ด ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- JWT์ ๋ง์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ ๊ฒฝ์ฐ ํฌ๊ธฐ๊ฐ ์ปค์ ธ ๋ฌธ์ ๊ฐ ๋ฐ์ ํ ์ ์์ด ์ต์ํ์ ์ ๋ณด๋ง ๋ด์์ ์ฌ์ฉํด์ผํ๋ค.
- CORS(๋๋ฉ์ธ๊ฐ ๋ฆฌ์์ค ๊ณต์ ์ ๋ฐ์ํ ์ ์๋ ๋ณด์ ์ด์) ๋ฌธ์ ์ ์ฌ์ฉ๋ ์ ์๋ค.
- JWT๋ ์ฟ ํค์ ๋ฌ๋ฆฌ ๋๋ฉ์ธ ๊ฐ ๊ณต์ ์ ์ ์ฝ ๋ฐ์ง ์๋๋ค.
- ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ๋ฑ์ ํ ๋ OpenID Connect ๊ฐ์ ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ฉด โ/oauth/authorizeโ์ ๊ฐ์ ์๋ํฌ์ธํธ๋ก ์์ฒญํ๋ฉฐ ์ด ๊ณผ์ ์์ authorization code flow ๋ฑ์ ๋ฐฉ์์ผ๋ก ์งํ๋ ์ ์๋ค | authorization code flow : oauth2.0 ์ธ์ฆ ํ๋กํ ์ฝ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ธ์ฆ ๋ฐฉ์์ด๋ค.
- ์ฌ์ฉ์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆํ๋ฉด ์๋ฒ ์ชฝ์์ JWT ํํ์ access token์ ๋ฐ๊ธํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํด์ค๋ค.
- ๊ทธ ํ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์์ฒญํ ๋ ๋ง๋ค ํด๋น access token(JWT)๋ฅผ ํจ๊ป ๋ณด๋ด์ฃผ๊ฒ ๋๊ณ , ์๋ฒ ์ชฝ์์ ํด๋น JWT๊ฐ ์ ํจํ ์ง ๊ฒ์ฌํ์ฌ ์์ฒญ ์ ํ(API ํธ์ถ ๋ฑ)์ ๋ฐ๋ฅธ ๊ถํ ํ์ธ ๋ฐ ์ฒ๋ฆฌ ๋ฑ์ ์งํํ๊ฒ ๋๋ค.
- JWT์ payload ๋ถ๋ถ์ Base64 ํํ๋ก ์ธ์ฝ๋ฉ ๋๋ฏ๋ก ์ค์ ๋ฐ์ดํฐ๊ฐ ์ธ๋ถ์ ๋ ธ์ถ๋ ์ ์์ด์ ๋ฏผ๊ฐํ ์ ๋ณด๋ JWT ๋ด์ ๋ฃ์ด์๋ ์ ๋๋ค.
๐์ JWT์ ์ฌ์ฉํด์ผ ํ๋๊ฐ
- JSON์ XML๋ณด๋ค ๊ฐ๊ฒฐํ์ฌ ์ธ์ฝ๋ฉ๋ ๋ ํฌ๊ธฐ๊ฐ ๋ ์์, JWT๋ SAML๋ณด๋ค ๋ ์ปดํฉํธํ๋ค. ์ด๋ก ์ธํด JWT๋ HTML๊ณผ HTTP ํ๊ฒฝ์์ ์ ๋ฌํ๊ธฐ์ ์ข๋ค.
- ๋ณด์ ์ธก๋ฉด์์ SWT๋ HMAC ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๊ณต์ ๋น๋ฐ๋ก๋ง ๋์นญ์ ์ผ๋ก ์๋ช ๋ ์ ์์ง๋ง, JWT์ SAML ํ ํฐ์ X.509 ์ธ์ฆ์ ํํ์ ๊ณต๊ฐ/๋น๊ณต๊ฐ ํค ์์ ์ฌ์ฉํ์ฌ ์๋ช ํ ์ ์๋ค.
- ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ JSON ํ์๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ด๊ฒ๋ค์ ์ง์ ๊ฐ์ฒด๋ก ๋งคํ ๋๋ค.๋ฐ๋ฉด XML์ ์์ฐ์ค๋ฌ์ด ๋ฌธ์-๊ฐ์ฒด ๋งคํ์ด ์์ด JWT๋ฅผ ๋ค๋ฃจ๊ธฐ๊ฐ ๋ ์ฝ๋ค.
- JWT๋ ์ธํฐ๋ท ๊ท๋ชจ์์ ์ฌ์ฉ๋๋ฉฐ, ์ฌ๋ฌ ํ๋ซํผ(ํนํ ๋ชจ๋ฐ์ผ)์์ ํด๋ผ์ด์ธํธ ์ธก JSON ์น ํ ํฐ ์ฒ๋ฆฌ์ ์ฉ์ด์ฑ์ ๊ฐ์กฐํ๋ค.
- ์ธ์ฝ๋ฉ๋ JWT์ SAML์ ๊ธธ์ด๋ฅผ ๋น๊ตํ๋ฉด, JWT๊ฐ ๋ ์งง๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฝ๋ค.
์ฐธ๊ณ : https://jwt.io/introduction