์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ ์ํธํ์ํจ JSONํ ํฐ์ ์๋ฏธํ๋ค.
- ํ๋์ ์ธํฐ๋ท ํ์ค ์ธ์ฆ ๋ฐฉ์, (์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ค์ Token์ ๋ด์ ์ํธํ์์ผ ์ฌ์ฉํ๋ ํ ํฐ)
JWT
๋ ์๋ช ๋ ํ ํฐ,๊ณต๊ฐ/๊ฐ์ธ
ํค๋ฅผ ์์ผ๋ก ์ฌ์ฉํ์ฌ ํ ํฐ์ ์๋ช ํ ๊ฒฝ์ฐ, ํ ํฐ์ ๊ฐ์ธ ํค๋ฅผ ๋ณด์ ํ ์๋ฒ๊ฐ ์ด ์๋ช ๋ ํ ํฐ์ด ์ ์์ ์ธ ํ ํฐ์ธ์ง ์ธ์ฆ ๊ฐ๋ฅํ ํฐ์ ์ธ์ ๊ณผ๋ ๋ฌ๋ฆฌ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๋ถ๋ด์ ๋ ์ฃผ๊ฒ ๋๋ค.
โ
ํ ํฐ ์์ฒด์ ์ฌ์ฉ์์ ๊ถํ ์ ๋ณด๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ ๋ณด๊ฐ ํฌํจ ๋๋ค๋ ๊ฒ
โ
jwt๋ฅผ ์ฌ์ฉํ๋ฉด RESTful๊ณผ ๊ฐ์ ๋ฌด์ํ์ธ ํ๊ฒฝ์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ์ ์ ์ฅํ๊ณ ์์ฒญ์ ๋จ์ํ HTTP ํค๋์ ํ ํฐ์ ์ฒจ๋ถํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋จ์ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋ต ๋ฐ์์ฌ ์ ์๋ค.
โ
jwtํ ํฐ์ HTTP ํค๋์ ์ค์ด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ๋ ๋ฐฉ์์ด๋ค.
โ
JSON ๋ฐ์ดํฐ๋ฅผ Base64 URL-safe Encode ๋ฅผ ํตํด ์ธ์ฝ๋ฉํ์ฌ ์ง๋ ฌํํ ๊ฒ์ด๋ฉฐ, ํ ํฐ ๋ด๋ถ์๋ ์๋ณ์กฐ ๋ฐฉ์ง๋ฅผ ์ํด ๊ฐ์ธํค๋ฅผ ํตํ ์ ์์๋ช
๋ ๋ค์ด์๋ค
-
Header
- ํ ํฐ์ ํ์ , ์๋ช ์์ฑ์ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋์๋์ง ์ ์ฅํ๋ค.
-
Payload
- payload์๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ฃ์ง ์๋๋ค.
- Claim์ด๋ผ๋ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋๋ค. (key-value)๊ฐ์ ์ ์ฅํ๋ค.
- Claim์ ํ์ค ์คํ :
7๊ฐ์ง
(์ฌ์ฉ์์ ๋ฐ๋ผ ์ ํ์ฌํญ)iss
: ํ ํฐ ๋ฐ๊ธ์sub
: ํ ํฐ ์ ๋ชฉ (ํ ํฐ์์ ์ฌ์ฉ์์ ๋ํ ์๋ณ ๊ฐ์ด ๋จ
)aud
: ํ ํฐ ๋์์exp
: ๋ง๋ฃ์๊ฐnbf
: ํ ํฐ ํ์ฑ ์๊ฐiat
: ํ ํฐ ๋ฐ๊ธ ์๊ฐjti
: JWT ํ ํฐ ์๋ณ์
-
Signature
(์๋ช )- Header์ Payload๋ฅผ ๋ณด์ฌ์ค ๋๋ ์ธ์ฝ๋ฉ ๋์ด์๋ ๊ฐ๋ค์ JWT์ ๋ด๊ฒจ์๋ ๊ฒ์ฒ๋ผ ๋์ฝ๋ฉ๋ ์ํ๋ฅผ ์ฌ์ฉํ๋ค.
Signature
๋ ์๋ฒ์ ์๋ ๊ฐ์ธํค๋ก๋ง ์ํธํ๋ฅผ ํ ์ ์์ผ๋ฏ๋ก ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ ์์๋กSignature
๋ฅผ ๋ณตํธํํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ์์ ๋ก๊ทธ์ธ
- ์๋ฒ์์ ์๋ช ๋ jwt๋ฅผ ์์ฑํด์ ํด๋ผ์ด์ธํธ์ ์๋ต ๋๋ ค์ฃผ๊ธฐ
- ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ ๋ jwt๋ฅผ ํด๋์ ์ฒจ๋ถํด์ ์์ฒญ
- ์๋ฒ์์ jwt๊ฒ์ฆ
Header
{
//์๋ช
์ํธํ ์๊ณ ๋ฆฌ์ฆ
"alg": "HS256",
//ํ ํฐ ์ ํ
"typ": "JWT"
}
Payload
// ํ ํฐ์์ ์ฌ์ฉํ ์ ๋ณด์ ์กฐ๊ฐ๋ค์ธ Claim์ด ๋ด๊ฒจ ์๋ค.
// ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ์์คํ
์์ ์ค์ ๋ก ์ฌ์ฉ๋ ์ ๋ณด์ ๋ํ ๋ด์ฉ์ ๋ด๊ณ ์๋ค.
{
"sub": "123",
"name": "je",
"iat": 156239200,
"exp": 165234200
}
Signature
// ์๊ทธ๋์ฒ์์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํค๋์์ ์ ์ํ ๋ฐฉ์์ ํ์ฉํ๋ค.
// ์๊ทธ๋์ฒ ๊ตฌ์กฐ๋ (ํค๋ + ํ์ด๋ก๋)์ ์๋ฒ๊ฐ ๊ฐ๊ณ ์๋ ์ ์ผํ key๊ฐ์ ํฉ์น ๊ฒ์ ํค๋์์ ์ ํฌํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ํธํํ๋ค.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
...
)
๐ก JWT์ ์๋ช
์ธ์ฆ์ด ๋ชฉ์ ์ด๋ค.
- jwt๋ base64๋ก ์ํธํํ๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊ฑฐ๋ฅผ ํตํด ๋ฐ๋ก ๋ณตํธํ๋ฅผ ํ ์ ์๋ค. ๋๋ฌธ์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ payload๋ถ๋ถ์ด ๊ทธ๋๋ก ๋
ธ์ถ๋์ด ๋ฒ๋ฆฐ๋ค.
- playload์๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ฃ์ผ๋ฉด ์๋๋ค.
- jwt์ธ์ฆ ๋ฐฉ์์ ์ ๋ณด ๋ณดํธ๊ฐ ์๋์์กฐ ๋ฐฉ์ง๊ฐ ๋ชฉ์ ์ด๋ค.
- ์๊ทธ๋์ฒ์ ์ฌ์ฉ๋ ๋น๋ฐํค๊ฐ ๋
ธ์ถ๋์ง ์๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์์กฐํด๋ ์๊ทธ๋์ฒ ๋ถ๋ถ์์ ๋ฐ๋ก ๊ฑธ๋ฌ์ง๋ค.