JWT

Coastbyยท2023๋…„ 4์›” 20์ผ
0

Keyword

๋ชฉ๋ก ๋ณด๊ธฐ
7/8

Cookie vs Session vs JWT ์ธ์ฆ

๐Ÿช ์ฟ ํ‚ค
์›น์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ „์†กํ•˜๋Š” ์ž‘์€ ํ…์ŠคํŠธ ์กฐ๊ฐ.

์ฟ ํ‚ค๋Š” key-value ํ˜•์‹์˜ ๋ฌธ์ž์—ด์ด๋‹ค. ๊ฐ ์‚ฌ์šฉ์ž๋งˆ๋‹ค์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋‹ˆ ๊ณ ์œ  ์ •๋ณด ์‹๋ณ„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  1. ๋ธŒ๋ผ์šฐ์ € (ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ž‘์„ฑํ•  ๋•Œ, ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅํ•˜๊ณ  ์‹ถ์€ ์ •๋ณด๋ฅผ ์‘๋‹ต ํ—ค๋”์˜ Set-Cookie์— ๋‹ด๋Š”๋‹ค.
  3. ์ดํ›„ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค, ๋งค๋ฒˆ ์ €์žฅ๋œ ์ฟ ํ‚ค๋ฅผ ์š”์ฒญ ํ—ค๋”์˜ Cookie์— ๋‹ด์•„ ๋ณด๋‚ธ๋‹ค.

์„œ๋ฒ„๋Š” ์ฟ ํ‚ค์— ๋‹ด๊ธด ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•ด๋‹น ์š”์ฒญ์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฐ์ง€ ์‹๋ณ„ํ•˜๊ฑฐ๋‚˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ถ”์ฒœ ๊ด‘๊ณ ๋ฅผ ๋„์šฐ๊ฑฐ๋‚˜ ํ•œ๋‹ค.

๐Ÿ“Œ ๋‹จ์ 

  • ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค๋Š” ์ ์ด๋‹ค. ์š”์ฒญ ์‹œ ์ฟ ํ‚ค์˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ถœ ๋ฐ ์กฐ์ž‘ ๋‹นํ•  ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค.
  • ์ฟ ํ‚ค์—๋Š” ์šฉ๋Ÿ‰ ์ œํ•œ(4KB)์ด ์žˆ์–ด ๋งŽ์€ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.
  • ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ฟ ํ‚ค์— ๋Œ€ํ•œ ์ง€์› ํ˜•ํƒœ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ„ ๊ณต์œ ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ฟ ํ‚ค์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ์— ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค.

๐Ÿ“Žย Session ์ธ์ฆ

์„ธ์…˜์€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„ ์ธก์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ๋„ ํ•˜๊ณ , ์„œ๋ฒ„์˜ ๋กœ์ปฌ ํŒŒ์ผ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

๐Ÿ“Œย ์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹

  1. ์œ ์ €๊ฐ€ ์›น์‚ฌ์ดํŠธ์—์„œ ๋กœ๊ทธ์ธํ•˜๋ฉด ์„ธ์…˜์ด ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ (ํ˜น์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค) ์ƒ์— ์ €์žฅ๋œ๋‹ค.

    ์ด๋•Œ, ์„ธ์…˜์€ Session id๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

  2. ์„œ๋ฒ„์—์„œ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค์— session id๋ฅผ ์ €์žฅํ•œ๋‹ค.

  3. ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์‚ฌ์ดํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์— session id๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ์ „์†กํ•œ๋‹ค.

  4. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ session id์™€ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” session id๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐Ÿ“Œย ๋‹จ์ 

  • ์ฟ ํ‚ค๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ์ด ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋”๋ผ๋„ session id ์ž์ฒด๋Š” ์œ ์˜๋ฏธํ•œ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ, ํ•ด์ปค๊ฐ€ session id ์ž์ฒด๋ฅผ ํƒˆ์ทจํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์ธ์ฒ™ ์œ„์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค. (์ด๋Š” ์„œ๋ฒ„์—์„œ IP ํŠน์ •์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธด ํ•˜๋‹ค)
  • ์„œ๋ฒ„์—์„œ ์„ธ์…˜ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์š”์ฒญ์ด ๋งŽ์•„์ง€๋ฉด ์„œ๋ฒ„์— ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค.

๐Ÿ“Žย Token ์ธ์ฆ

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†์„ ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ธ์ฆ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ โ€˜ํ† ํฐโ€™์„ ๋ถ€์—ฌํ•œ๋‹ค. ์ด ํ† ํฐ์€ ์œ ์ผํ•˜๋ฉฐ ํ† ํฐ์„ ์ด์šฉํ•˜์—ฌ ์ธ์ฆ ๊ณผ์ •์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

โœ“ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ

  • ์„œ๋ฒ„์˜ DB์— ์„ธ์…˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” stateful
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉฐ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ™•์žฅ์ด ์–ด๋ ต๋‹ค.

โœ“ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ

  • ํด๋ผ์ด์–ธํŠธ์— ํ† ํฐ์ด ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์„ ๋œ ์ˆ˜ ์žˆ๋‹ค.
  • ํ† ํฐ ์ž์ฒด์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋Š” ๋ฐ›์•„์„œ ์œ„์กฐ๋˜์—ˆ๋Š”์ง€ ํŒ๋ณ„๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” stateless

ํ† ํฐ์€ ์•ฑ๊ณผ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹  ๋ฐ ์ธ์ฆํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. (์•ฑ์—๋Š” ์ฟ ํ‚ค์™€ ์„ธ์…˜์ด ์—†๋‹ค.)

๐Ÿ“Œย Token ์ธ์ฆ ๋ฐฉ์‹

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค.

  2. ์„œ๋ฒ„์ธก์—์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.

  3. ํด๋ผ์ด์–ธํŠธ๋Š” ํ† ํฐ์„ ์ฟ ํ‚ค๋‚˜ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ด๋‘๊ณ , ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ํ† ํฐ์€ HTTP ์š”์ฒญ ํ—ค๋”์— ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค.

  4. ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ณ  ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค.

    ํ† ํฐ์—๋Š” ์š”์ฒญํ•œ ์‚ฌ๋žŒ์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์–ด DB๋ฅผ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  ์š”์ฒญํ•œ ์‚ฌ๋žŒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œย ๋‹จ์ 

  • ํ† ํฐ ์ž์ฒด์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด, ์ธ์ฆ ์š”์ฒญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • Payload ์ž์ฒด๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.
  • ํ† ํฐ์„ ํƒˆ์ทจ๋‹นํ•˜์—ฌ ๋Œ€์ฒ˜ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. (๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์„œ ํ•ด๊ฒฐํ•œ๋‹ค.)

JWT (JSON Web Token)

์ธ์ฆ์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์•”ํ˜ธํ™”์‹œํ‚จ JSON ํ† ํฐ.

Base64 URL-safe Encode๋ฅผ ํ†ตํ•ด ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ง๋ ฌํ™”ํ•œ ๊ฒƒ์ด๋‹ค. ํ† ํฐ ๋‚ด๋ถ€์—๋Š” ํ† ํฐ ์œ„๋ณ€์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๊ฐœ์ธํ‚ค๋ฅผ ํ†ตํ•œ ์ „์ž์„œ๋ช…๋„ ๋“ค์–ด์žˆ๋‹ค.

๐Ÿ“Œย JWT ๊ตฌ์กฐ

JWT๋Š” .์„ ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์„ธ ๊ฐ€์ง€ ๋ฌธ์ž์—ด (Header, Payload, Signature)์˜ ์กฐํ•ฉ์ด๋‹ค.

  • Header: ์‚ฌ์šฉํ•œ ํƒ€์ž…๊ณผ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • Payload: ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
  • Signature: Header, Payload ๋ฅผ Base64 URL-safe Encode ๋ฅผ ํ•œ ์ดํ›„ Header ์— ๋ช…์‹œ๋œ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ณ , ๊ฐœ์ธํ‚ค(Private Key)๋กœ ์„œ๋ช…ํ•œ ์ „์ž์„œ๋ช…์ด ๋‹ด๊ฒจ์žˆ๋‹ค.

๐Ÿ“Œย JWT ์žฅ์ 

  • Header์™€ Payload๋ฅผ ๊ฐ€์ง€๊ณ  Signature๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์œ„๋ณ€์กฐ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ธ์ฆ ์ •๋ณด์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”์—†๋‹ค.
  • JWT๋Š” ํ† ํฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ •๋ณด์™€ ์ „๋‹ฌํ•  ์ •๋ณด ๋ฐ ํ† ํฐ์ด ๊ฒ€์ฆ๋˜์—ˆ์Œ์„ ์ฆ๋ช…ํ•˜๋Š” ์„œ๋ช… ๋“ฑ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์„ธ์…˜๊ณผ ๋‹ค๋ฅด๊ฒŒ, ์„œ๋ฒ„๋Š” ๋ฌด์ƒํƒœ (stateless)๊ฐ€ ๋˜์–ด ์„œ๋ฒ„ ํ™•์žฅ์„ฑ์ด ์šฐ์ˆ˜ํ•˜๋‹ค.
  • ํ† ํฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ์— ์ ‘๊ทผ ๋ฐ ๊ถŒํ•œ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. (์ฟ ํ‚ค์™€ ์ฐจ์ด)
  • OAuth๋ฅผ ์ด์šฉํ•˜์—ฌ ํƒ€ ์†Œ์…œ ๊ณ„์ •์„ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘ํ•œ๋‹ค. (์„ธ์…˜์€ ๋ถˆ๊ฐ€๋Šฅ)

๐Ÿ“Œย JWT ๋‹จ์ 

  • self-contained : ํ† ํฐ ์ž์ฒด์— ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์–‘๋‚ ์˜ ๊ฒ€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ† ํฐ ๊ธธ์ด : ํ† ํฐ์˜ payload์— ์ •๋ณด๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ํ† ํฐ์˜ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚˜ ๋„คํŠธ์›Œํฌ์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • payload ์ธ์ฝ”๋”ฉ: payload๋ฅผ BASE64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ, ๋””์ฝ”๋”ฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. โ†’ ์ค‘์š” ๋ฐ์ดํ„ฐ๋Š” ๋„ฃ์œผ๋ฉด ์•ˆ ๋œ๋‹ค.
  • store token : ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ํ† ํฐ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ† ํฐ ์ž์ฒด๋ฅผ ํƒˆ์ทจ๋‹นํ•˜๋ฉด ๋Œ€์ฒ˜ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

โ™ป๏ธ Refresh Token

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

ํ•˜์ง€๋งŒ, ์œ ํšจ์‹œ๊ฐ„์„ ์งง๊ฒŒ ํ•˜๋ฉด ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ์„ ์ž์ฃผํ•ด์•ผ ํ•˜๋ฉฐ, ๊ธธ๊ฒŒ ํ•˜๋ฉด ๋ณด์•ˆ์— ์ทจ์•ฝํ•ด์ง€๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด Refresh token์„ ๋„์ž…ํ•œ๋‹ค.

  • Access token : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ–๊ณ ์žˆ๋Š” ์‹ค์ œ๋กœ ์œ ์ €์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํ† ํฐ์œผ๋กœ, ์š”์ฒญ์ด ์˜ค๋ฉด ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ํ† ํฐ์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •๋ณด์— ๋งž๊ฒŒ ์‘๋‹ต์„ ์ง„ํ–‰ํ•œ๋‹ค.
  • Refresh Token : ์ƒˆ๋กœ์šด (๋งŒ๋ฃŒ๋œ) access token์„ ๋ฐœ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ์œผ๋กœ, ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ ์ € ์ •๋ณด์™€ ๊ฐ™์ด ๊ธฐ๋กํ•œ๋‹ค.

๐Ÿ“Œย ์žฌ๋ฐœ๊ธ‰ ๊ณผ์ •

  1. ๋กœ๊ทธ์ธ ์‹œ access token๊ณผ refresh token์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.

    refresh token์€ ์„œ๋ฒ„์˜ DB์— ์ €์žฅํ•˜๊ณ ,
    access token๊ณผ refresh token์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค ํ˜น์€ ์›น์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ณ  ์š”์ฒญ ์‹œ๋งˆ๋‹ค ์ด ๋‘˜์„ ํ—ค๋”์— ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค.

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

    • Access, Refresh ๋ชจ๋‘ ๋งŒ๋ฃŒ โ†’ ์—๋Ÿฌ๋ฐœ์ƒ (์žฌ๋กœ๊ทธ์ธ ํ•„์š”)
    • Access ๋งŒ๋ฃŒ, Refresh ์œ ํšจ โ†’ refresh ๊ฒ€์ฆํ•˜์—ฌ access ์žฌ๋ฐœ๊ธ‰

    ๐Ÿ“Œ ๋งŒ๋ฃŒ๋œ access token์„ ์„œ๋ฒ„์— ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ๊ฐ™์ด ๋ณด๋‚ธ refresh token์„ DB์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ์ผ์น˜ํ•˜๋ฉด access token์„ ์žฌ๋ฐœ๊ธ‰ํ•œ๋‹ค.

    • Access ์œ ํšจ, Refresh ๋งŒ๋ฃŒ โ†’ access ๊ฒ€์ฆํ•˜์—ฌ refresh ์žฌ๋ฐœ๊ธ‰
    • Access, Refresh ์œ ํšจ โ†’ ์ •์ƒ์ฒ˜๋ฆฌ
  3. ๋กœ๊ทธ์•„์›ƒ ์‹œ ์ €์žฅ์†Œ์—์„œ refresh token์„ ์‚ญ์ œํ•œ๋‹ค.

์ฐธ๊ณ 

https://tansfil.tistory.com/58#comment6076580
https://lovefor-you.tistory.com/247

์ถ”๊ฐ€ ์ฐธ๊ณ 
JWT๋Š” ์–ด๋””์— ์ €์žฅํ•ด์•ผํ• ๊นŒ? - localStorage vs cookie
JWT & Spring Security

profile
ํ›ˆ์ด์•ผ ํ™”์ดํŒ…

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