๊ฐœ๋ฐœ ์ง€์‹/WEB ์ง€์‹

๐ŸŒ Access Token & Refresh Token ์›๋ฆฌ

์ธํŒŒ_ 2022. 1. 13. 22:05

RefreshToken-AccessToken

Access Token & Refresh Token

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ธฐ๋ณธ JWT ๋ฐฉ์‹์˜ ์ธ์ฆ(๋ณด์•ˆ) ๊ฐ•ํ™” ๋ฐฉ์‹์ธ Access Token & Refresh Token ์ธ์ฆ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ๋‹ค.

๋จผ์ € JWT(Json Web Token) ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๋Š” ๋…์ž๋“ค์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

[WEB] ๐Ÿ“š JWT(Json Web Token )๋ž€? ๐Ÿ’ฏ ์ •๋ฆฌ

Cookie & Session [WEB] ๐ŸŒ ์„ธ์…˜/ ์ฟ ํ‚ค ๐Ÿช ์ •๋ฆฌ ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)๊ณผ ๋น„์ƒํƒœ์„ฑ(Stateless) HTTP ํ”„๋กœํ† ์ฝœ์—๋Š” ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)๊ณผ ๋น„์ƒํƒœ์„ฑ(Stateless)์ด๋ผ๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์˜ ์ž์›..

inpa.tistory.com


Refresh token์ด ์™œ ํ•„์š”ํ•œ๊ฐ€

Access Token ๋งŒ์„ ํ†ตํ•œ ์ธ์ฆ ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋Š” ๋งŒ์ผ ์ œ 3์ž์—๊ฒŒ ํƒˆ์ทจ๋‹นํ•  ๊ฒฝ์šฐ ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค๋Š” ์ ์ด๋‹ค.

Access Token์€ ๋ฐœ๊ธ‰๋œ ์ดํ›„, ์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ํ† ํฐ ์ž์ฒด๋กœ ๊ฒ€์ฆ์„ ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ์ธ์ฆํ•˜๊ธฐ ๋–„๋ฌธ์—, Access Token์ด ํƒˆ์ทจ๋˜๋ฉด ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „ ๊นŒ์ง€, ํ† ํฐ์„ ํš๋“ํ•œ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ๊ถŒํ•œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

JWT๋Š” ๋ฐœ๊ธ‰ํ•œ ํ›„ ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ ‘๊ทผ์— ๊ด€์—ฌํ•˜๋Š” ํ† ํฐ์— ์œ ํšจ์‹œ๊ฐ„์„ ๋ถ€์—ฌํ•˜๋Š” ์‹์œผ๋กœ ํƒˆ์ทจ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋Œ€์‘์„ ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

์ด์ฒ˜๋Ÿผ ํ† ํฐ ์œ ํšจ๊ธฐ๊ฐ„์„ ์งง๊ฒŒํ•˜๋ฉด ํ† ํฐ ๋‚จ์šฉ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ์œ ํšจ๊ธฐ๊ฐ„์ด ์งง์€ Token์˜ ๊ฒฝ์šฐ ๊ทธ๋งŒํผ ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ์„ ์ž์ฃผ ํ•ด์„œ ์ƒˆ๋กญ๊ฒŒ Token์„ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•˜๋ฏ€๋กœ ๋ถˆํŽธํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฌดํ„ฑ๋Œ€๊ณ  ์œ ํšจ๊ธฐ๊ฐ„์„ ๋Š˜๋ฆฌ์ž๋ฉด, ํ† ํฐ์„ ํƒˆ์ทจ๋‹นํ–ˆ์„ ๋•Œ ๋ณด์•ˆ์— ๋” ์ทจ์•ฝํ•ด์ง€๊ฒŒ ๋œ๋‹ค.

์ด๋•Œ “๊ทธ๋Ÿฌ๋ฉด ์œ ํšจ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ ํ•˜๋ฉด์„œ  ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋Š” ์•Š์„๊นŒ?”๋ผ๋Š” ์งˆ๋ฌธ์˜ ๋‹ต์ด ๋ฐ”๋กœ Refresh Token์ด๋‹ค.

 

์ด๋ฆ„์ด ๋‹ค๋ฅด์ง€๋งŒ ํ˜•ํƒœ ์ž์ฒด๋Š” Refresh Token์€ Access Token๊ณผ ๋˜‘๊ฐ™์€ JWT๋‹ค. ๋‹จ์ง€ Access Token์€ ์ ‘๊ทผ์— ๊ด€์—ฌํ•˜๋Š” ํ† ํฐ์ด๊ณ , Refresh Token์€ ์žฌ๋ฐœ๊ธ‰์— ๊ด€์—ฌํ•˜๋Š” ํ† ํฐ ์ด๋ฏ€๋กœ ํ–‰ํ•˜๋Š” ์—ญํ• ์ด ๋‹ค๋ฅด๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ์ฒ˜์Œ์— ๋กœ๊ทธ์ธ์„ ํ–ˆ์„ ๋•Œ, ์„œ๋ฒ„๋Š” ๋กœ๊ทธ์ธ์„ ์„ฑ๊ณต์‹œํ‚ค๋ฉด์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ Access Token๊ณผ Refresh Token์„ ๋™์‹œ์— ๋ฐœ๊ธ‰ํ•œ๋‹ค.  ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— Refresh Token์„ ์ €์žฅํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” Access Token๊ณผ Refresh Token์„ ์ฟ ํ‚ค, ์„ธ์…˜ ํ˜น์€ ์›น์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ณ  ์š”์ฒญ์ด ์žˆ์„๋•Œ๋งˆ๋‹ค ์ด ๋‘˜์„ ํ—ค๋”์— ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค.

์ด Refresh Token์€ ๊ธด ์œ ํšจ๊ธฐ๊ฐ„์„ ๊ฐ€์ง€๋ฉด์„œ, Access Token์ด ๋งŒ๋ฃŒ๋์„ ๋•Œ ์ƒˆ๋กœ ์žฌ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ์—ด์‡ ๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋งŒ์ผ ๋งŒ๋ฃŒ๋œ Access Token์„ ์„œ๋ฒ„์— ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๋Š” ๊ฐ™์ด ๋ณด๋‚ด์ง„ Refresh Token์„  DB์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•ด์„œ ์ผ์น˜ํ•˜๋ฉด ๋‹ค์‹œ Access Token์„ ์žฌ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์›๋ฆฌ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์•„์›ƒ์„ ํ•˜๋ฉด ์ €์žฅ์†Œ์—์„œ Refresh Token์„ ์‚ญ์ œํ•˜์—ฌ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ณ  ์ƒˆ๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ๋‹ค์‹œ ์žฌ๋ฐœ๊ธ‰ํ•ด์„œ DB์— ์ €์žฅํ•œ๋‹ค.

์‚ฌ์šฉ ์˜ˆ๋ฅผ ๊ฐ„๋‹จํžˆ ๋“ค์–ด๋ณด์ž. Refresh Token์˜ ์œ ํšจ๊ธฐ๊ฐ„์€ 2์ฃผ, Access Token์˜ ์œ ํšจ๊ธฐ๊ฐ„์€ 1์‹œ๊ฐ„์ด๋ผ ๊ฐ€์ • ํ•˜๊ฒ ๋‹ค.
์‚ฌ์šฉ์ž๋Š” API ์š”์ฒญ์„ ํ•˜๋‹ค๊ฐ€ 1์‹œ๊ฐ„์ด ์ง€๋‚˜๊ฒŒ ๋˜๋ฉด, ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Access Token์€ ๋งŒ๋ฃŒ ๋˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Refresh Token์˜ ์œ ํšจ๊ธฐ๊ฐ„ ์ „๊นŒ์ง€๋Š” Access Token์„ ์ƒˆ๋กญ๊ฒŒ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.  ์ฆ‰, Refresh Token ์ ‘๊ทผ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Access Token ์žฌ๋ฐœ๊ธ‰์—๋งŒ ๊ด€์—ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๋งŒ์ผ Refresh Token์˜ ์œ ํšจ๊ธฐ๊ฐ„(2์ฃผ)์ด ๋งŒ๋ฃŒ๋๋‹ค๋ฉด, ์‚ฌ์šฉ์ž๋Š” ์ƒˆ๋กœ ๋กœ๊ทธ์ธํ•ด์•ผ ํ•œ๋‹ค. Refresh Token๋„ ํƒˆ์ทจ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์—ญ์‹œ ์ ์ ˆํ•œ ์œ ํšจ๊ธฐ๊ฐ„ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค (๋ณดํ†ต 2์ฃผ๋กœ ๋งŽ์ด ์žก๋Š” ํŽธ์ด๋‹ค)

Access / Refresh Token ์žฌ๋ฐœ๊ธ‰ ์›๋ฆฌ

 

1. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๊ทธ์ธ ๊ฐ™์€ ๊ณผ์ •์„ ํ•˜๋ฉด Access Token๊ณผ Refresh Token์„ ๋ชจ๋‘ ๋ฐœ๊ธ‰ํ•œ๋‹ค.

์ด๋•Œ, Refresh Token๋งŒ ์„œ๋ฒ„์ธก์˜ DB์— ์ €์žฅํ•˜๋ฉฐ, Refresh Token๊ณผ Access Token์„ ์ฟ ํ‚ค ํ˜น์€ ์›น์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•œ๋‹ค.

 

2. ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์ด ํ•„์š”ํ•œ API์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋ฉด, ๊ฐ€์žฅ ๋จผ์ € ํ† ํฐ์„ ๊ฒ€์‚ฌํ•œ๋‹ค.

์ด๋•Œ, ํ† ํฐ์„ ๊ฒ€์‚ฌํ•จ๊ณผ ๋™์‹œ์— ๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ํ™•์ธํ•˜์—ฌ ์žฌ๋ฐœ๊ธ‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

  • case1 : access token๊ณผ refresh token ๋ชจ๋‘๊ฐ€ ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฐœ์ƒ (์žฌ ๋กœ๊ทธ์ธํ•˜์—ฌ ๋‘˜๋‹ค ์ƒˆ๋กœ ๋ฐœ๊ธ‰)
  • case2 : access token์€ ๋งŒ๋ฃŒ๋์ง€๋งŒ, refresh token์€ ์œ ํšจํ•œ ๊ฒฝ์šฐ   refresh token์„ ๊ฒ€์ฆํ•˜์—ฌ access token ์žฌ๋ฐœ๊ธ‰
  • case3 : access token์€ ์œ ํšจํ•˜์ง€๋งŒ, refresh token์€ ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ  access token์„ ๊ฒ€์ฆํ•˜์—ฌ refresh token ์žฌ๋ฐœ๊ธ‰
  • case4 : access token๊ณผ refresh token ๋ชจ๋‘๊ฐ€ ์œ ํšจํ•œ ๊ฒฝ์šฐ ์ •์ƒ ์ฒ˜๋ฆฌ
[refresh token์„ ๊ฒ€์ฆํ•˜์—ฌ access token ์žฌ๋ฐœ๊ธ‰]
ํด๋ผ์ด์–ธํŠธ(์ฟ ํ‚ค, ์›น์Šคํ† ๋ฆฌ์ง€)์— ์ €์žฅ๋˜์–ด์žˆ๋Š” refresh token๊ณผ ์„œ๋ฒ„ DB์— ์ €์žฅ๋˜์–ด์žˆ๋Š” refresh token ์ผ์น˜์„ฑ์„ ํ™•์ธํ•œ ๋’ค access token ์žฌ๋ฐœ๊ธ‰ํ•œ๋‹ค.

[access token์„ ๊ฒ€์ฆํ•˜์—ฌ refresh token ์žฌ๋ฐœ๊ธ‰]
access token์ด ์œ ํšจํ•˜๋‹ค๋ผ๋Š” ๊ฒƒ์€ ์ด๋ฏธ ์ธ์ฆ๋œ ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ˆ ๋ฐ”๋กœ refresh token ์žฌ๋ฐœ๊ธ‰ํ•œ๋‹ค. 

 

3. ๋กœ๊ทธ์•„์›ƒ์„ ํ•˜๋ฉด Access Token๊ณผ Refresh Token์„ ๋ชจ๋‘ ๋งŒ๋ฃŒ์‹œํ‚จ๋‹ค.


Refresh Token ์ธ์ฆ ๊ณผ์ •

RefreshToken-AccessToken

1. ์‚ฌ์šฉ์ž๊ฐ€ ID , PW๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ.

2. ์„œ๋ฒ„์—์„œ๋Š” ํšŒ์› DB์—์„œ ๊ฐ’์„ ๋น„๊ต

3~4. ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜๋ฉด Access Token, Refresh Token์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค. ์ด๋•Œ ํšŒ์›DB์—๋„ Refresh Token์„ ์ €์žฅํ•ด๋‘”๋‹ค.

5. ์‚ฌ์šฉ์ž๋Š” Refresh Token์€ ์•ˆ์ „ํ•œ ์ €์žฅ์†Œ์— ์ €์žฅ ํ›„, Access Token์„ ํ—ค๋”์— ์‹ค์–ด ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

6~7. Access Token์„ ๊ฒ€์ฆํ•˜์—ฌ ์ด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.

8. ์‹œ๊ฐ„์ด ์ง€๋‚˜ Access Token์ด ๋งŒ๋ฃŒ๋๋‹ค.

9. ์‚ฌ์šฉ์ž๋Š” ์ด์ „๊ณผ ๋™์ผํ•˜๊ฒŒ Access Token์„ ํ—ค๋”์— ์‹ค์–ด ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

10~11. ์„œ๋ฒ„๋Š” Access Token์ด ๋งŒ๋ฃŒ๋จ์„ ํ™•์ธํ•˜๊ณ  ๊ถŒํ•œ์—†์Œ์„ ์‹ ํ˜ธ๋กœ ๋ณด๋‚ธ๋‹ค.

Access Token ๋งŒ๋ฃŒ๊ฐ€ ๋  ๋•Œ๋งˆ๋‹ค ๊ณ„์† ๊ณผ์ • 9~11์„ ๊ฑฐ์น  ํ•„์š”๋Š” ์—†๋‹ค.
์‚ฌ์šฉ์ž(ํ”„๋ก ํŠธ์—”๋“œ)์—์„œ Access Token์˜ Payload๋ฅผ ํ†ตํ•ด ์œ ํšจ๊ธฐ๊ฐ„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ”„๋ก ํŠธ์—”๋“œ ๋‹จ์—์„œ API ์š”์ฒญ ์ „์— ํ† ํฐ์ด ๋งŒ๋ฃŒ๋๋‹ค๋ฉด ๊ณง๋ฐ”๋กœ ์žฌ๋ฐœ๊ธ‰ ์š”์ฒญ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

12. ์‚ฌ์šฉ์ž๋Š” Refresh Token๊ณผ Access Token์„ ํ•จ๊ป˜ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.

13. ์„œ๋ฒ„๋Š” ๋ฐ›์€ Access Token์ด ์กฐ์ž‘๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•œํ›„, Refresh Token๊ณผ ์‚ฌ์šฉ์ž์˜ DB์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ Refresh Token์„ ๋น„๊ตํ•œ๋‹ค. Token์ด ๋™์ผํ•˜๊ณ  ์œ ํšจ๊ธฐ๊ฐ„๋„ ์ง€๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ƒˆ๋กœ์šด Access Token์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค.

14. ์„œ๋ฒ„๋Š” ์ƒˆ๋กœ์šด Access Token์„ ํ—ค๋”์— ์‹ค์–ด ๋‹ค์‹œ API ์š”์ฒญ ์‘๋‹ต์„ ์ง„ํ–‰ํ•œ๋‹ค. 


# ์ฐธ๊ณ ์ž๋ฃŒ

https://tansfil.tistory.com/59