JWT ํ ํฐ
์ ์ ์ ์ ์ ์์ด๋ ๊ถํ์ ๊ฒฐ์ ํ๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๋ฐ์ดํฐ ์กฐ๊ฐ์ด๋ค. JWT ํ ํฐ์ ์ฌ์ฉํด์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์์ ํ๊ฒ ํต์ ํ๋ค. ์๋ํ๋ฉด JWT ํ ํฐ ์ธ์ฆ๋ฐฉ์์ ๋น๋ฐํค(๊ฐ์ธํค or ๋์นญํค)๋ก ์ํธํ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฐ๋ฐ ํ์ทจ ๋นํ์ ๋๊ฐ ๋ฌธ์ ๋ค.๐ JWT ํ ํฐ์ ํ์ทจํ ์ฌ๋์ ๋ง์น ์ ๋ขฐํ ๋งํ ์ฌ๋์ธ ๊ฒ์ฒ๋ผ ์ธ์ฆ์ ํต๊ณผํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ์ง์ด ๋ณธ ์ฃผ์ธ์ธ ํด๋ผ์ด์ธํธ์ ํ์ทจํ ์ฌ๋์ ์๋ฒ๋ ๊ตฌ๋ถํ ์ ์๋ค. ๋ฐ๋ผ์ ์ ํจ ๊ธฐ๊ฐ์ ๋์ด์ผํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ ํจ๊ธฐ๊ฐ์ ์งง๊ฒ ๋๋ฉด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์์ฃผ ํด์ผํ๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ ์ผ๋ก ์ข์ง ์๊ณ , ์ ํจ๊ธฐ๊ฐ์ ๊ธธ๊ฒ ๋๋ฉด ๋ณด์์ ํ์ทจ ์ํ์์ ๋ฒ์ด๋ ์ ์๋ค.
ํด๊ฒฐ๋ฒ์ ์ ํจ๊ธฐ๊ฐ์ด ๋ค๋ฅธ JWT ํ ํฐ
2๊ฐ(Acses Token
๊ณผ Refresh Token
)์ ๋๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ๋ค.
Access Token
์ ์ ํจ๊ธฐ๊ฐ์ ์งง๋ค. (ex. 60์ผ(๋ง์ดํฌ๋ก์ํํธ), 1์๊ฐ(์๋ง์กด))Refresh Token
์ ์ ํจ๊ธฐ๊ฐ์ ๊ธธ๋ค. (ex. 1๋
(๋ง์ดํฌ๋ก์ํํธ))์ฆ, ํต์ ๊ณผ์ ์์ ํ์ทจ๋นํ ์ํ์ด ํฐ Access Token์ ๋ง๋ฃ ๊ธฐ๊ฐ์ ์งง๊ฒ ๋๊ณ Refresh Token์ผ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ์ฌ๋ฐ๊ธํจ์ผ๋ก์จ ํผํด์ ์ต์ํํ ๊ฒ์ด๋ค.
Refresh Token
๊ณผ Access Token
๋ ๊ฐ๋ฅผ ์๋ฒ๋ก๋ถํฐ ๋ฐ๋๋ค.Refresh Token
๊ณผ Access Token
์ ๋ก์ปฌ์ ์ ์ฅํด๋๋๋ค.Access Token
์ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋์๋ค.401
๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ invalid_token
(์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋์์)์ ์ ์ ์๋ค.Refresh Token
์ ๋ฃ์ด API๋ฅผ ์ฌ์์ฒญํ๋ค.Refresh Token
๋ ๋ง๋ฃ๋์๋ค๋ฉด ์๋ฒ๋ ๋์ผํ๊ฒ 401 error code๋ฅผ ๋ณด๋ด๊ณ , ํด๋ผ์ด์ธํธ๋ ์ฌ๋ก๊ทธ์ธํด์ผํ๋ค.์ ์์๋ ํ์ทจ์๋ ํต์ ์ด ๋น๋ฒํ Access Token์ ํ์ทจํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์ด์ด ์ข๊ฒ ํ์ทจ์ ์ฑ๊ณตํ๋๋ผ๋ Access Token์ ๋ง๋ฃ ์๊ฐ์ ์งง๊ธฐ ๋๋ฌธ์ ํ์ทจ์๋ ๋ ๋ค์ ํ์ทจ๋ฅผ ์๋ํด์ผํ๋ค. ์๋ํ๋ฉด JWT Token์ ๋ง๋ฃ ์๊ฐ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค!
JWT ํ ํฐ ๊ตฌ์กฐ๋ฅผ ๋ค์ ์๊ฐํด๋ณด๋ฉด Header, Payload, Signature๋ก ๋์ด์๋ค. ๋ง๋ฃ ๊ธฐ๊ฐ์ Payload์ ์ ํ์๊ณ , Signature๋ Header+Payload๋ฅผ ๋น๋ฐํค๋ก ์ํธํํ ๊ฒ์ด๋ค. ํ์ทจ์๋ ํ ํฐ์ ๊ณ์ ์ฌ์ฉํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ Payload์ ์๋ ๋ง๋ฃ ๊ธฐ๊ฐ์ ๋๋ฆฌ๋ ค๊ณ ํ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ Payload์ ๋ง๋ฃ๊ธฐ๊ฐ์ ๋ฐ๊พผ๋ค๊ณ ํด์ Signature๊ฐ ๋ฐ๋์ง ์๋๋ค. Signature์์ ๋ณตํธํํ Payload์ ๋ณ๊ฒฝ๋ Payload๊ฐ ์ผ์นํ์ง ์๋ ๊ฒ์ ๋น๋ฐํค๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฒ๋ ์ ์ ์๊ณ , ์ ๊ทผ ๊ถํ์ ๋ด์ด์ฃผ์ง ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
Refresh Token
์ ํต์ ๋น๋๊ฐ ์ ๊ธฐ๋ ํ์ง๋ง ํ์ทจ ์ํ์์ ์์ ํ ๋ฒ์ด๋ ๊ฒ์ ์๋๋ค. Refresh Token
์ด ํ์ทจ๋นํ๋ ๊ฑด ์๋ฐฉํ ์ ์์๊น? OAuth์์๋ Refresh Token Rotation์ ์ ์ํ๋ค.
Refresh Token Rotation์ ํด๋ผ์ด์ธํธ๊ฐ Access Token๋ฅผ ์ฌ์์ฒญํ ๋๋ง๋ค Refresh Token๋ ์๋ก ๋ฐ๊ธ๋ฐ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋ฉด ํ์ทจ์๊ฐ ๊ฐ์ง๊ณ ์๋ Refresh Token์ ๋์ด์ ๋ง๋ฃ ๊ธฐ๊ฐ์ด ๊ธด ํ ํฐ์ด ์๋๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๋ถ๋ฒ์ ์ธ ์ฌ์ฉ์ ์ํ์ ์ค์ด๋ ๋ค.
ํน์ ๋ ๊ถ๊ธํ ์ฌ๋๋ค์ ์๋ ์์์ ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
What are Refresh Tokens?! and How to use them securely?
https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
https://velog.io/@park2348190/JWT์์-Refresh-Token์-์-ํ์ํ๊ฐ
๊ฐ์ฌํฉ๋๋ค!! JWT ๋ง ์ฌ์ฉํด์ ๋ค๋ฅธ ํ ํฐ์ ๊ฐ๋ ์ด ๋ชจํธํ๋๋ฐ ์ด ๊ธ ๋๋ถ์ ์ ํํ ์ง๊ณ ๊ฐ๋๋ค ^^
๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด๊ธฐ (์๋ฒ-ํด๋ผ์ด์ธํธ ํต์ )๋ฅผ ์ฝ๊ณ ํ๋ฆ์ ๋ํด ์ฝ๊ฒ ์ดํดํ์ด์. ๊ฐ์ฌํฉ๋๋ค!
๊ธ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ด ์์ต๋๋ค. Refresh Token Rotation์ ์จ์ ์ก์ธ์คํ ํฐ ์ฌ์์ฒญ๋ง๋ค ๋ฆฌํ๋ ์ ํ ํฐ์ ์ฌ๋ฐ๊ธํ๋ฉด ๋ฆฌํ๋์ ํ ํฐ ์ ํจ๊ธฐ๊ฐ (์:1๋ )์ด ์ด๊ธฐํ ๋ ํ ๋ฐ ๊ทธ๋ฌ๋ฉด ์ ์ ๊ฐ 1๋ ์ ํ ๋ฒ ์ด์ ์ฌ์ดํธ๋ฅผ ์ฌ๋ฐฉ๋ฌธํ๋ฉด ์ด๋ก ์ ํ์๋์ ํ ํฐ์ ์ฌ๋ฐ๊ธ ๋ฐ์ ์ ์๋๊ฑด๊ฐ์?
[์ง๋ฌธ]
1.JWT๋ ์ํธํ๊ฐ ์๋๋ผ ์๋ช
์์ฑ/๊ฒ์ฆ์ด ์ผ๋ฐ์ ์ธ ์ฉ๋ก ์๋๊ฐ์?
2. ํด๋ผ์ด์ธํธ์์ bearer ํด๋๋ก ๊ตณ์ด ๋ฐฑ์๋์ ์ก์ธ์ค ํ ํฐ์ผ๋ก ์ง์ ์ ์ธ ํต์ ์ ํ๋ ์ด์ ๋ ๋ญ๊ฐ์?
3. ํฌ์คํ
๋ ๋ด์ฉ์ OAuth 2.0์ ๊ดํ ์ด์ผ๊ธฐ์ธ๊ฐ์? ๋จ์ํ jwt๋ฅผ ํตํ ์ธ์ฆ์ ๋ค๋ฃจ๋๊ฑด๊ฐ์?
์ ๋ฆฌ๊ฐ ์ ๋ ๊ธ์ด๋ค์. ๋์์ด ๋์ต๋๋ค.