Jwt.md
Last updated
Last updated
JSON Web Token(JWT)๋ ์น ํ์ค์ผ๋ก์ JSON๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๋ ๊ฐ์ฒด ์ฌ์ด์์ ๊ฐ๋ณ๊ณ , ์๊ฐ ์์ฉ์ ์ธ ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํด์ค๋๋ค.
๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์
์๊ฐ ์์ฉ์ (self-contained)์ด๋ค. JWT๋ ํ์ํ ๋ชจ๋ ์ ๋ณด(token์ ๋ํ ๊ธฐ๋ณธ์ ๋ณด, ์ ๋ฌํ ์ ๋ณด, signature)๋ฅผ ์์ฒด์ ์ผ๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฝ๊ฒ ์ ๋ฌ๋๋ค. ์น์ ๊ฒฝ์ฐ HTTP Header์ ๋ฃ์ด ์ ๋ฌํ๊ฑฐ๋, URL์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ ๋ฑ ์ฝ๊ฒ ์ ์กํ ์ ์๋ค.
ํ์ ์ธ์ฆ
์ ์ ๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด ์๋ฒ์์ ์ ์ ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Access Token์ ๋ฐ๊ธํด์ฃผ๊ณ ์ด ํ ์ ์ ๋ ์๋ฒ์ ํด๋น Access Token์ ํฌํจํ์ฌ ์ ๋ฌํฉ๋๋ค. ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ์ ์์ฒญ์ ๋ฐ์ ๋๋ง๋ค ํด๋น token์ด ์ ํจํ๊ณ ์ธ์ฆ๋์๋์ง ๊ฒ์ฆ์ํ๊ณ ๊ถํ์ด ์๋์ง ํ์ธํ์ฌ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
์๋ฒ๋ ์ ์ ์ ์ธ์ ์ ๋ฐ๋ก ์ ์ฅํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ ์์์ ์๋ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ ๋ณด ๊ต๋ฅ
์ ๋ณด๊ฐ sign๋์์ด์ ์ ๋ณด๊ฐ ์กฐ์๋์ง ์์๋์ง ๊ฒ์ฆํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ํ๊ฒ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค.
typ
Token์ type์ ์ง์ (ex. JWT ๋ฑ)
alg
ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ (ex. HMAC SHA256, RSA ๋ฑ)
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ํ ํฐ์ ๊ฒ์ฆํ ๋ ์ฌ์ฉ๋๋ signature๋ถ๋ถ์์ ์ฌ์ฉ๋จ
์ง์ ์ ์ธ ์ ๋ณด๊ฐ ๋ค์ด์๋ค.
์ ๋ณด์ ํ ์กฐ๊ฐ => ํด๋ ์(claim) - name:value์ ํ ์์ผ๋ก ๊ตฌ์ฑ
ํด๋ ์์ ์ข ๋ฅ - ๋ฑ๋ก๋(registered) ํด๋ ์ - ๊ณต๊ฐ (public) ํด๋ ์ - ๋น๊ณต๊ฐ (private) ํด๋ ์
๋ฑ๋ก๋ ํด๋ ์
ํ ํฐ์ ๋ํ ์ ๋ณด๋ค์ ๋ด๊ธฐ ์ํด ์ด๋ฏธ ์ ํด์ง ํด๋ ์๋ค - iss - sub - aud - exp - nbf - iat - jti ๊ณต๊ฐ ํด๋ ์
์ถฉ๋์ด ๋ฐฉ์ง๋, URI ํ์์ ํด๋ ์ ๋น๊ณต๊ฐ ํด๋ ์
์ฟจ๋ผ์ด์ธํธ <-> ์๋ฒ ๊ฐ์ ํ์ํ์ ์ฌ์ฉ๋๋ ํด๋ ์ ์ด๋ฆ๋ค
์ด๋ฆ ์ค๋ณต์ผ๋ก ์ธํ ์ถฉ๋ ์ฃผ์
payload ์์
ํด๋น payload๋ฅผ ์ธ์ฝ๋ฉ ํ์ฌ ๋ณด๋ ๋๋ค.
base64
๋ก ์ธ์ฝ๋ฉํ ๊ฒฝ์ฐ=
๋ฌธ์๊ฐ ๋ถ์ ์ ์๋๋ฐ ์ด๋ฅผbase64
์ธ์ฝ๋ฉ์padding
๋ฌธ์๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ด๋ url-safeํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํด์ผํฉ๋๋ค. ์ ๊ฑฐํด๋ ๋์ฝ๋ฉ ํ ๋ ๋ฌธ์ ๊ฐ ๋์ง ์๊ธฐ๋๋ฌธ์ ๊ผญ ์ ๋ถ ์ง์ ์ฃผ์ธ์
header์ ์ธ์ฝ๋ฉ ๊ฐ๊ณผ payload์ ์ธ์ฝ๋ฉ ๊ฐ์ ํฉ์น ํ secret key๋ก ํด์ฌํ์ฌ ์์ฑํฉ๋๋ค.
์์ฑ ๊ณผ์
header์ payload์ ์ธ์ฝ๋ฉํ ๊ฐ ์ฌ์ด์ .
์ ๋ฃ์ด์ฃผ๊ณ ํฉ์นฉ๋๋ค.
ํฉ์น ๊ฐ์ ํด์ฌํฉ๋๋ค.
signature ์์ฑ!
์ด๋ ๊ฒ signature๊น์ง ๋ง๋ ํ์๋ ์ง๊ธ๊น์ง ๊ตฌํ ๊ฐ๋ค์ .
์ค๊ฐ์๋ก ๋ค ํฉ์ณ์ฃผ๋ฉด ํ๋์ jwt ํ ํฐ์ด ์์ฑ๋ฉ๋๋ค. ex) eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ2ZWxvcGVydC5jb20iLCJleHAiOiIxNDg1MjcwMDAwMDAwIiwiaHR0cHM6Ly92ZWxvcGVydC5jb20vand0X2NsYWltcy9pc19hZG1pbiI6dHJ1ZSwidXNlcklkIjoiMTEwMjgzNzM3MjcxMDIiLCJ1c2VybmFtZSI6InZlbG9wZXJ0In0.WE5fMufM0NDSVGJ8cAolXGkyB5RmYwCto1pQwDIqo2w
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ