JWT(JSON Web Tokens)์ด๋?
- ๋ ๊ฐ์ฒด์์ JSON ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ๊ณ ์ ๋ณด๋ฅผ ์์ ์ฑ ์๊ฒ ์ ๋ฌํ๋ ๋ฐฉ์
- https://tools.ietf.org/html/rfc7519
JWT์ ๊ตฌ์ฑ์์๋?
header.payload.signature
header
- ์๊ณ ๋ฆฌ์ฆ๊ณผ token ํ์ ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
{
"alg": "HS256",
"typ": "JWT"
}
Claim(payload)
- ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ณต๊ฐ์ด๋ค.
- ์ถ๊ฐ์ ์ผ๋ก JWT์ ์์ฝ๋ ํค์๋๊ฐ ์๋ค.
- ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐ๋ผ ์์ฝ์ด๋ฅผ ์ง์ํ ์๋ ์ํ ์๋ ์๋ค.
iss
: ํ ํฐ ๋ฐ๊ธ์sub
: ํ ํฐ ์ ๋ชฉaud
: ํ ํฐ ๋์์exp
: ํ ํฐ์ ๋ง๋ฃ์๊ฐnbf
: Not Beforeiat
: ํ ํฐ์ด ๋ฐ๊ธ๋ ์๊ฐjti
: JWT์ ๊ณ ์ ์๋ณ์
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
signature
- ํ ํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํ signature hash๊ฐ
- header์ payload ๊ทธ๋ฆฌ๊ณ secret key์ผ๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ์ ํด์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก hashingํ ๊ฐ
JWT ์ธ์ฆ ์ ์ฐจ๋?
- ์ฌ์ฉ์๊ฐ id์ password๋ฅผ ์ ๋ ฅํ์ฌ ๋ก๊ทธ์ธ์ ์๋
- ์๋ฒ๋ ์์ฒญ์ ํ์ธํ๊ณ secret key๋ฅผ ํตํด Access token์ ๋ฐ๊ธ
- ์ธ์ฆ ์ดํ ์ฌ์ฉ์๊ฐ API๋ฅผ ์์ฒญํ ๋
Authorization header
์Access token
์ ๋ด์์ ์์ฒญ - ์๋ฒ๋
JWT Signature
๋ฅผ ์ฒดํฌํ๊ณ Payload๋ก๋ถํฐ user ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์ํ๋ ์์์ Return
โ โ
์ฃผ์ํด์ผํ ์ ์ ์์๊น?
- JWT๋ ์์ ํ HttpOnly ์ฟ ํค๋ก ์ ์ฅ
- Cross-Site Scripting(XSS) ๊ณต๊ฒฉ์ ๋ฐฉ์ง
- ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ JWT๋ก ์ ์ฅํ๋ฉด ์๋๋ค.
- ์ฝ๊ฒ Debug๊ฐ๋ฅ