๐Ÿ”ฅ TIL - Day 69 JWT Refresh token 1

Kim Dae Hyunยท2021๋…„ 12์›” 1์ผ
1

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
80/93

ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ๋Š” JWT ํ† ํฐ์„ ์ด์šฉํ•ด์„œ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.
์ธ์ฆ์€ ๊ต‰์žฅํžˆ ๋ฏผ๊ฐํ•œ ๋ถ€๋ถ„์ด๋‹ค. ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฏผ๊ฐํ•œ ๋ถ€๋ถ„์—์„œ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค.

๐Ÿ“Œ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ๋“  Access Token์„ ํƒˆ์ทจ๋‹นํ•œ๋‹ค๋ฉด?

ํ˜„์žฌ ์šฐ๋ฆฌ ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ Access Token์ด ํƒˆ์ทจ๋‹นํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค ์ž์ฒด๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค.
ํƒˆ์ทจ๋‹นํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ์น˜๋Š” ํ˜„์žฌ ๋ฐœํ–‰๋œ ๋ชจ๋“  ํ† ํฐ์ด ๊ฒ€์ฆ ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ ๋ฟ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์ด๋ฏธ ๋ฐœํ–‰๋œ ํŠน์ • ํ† ํฐ์— ๋Œ€ํ•ด ์„œ๋ฒ„๋Š” ์–ด๋–ค ์กฐ์น˜๋„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ“Œ Access Token์˜ ๋ณด์•ˆ์ƒ ์ทจ์•ฝ์  ํ•ด๊ฒฐ (๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ)

Access Token์ด ํƒˆ์ทจ๋‹นํ•˜๋”๋ผ๋„ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ํ”ผํ•ด๊ฐ€ ์ตœ์†Œํ™” ๋˜๋„๋ก Access Token์˜ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ๋งค์šฐ ์งง๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋งค์šฐ ์ž์ฃผ ๋‹ค์‹œ ์ธ์ฆ(๋กœ๊ทธ์ธ)์„ ํ•ด์•ผ ํ•œ๋‹ค.

๋ณด์•ˆ์˜ ์ฑ…์ž„์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๊ฐ€ํ•ด์„œ ๋ถˆํŽธํ•จ์„ ์œ ๋ฐœ์‹œํ‚ค๋Š” ์ข‹์ง€์•Š์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

๐Ÿ“Œ Access Token + Refresh Token

Access Token์˜ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋Š” ์†”๋ฃจ์…˜์€ ์œ ์ง€ํ•˜๋ฉด์„œ ์‚ฌ์šฉ์ž์˜ ๋ถˆํŽธํ•จ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด ๋‘ ๊ฐœ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค.

  • Access Token: ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ
  • Refresh Token: Access Token์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์œ„ํ•œ ํ† ํฐ

Access Token์€ 1์‹œ๊ฐ„ ์ด๋‚ด๋กœ ์งง์€ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ํ• ๋‹นํ•˜๊ณ  Refresh Token์—๋Š” 7์ผ~30์ผ ์ •๋„๋กœ ๊ธด ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ํ• ๋‹นํ•œ๋‹ค.

๋งค ์š”์ฒญ๋งˆ๋‹ค ํด๋ผ์ด์–ธํŠธ๋Š” ๋‘ ํ† ํฐ์„ ๋ชจ๋‘ ํ—ค๋”์— ํฌํ•จํ•ด์„œ ์˜ค๊ณ  ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ์šฐ์„ ์ ์œผ๋กœ Access Token์„ ๊ฒ€์ฆํ•˜๊ณ  Access Token์ด ๋งŒ๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด Refresh Token์„ ๊ฒ€์ฆํ•ด์„œ ์ƒˆ๋กœ์šด Access Token์„ ์ƒ์„ฑํ•˜๊ณ  ์ธ์ฆ์ฒ˜๋ฆฌ ํ›„ ์ƒˆ๋กœ์šด Access Token์„ ๋‚ด๋ ค์ค€๋‹ค.

๐Ÿ“Œ Refresh Token์ด ํƒˆ์ทจ๋‹นํ•œ๋‹ค๋ฉด ?

Access Token์˜ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋ฉด์„œ ์ž์ฃผ ์ธ์ฆํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Refresh Token์„ ์ ์šฉํ–ˆ๋‹ค. ์•„์ง ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

Refresh Token์ด ํƒˆ์ทจ๋‹นํ•œ๋‹ค๋ฉด ???

Access Token๋งŒ ์žˆ์—ˆ์„ ๋•Œ ์„œ๋ฒ„๋Š” ๋ฐœ๊ธ‰๋œ ํŠน์ • Access Token์„ ๋ฌด๋ ฅํ™” ์‹œํ‚ฌ ๋ฐฉ๋ฒ•์ด ์—†์—ˆ๋‹ค.
์ธ์ฆ๋กœ์ง์„ ๋ณ€๊ฒฝํ•ด์„œ ๋ฐœ๊ธ‰๋œ ๋ชจ๋“  Access Token์„ ๋ฌด๋ ฅํ™”์‹œํ‚ค๋Š” ์ •๋„๊ฐ€ ์ตœ์„ ์ผ ๊ฒƒ์ด๋‹ค.

ํŠน์ • ํด๋ผ์ด์–ธํŠธ์˜ ํ† ํฐ์„ ๋ฌด๋ ฅํ™”์‹œํ‚ฌ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.

๋ญ”๊ฐ€ ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. Refresh Token์„ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (๋งˆ์น˜ ์„ธ์…˜์ฒ˜๋Ÿผ)

  • ์ตœ์ดˆ ์ธ์ฆ์‹œ Access Token๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ๋œ Refresh Token์„ DB์— ์ €์žฅํ•œ๋‹ค.
  • ๋งŒ๋ฃŒ๋œ Access Token์œผ๋กœ ์š”์ฒญ์ด ์˜จ ๊ฒฝ์šฐ ํ•จ๊ป˜ ์ „๋‹ฌ๋œ Refresh Token์„ ๊ฒ€์ฆํ•˜๊ณ  ์„œ๋ฒ„์ธก DB์—์„œ ์กฐํšŒํ•œ๋‹ค.
  • Refresh Token์ด ์œ ํšจํ•˜๊ณ  DB์—์„œ๋„ ์กฐํšŒ๊ฐ€ ๋œ๋‹ค๋ฉด REAL ์ œ๋Œ€๋กœ๋œ Refresh Token์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค.

Refresh Token์ด ์ €์žฅ๋œ DB์˜ ํŠน์ • row๋ฅผ ์‚ญ์ œํ•œ๋‹ค๋ฉด ์ด๋ฏธ ๋ฐœ๊ธ‰๋œ Refresh Token์€ ๋ฌด๋ ฅํ™”๋œ๋‹ค.


Next...

  • Springboot Redis ์—ฐ๋™ ๋ฐ ๊ธฐ๋ณธ ์—ฐ์‚ฐ ํ…Œ์ŠคํŠธ
  • Refresh Token DB์— ์ €์žฅํ•˜๊ธฐ (Redis)
profile
์ข€ ๋” ์ฒœ์ฒœํžˆ ๊นŒ๋จน๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง

0๊ฐœ์˜ ๋Œ“๊ธ€