JWT ๋ง๋ฃ์๊ฐ ๊ณ์ฐ๊ธฐ
JWT ํ ํฐ์ ๋์ฝ๋ฉํ์ฌ ๋ง๋ฃ ์๊ฐ์ ํ์ธํ๊ณ , ์ ํ ํฐ์ ๋ง๋ฃ ์๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ์๊ทธ๋์ฒ ๊ฒ์ฆ ์์ด ํด๋ผ์ด์ธํธ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ ๏ธ ์ด ๋๊ตฌ๋ ์๊ทธ๋์ฒ๋ฅผ ๊ฒ์ฆํ์ง ์์ต๋๋ค. ๋ณด์์ด ํ์ํ ๊ฒ์ฆ์ ๋ฐ๋์ ์๋ฒ์์ ์ํํ์ธ์.
๐ ์ฌ์ฉ๋ฒ
- JWT ํ ํฐ์ ์ ๋ ฅ๋์ ๋ถ์ฌ๋ฃ์ผ์ธ์
- ์๋์ผ๋ก Header, Payload๊ฐ ๋์ฝ๋ฉ๋ฉ๋๋ค
- ๋ง๋ฃ ์๊ฐ๊ณผ ๋จ์ ์๊ฐ์ด ์ค์๊ฐ์ผ๋ก ํ์๋ฉ๋๋ค
- ์์ฑ ํญ์์ ์ ํ ํฐ์ ๋ง๋ฃ ์๊ฐ์ ๊ณ์ฐํ ์ ์์ต๋๋ค
โจ ์ฃผ์ ๊ธฐ๋ฅ
- โJWT ํ ํฐ ์๋ ๋์ฝ๋ฉ (Header, Payload)
- โ๋ง๋ฃ ์๊ฐ(exp) ๋ฐ ๋ฐ๊ธ ์๊ฐ(iat) ํ์ธ
- โ์ค์๊ฐ ์นด์ดํธ๋ค์ด์ผ๋ก ๋จ์ ์๊ฐ ํ์
- โ๋ง๋ฃ ์ฌ๋ถ ์ฆ์ ํ์ธ
- โํ ํฐ ์์ฑ ์ ํ์ํ ์๊ฐ ํด๋ ์ ๊ณ์ฐ
- โ๋ถ/์๊ฐ/์ผ ๋จ์ ๋ง๋ฃ ์๊ฐ ์ค์
- โnbf(Not Before) ํด๋ ์ ์ ํ ์ถ๊ฐ
- โJSON ํ์์ผ๋ก ํด๋ ์ ๋ณต์ฌ ๊ฐ๋ฅ
๐ ๊ณ์ฐ ๊ณต์
exp = iat + ์ ํจ๊ธฐ๊ฐ(์ด), iat = ํ์ฌ Unix ํ์์คํฌํ๐ก ๊ณ์ฐ ์๋ฆฌ
- โขJWT(JSON Web Token)๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค: Header.Payload.Signature
- โขHeader์๋ ์๊ณ ๋ฆฌ์ฆ(alg)๊ณผ ํ ํฐ ํ์ (typ)์ด ํฌํจ๋ฉ๋๋ค.
- โขPayload์๋ ํด๋ ์(claims)์ด ํฌํจ๋๋ฉฐ, iat/exp/nbf๋ ์๊ฐ ๊ด๋ จ ํ์ค ํด๋ ์์ ๋๋ค.
- โขiat(Issued At): ํ ํฐ์ด ๋ฐ๊ธ๋ ์๊ฐ (Unix ํ์์คํฌํ)
- โขexp(Expiration Time): ํ ํฐ์ด ๋ง๋ฃ๋๋ ์๊ฐ (Unix ํ์์คํฌํ)
- โขnbf(Not Before): ํ ํฐ์ด ์ ํจํด์ง๋ ์์ ์๊ฐ (Unix ํ์์คํฌํ)
- โข์๊ทธ๋์ฒ๋ ์๋ฒ์ ๋น๋ฐํค๋ก ์์ฑ๋๋ฏ๋ก, ํด๋ผ์ด์ธํธ์์๋ ๊ฒ์ฆ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
โ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Q. ์ ์๊ทธ๋์ฒ๋ฅผ ๊ฒ์ฆํ์ง ์๋์?
A. ์๊ทธ๋์ฒ ๊ฒ์ฆ์๋ ์๋ฒ์ ๋น๋ฐํค๊ฐ ํ์ํฉ๋๋ค. ํด๋ผ์ด์ธํธ์์ ๋น๋ฐํค๋ฅผ ๋ ธ์ถํ๋ฉด ๋ณด์ ์ํ์ด ์์ผ๋ฏ๋ก, ์ค์ ๊ฒ์ฆ์ ์๋ฒ์์ ์ํํด์ผ ํฉ๋๋ค.
Q. ๋ง๋ฃ๋ ํ ํฐ๋ ๋์ฝ๋ฉ๋๋์?
A. ๋ค, ๋ง๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋์ฝ๋ฉ์ ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ง ๋ง๋ฃ ์ํ๊ฐ ๋นจ๊ฐ์์ผ๋ก ํ์๋ฉ๋๋ค.
Q. iat, exp, nbf๊ฐ ์๋ ํ ํฐ๋ ์๋์?
A. ๋ค, ์ด ํด๋ ์๋ค์ ์ ํ ์ฌํญ์ ๋๋ค. ๋ง๋ฃ ์๊ฐ์ด ์๋ ํ ํฐ์ ์๊ตฌ์ ์ผ๋ก ์ ํจํ ์ ์์ง๋ง, ๋ณด์์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
Q. ์์ฑ๋ ํด๋ ์์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?
A. ๋ณต์ฌํ JSON์ ์๋ฒ์ JWT ์์ฑ ๋ก์ง์์ payload์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ค์ ์๋ช ์ ์๋ฒ์์ ์ํํด์ผ ํฉ๋๋ค.
Q. ์ด๋ค ๋ง๋ฃ ์๊ฐ์ด ์ ๋นํ๊ฐ์?
A. ์ฉ๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. Access Token์ 15๋ถ~1์๊ฐ, Refresh Token์ 7~30์ผ์ด ์ผ๋ฐ์ ์ ๋๋ค. ๋ฏผ๊ฐํ ์์ ์๋ ์งง์ ๋ง๋ฃ ์๊ฐ์ ๊ถ์ฅํฉ๋๋ค.
์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค.