JWT
JWT(Json Web Token)๋ Json ํฌ๋งท์ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ๋ํ ์์ฑ์ ์ ์ฅํ๋ Claim ๊ธฐ๋ฐ์ Web Token์ด๋ค.
JWT๋ย Header,ย Payload,ย Signature์ 3 ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, Json ํํ์ธย ๊ฐ ๋ถ๋ถ์ Base64๋ก ์ธ์ฝ๋ฉย ๋์ด ํํ๋๋ค.
๋ํย ๊ฐ๊ฐ์ ๋ถ๋ถ์ ์ด์ด ์ฃผ๊ธฐ ์ํด . ๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถํ๋ค.
์ถ๊ฐ๋ก Base64๋ ์ํธํ๋ ๋ฌธ์์ด์ด ์๋๊ณ , ๊ฐ์ ๋ฌธ์์ด์ ๋ํด ํญ์ ๊ฐ์ ์ธ์ฝ๋ฉ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
1. Header
ํ ํฐ์ ํค๋๋ย typ๊ณผย algย ๋ ๊ฐ์ง ์ ๋ณด๋ก ๊ตฌ์ฑ๋๋ค.
alg๋ ํค๋(Header)๋ฅผ ์ํธํ ํ๋ ๊ฒ์ด ์๋๊ณ , Signature๋ฅผ ํด์ฑํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ํ๋ ๊ฒ์ด๋ค.
kid : ์๋ช
์ ์ฌ์ฉํ๋ ํค(Public/Private Key)๋ฅผ ์๋ณํ๋ ๊ฐ
typ : ํ ํฐ์ ํ์
์ ์ง์ .
alg : ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ ์ง์ ํ๋ฉฐ, ์๋ช
(Signature) ๋ฐ ํ ํฐ ๊ฒ์ฆ์ ์ฌ์ฉ
ex) HS256(SHA256) ๋๋ RSA
2. Payload
ํ ํฐ์ ํ์ด๋ก๋์๋ย ํ ํฐ์์ ์ฌ์ฉํ ์ ๋ณด์ ์กฐ๊ฐ๋ค์ธ ํด๋ ์(Claim)์ด ๋ด๊ฒจ ์๋ค.
ํด๋ ์์ ์ด 3๊ฐ์ง๋ก ๋๋์ด์ง๋ฉฐ,ย Json(Key/Value)ย ํํ๋กย ๋ค์์ ์ ๋ณด๋ฅผ ๋ฃ์ ์ ์๋ค.
2.1. ๋ฑ๋ก๋ ํด๋ ์(Registered Claim)
2.2. ๊ณต๊ฐ ํด๋ ์(Public Claim)
2.3. ๋น๊ณต๊ฐ ํด๋ ์(Private Claim)
JWT์์ ์ ๋ณด ์ถ์ถํ๊ธฐ!
Backend์์ ์ง์ ํ access_token๋ฅผ ๋ฐ์ ํ name์ธ John Doe๋ฅผ ์ถ์ถ ํ๋ ค๋ฉด ์๋์ ์ฝ๋์ ๊ฐ์ด jwt_decode๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ ๋ณด๋ฅผ ์ถ์ถํ ์ ์๋ค!
โ ํ์ง๋ง ์๋์ ๋จ์ ์ ํตํด ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋ผ๋ ๊ฒ์ ์ ์ ์์!
const { access_token: accessToken } = res.data;
const payload = jwt_decode(accessToken);
const { name } = payload
Plain Text
๋ณต์ฌ
์ฌ๊ธฐ์ jwt_decode๋ Base64Url๋ก ์ธ์ฝ๋ฉ๋ JWT ํ ํฐ์ ๋์ฝ๋ฉํ๋ ๊ธฐ๋ฅ์ ํ๋ ๋ธ๋ผ์ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
3. Signature
์๋ช
(Signature)์ ํ ํฐ์ ์ธ์ฝ๋ฉํ๊ฑฐ๋ ์ ํจ์ฑ ๊ฒ์ฆ์ ํ ๋ ์ฌ์ฉํ๋ ๊ณ ์ ํ ์ํธํ ์ฝ๋์ด๋ค.
์๋ช
(Signature)์ ์์์ ๋ง๋ ํค๋(Header)์ ํ์ด๋ก๋(Payload)์ ๊ฐ์ ๊ฐ๊ฐ BASE64๋ก ์ธ์ฝ๋ฉํ๊ณ , ์ธ์ฝ๋ฉํ ๊ฐ์ ๋น๋ฐ ํค๋ฅผ ์ด์ฉํด ํค๋(Header)์์ ์ ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด์ฑ์ ํ๊ณ , ์ด ๊ฐ์ ๋ค์ BASE64๋ก ์ธ์ฝ๋ฉํ์ฌ ์์ฑํ๋ค.
์์ฑ๋ ํ ํฐ์ HTTP ํต์ ์ ํ ๋ Authorization์ด๋ผ๋ key์ value๋ก ์ฌ์ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก value์๋ Bearer์ด ์์ ๋ถ์ฌ์ง๋ค.
{
"Authorization": "Bearer {์์ฑ๋ ํ ํฐ ๊ฐ}",
}
Plain Text
๋ณต์ฌ
JWT ๊ณ ๋ ค์ฌํญ
โข
Self-contained : ํ ํฐ ์์ฒด์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฏ๋ก ์๋ ์ ๊ฒ์ด ๋ ์ ์๋ค.
โข
ํ ํฐ ๊ธธ์ด : ํ ํฐ์ ํ์ด๋ก๋(Payload)์ 3์ข
๋ฅ์ ํด๋ ์์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ์ ๋ณด๊ฐ ๋ง์์ง์๋ก ํ ํฐ์ ๊ธธ์ด๊ฐ ๋์ด๋ ๋คํธ์ํฌ์ ๋ถํ๋ฅผ ์ค ์ ์๋ค.
โข
Payload ์ธ์ฝ๋ฉ : ํ์ด๋ก๋(Payload) ์์ฒด๋ ์ํธํ ๋ ๊ฒ์ด ์๋๋ผ, BASE64๋ก ์ธ์ฝ๋ฉ ๋ ๊ฒ์ด๋ค. ์ค๊ฐ์ Payload๋ฅผ ํ์ทจํ์ฌ ๋์ฝ๋ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์์ผ๋ฏ๋ก, JWE๋ก ์ํธํํ๊ฑฐ๋ Payload์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ง ์์์ผ ํ๋ค.
โ ์ด ๋จ์ ์ ํตํด payload์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ด ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์๋ค...
โข
Stateless : JWT๋ ์ํ๋ฅผ ์ ์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ฒ ๋ง๋ค์ด์ง๋ฉด ์ ์ด๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ, ํ ํฐ์ ์์๋ก ์ญ์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ํ ํฐ ๋ง๋ฃ ์๊ฐ์ ๊ผญ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
โข
Tore Token : ํ ํฐ์ ํด๋ผ์ด์ธํธ ์ธก์์ ๊ด๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์, ํ ํฐ์ ์ ์ฅํด์ผ ํ๋ค.