JWT vs Session

YulHee Kimยท2021๋…„ 10์›” 1์ผ
2

CS

๋ชฉ๋ก ๋ณด๊ธฐ
7/9
post-custom-banner

๐Ÿ” ์ธ์ฆ vs ์ธ๊ฐ€

๋‘ ๋‹จ์–ด์— ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ? ์‹ถ์—ˆ์ง€๋งŒ ์–„์ฝ” ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜๋‹ค. jwt์™€ ์„ธ์…˜์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ธฐ ์ „, ์ด ๋‹จ์–ด๋“ค ๋ถ€ํ„ฐ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.

- ์ธ์ฆ(Authentication)

: ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋กœ๊ทธ์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
๋‚ด๊ฐ€ ์ด ์‚ฌ์ดํŠธ์— ๊ฐ€์ž…๋œ ํšŒ์›์ž„์„(= ์ฆ‰ ํŠน์ • ์„œ๋น„์Šค์— ์ผ์ • ๊ถŒํ•œ์ด ์ฃผ์–ด์ง„ ์‚ฌ์šฉ์ž์ž„์„) ์•„์ด๋””๋ž‘ ํŒจ์Šค์›Œ๋“œ ๋“ฑ์œผ๋กœ ์ธ์ฆํ•˜๋Š” ๊ฒƒ

- ์ธ๊ฐ€(Authorization)

: ํ•œ๋ฒˆ ์ธ์ฆ์„ ๋ฐ›์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ดํ›„ ์„œ๋น„์Šค์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ๋•Œ (= ๋กœ๊ทธ์ธ์ด ์œ ์ง€๋˜๋Š” ์ƒํƒœ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ)
์˜ˆ๋ฅผ๋“ค์–ด, ๋‚ด๊ฐ€ ํŽ˜์ด์Šค๋ถ์— ๋กœ๊ทธ์ธ์œผ๋กœ ์ธ์ฆ์„ํ•˜๊ณ  ๋‚˜์„œ '๋‚ด' ์นœ๊ตฌ๋“ค์˜ ๋ชฉ๋ก์„ ๋ณด๊ฑฐ๋‚˜ '๋‚ด ๊ณ„์ •์œผ๋กœ' ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅด๋Š” ํ–‰์œ„๋ฅผ ํ•  ๋•Œ ํŽ˜์ด์Šค๋ถ์ด ๋‚ด๊ฐ€ ๋กœ๊ทธ์ธ ๋˜์–ด์žˆ์Œ์„ ์•Œ์•„๋ณด๊ณ  ํ—ˆ๊ฐ€๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ.

์ด์ œ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.


์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์€ ๋กœ๊ทธ์ธ ์‹œ ์„ธ์…˜ ID ์ ˆ๋ฐ˜์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐœ๊ธ‰ํ•ด์ฃผ๊ณ  ๋‚˜๋จธ์ง€ ์ ˆ๋ฐ˜์€ ์ž์‹ ์ด ๊ฐ–๊ณ  ์žˆ๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ ์‹œ๋งˆ๋‹ค ์„ธ์…˜ ID๊ฐ€ ๋‹ด๊ธด ์ฟ ํ‚ค๋ฅผ ํ—ค๋”์— ๋‹ด์•„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„์—์„  ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ Stateful ํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

- ์ธ์ฆ ๋ฐฉ์‹

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์‹œ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ์ž์ž„์„ ํ™•์ธํ•˜๊ณ , ๊ณ ์œ ํ•œ ์„ธ์…˜ ID ๊ฐ’์„ ๋ถ€์—ฌํ•˜์—ฌ ์„ธ์…˜ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค.
  2. ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ์…˜ ID๋ฅผ ๋ฐ›์•„ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๊ณ , ์ธ์ฆ์ด ํ•„์š”ํ•œ ์š”์ฒญ๋งˆ๋‹ค ์ฟ ํ‚ค์— ์„ธ์…˜ ID๋ฅผ ๋‹ด์•„ ํ—ค๋”์— ์‹ค์–ด ๋ณด๋‚ธ๋‹ค.
  3. ์„œ๋ฒ„์—์„œ๋Š” ์ฟ ํ‚ค๋ฅผ ๋ฐ›์•„ ์„ธ์…˜ ์ €์žฅ์†Œ์™€ ๋น„๊ตํ•ด ์˜ฌ๋ฐ”๋ฅธ ์š”์ฒญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  4. ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๊ณ  ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค.

- ์žฅ์ 

  1. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ํ™•์ธ์ด ์šฉ์ดํ•˜๊ณ , ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ ๋“ฑ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž„์˜๋กœ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋”๋ผ๋„ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ์•ˆ์ „ํ•˜๋‹ค.

- ๋‹จ์ 

  1. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‘ ์œ ์ง€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ ์ˆ˜์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ DB์— ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•˜๋‹ค.
  2. ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์ง€๋Š” ๊ฒฝ์šฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์‚ฌ์šฉํ•œ ์„œ๋ฒ„ ํ™•์žฅ์„ ์ด์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฐ ์ด ๋•Œ ์„ธ์…˜์˜ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.

๐Ÿ” ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ(JWT)

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์€ ๋กœ๊ทธ์ธ ์‹œ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์ฃผ๊ณ , ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•  ๋•Œ HTTP ํ—ค๋”์— ํ† ํฐ์„ ํ•จ๊ป˜ ๋ณด๋‚ด๋„๋ก ํ•˜์—ฌ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋” ์ด์ƒ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์œผ๋กœ๋งŒ ์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Stateless ํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

JWT๋Š” Json Web Token์˜ ์•ฝ์ž๋กœ ์ธ์ฆ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”์‹œํ‚จ ํ† ํฐ์„ ๋œปํ•œ๋‹ค.

- jwt ํ† ํฐ ํ˜•ํƒœ

jwt.io์—์„œ ๊ฐ€์ ธ์˜จ ์˜ˆ์‹œ)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • ์ธ์ฝ”๋”ฉ ๋˜๋Š” ์•”ํ˜ธํ™”๋œ 3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์–ด๋ถ™์ธ ๊ฒƒ
  • xxxxxx.yyyyyy.zzzzzz ํ˜•ํƒœ
  • ๋งˆ์นจํ‘œ๋กœ ๋Š์–ด์ ธ์„œ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰จ
  • ๊ฐ๊ฐ header, payload, verify signature๋กœ ๊ตฌ๋ถ„๋จ

์œ„ ๋‹จ์–ด๋“ค์„ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๊ฒ ๋‹ค ๐Ÿง

โœ๏ธ payload

Base64๋กœ ๋””์ฝ”๋”ฉํ•ด๋ณด๋ฉด JSONํ˜•์‹์œผ๋กœ ์—ฌ๋Ÿฌ ์ •๋ณด๋“ค์ด ๋“ค์–ด์žˆ๋‹ค.
์ด ํ† ํฐ์„ ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์—๊ฒŒ ๋ฐœ๊ธ‰ํ–ˆ๋Š”์ง€, ์ด ํ† ํฐ์ด ์–ธ์ œ๊นŒ์ง€ ์œ ํšจํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด ํ† ํฐ์„ ํ†ตํ•ด ๊ณต๊ฐœํ•˜๊ธฐ ์›ํ•˜๋Š” ๋‚ด์šฉ์ด ๋‹ด๊ฒจ ์žˆ๋‹ค.
ex) ์‚ฌ์šฉ์ž์˜ ๋‹‰๋„ค์ž„, ์„œ๋น„์Šค์ƒ์˜ ๋ ˆ๋ฒจ, ๊ด€๋ฆฌ์ž ์—ฌ๋ถ€ ๋“ฑ
โžก๏ธ ์ด๋ ‡๊ฒŒ ํ† ํฐ์— ๋‹ด๊ธด ์‚ฌ์šฉ์ž ์ •๋ณด ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Claim์ด๋ผ๊ณ  ํ•จ

โœ๏ธ header

๋””์ฝ”๋”ฉํ•ด๋ณด๋ฉด ๋‘๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์Œ.
1) type: ํ† ํฐ์˜ ํƒ€์ž…์ธ๋ฐ ์–ธ์ œ๋‚˜ JWT๊ฐ€ ๋“ค์–ด๊ฐ
2) alg: ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์•ฝ์ž, verify signature(์„œ๋ช…)๊ฐ’์„ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉ๋  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ง€์ •๋จ. HS256 ๋“ฑ ์—ฌ๋Ÿฌ ์•”ํ˜ธํ™” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •.

ํ—ค๋” + ํŽ˜์ด๋กœ๋“œ + ์„œ๋ฒ„์— ๊ฐ์ถฐ๋†“์€ ๋น„๋ฐ€ ๊ฐ’ ์ด ์…‹์„ ์œ„ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋„ฃ๊ณ  ๋Œ๋ฆฌ๋ฉด verify signature ๊ฐ’์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

- ์ธ์ฆ ๋ฐฉ์‹

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์‹œ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ์ž์ž„์„ ํ™•์ธํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ Access Token(JWT)์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค
  2. ํด๋ผ์ด์–ธํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ์„ ์ €์žฅํ•ด๋‘๊ณ , ์ธ์ฆ์ด ํ•„์š”ํ•œ ์š”์ฒญ๋งˆ๋‹ค ํ† ํฐ์„ HTTP ํ—ค๋”์— ๋‹ด์•„ ๋ณด๋‚ธ๋‹ค.
  3. ์„œ๋ฒ„์—์„œ๋Š” ์•”ํ˜ธํ™”๋œ ํ† ํฐ์„ ๋ณตํ˜ธํ™” ํ•ด ์˜ฌ๋ฐ”๋ฅธ ์š”์ฒญ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  4. ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๊ณ  ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค.

- ์žฅ์ 

  1. Header์™€ Payload๋ฅผ ๊ฐ€์ง€๊ณ  Signature๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์œ„๋ณ€์กฐ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.
  2. ์ธ์ฆ ์ •๋ณด์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”์—†๋‹ค.
  3. JWT๋Š” ํ† ํฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ •๋ณด์™€ ์ „๋‹ฌํ•  ์ •๋ณด ๋ฐ ํ† ํฐ์ด ๊ฒ€์ฆ๋˜์—ˆ์Œ์„ ์ฆ๋ช…ํ•˜๋Š” ์„œ๋ช… ๋“ฑ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.
  4. ํ† ํฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ์— ์ ‘๊ทผ ๋ฐ ๊ถŒํ•œ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  5. OAuth์˜ ๊ฒฝ์šฐ Facebook, Google ๋“ฑ ์†Œ์…œ ๊ณ„์ •์„ ์ด์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์›น์„œ๋น„์Šค์—์„œ๋„ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๋‹จ์ 

  1. ์ฟ ํ‚ค/์„ธ์…˜๊ณผ ๋‹ค๋ฅด๊ฒŒ JWT๋Š” ํ† ํฐ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด, ์ธ์ฆ ์š”์ฒญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค.
  2. Payload ์ž์ฒด๋Š” ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.
  3. ํŠน์ • ์‚ฌ์šฉ์ž์˜ ์ ‘์†์„ ๊ฐ•์ œ๋กœ ๋งŒ๋ฃŒํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

- ๋ณด์™„

  1. ์งง์€ ๋งŒ๋ฃŒ ๊ธฐํ•œ ์„ค์ •

  2. Sliding Session
    : Sliding Session์€ ์„œ๋น„์Šค๋ฅผ ์ง€์†์ ์œผ๋กœ ์ด์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ž๋™์œผ๋กœ ํ† ํฐ ๋งŒ๋ฃŒ ๊ธฐํ•œ์„ ๋Š˜๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ธ€ ์ž‘์„ฑ ํ˜น์€ ๊ฒฐ์ œ ๋“ฑ์„ ์‹œ์ž‘ํ•  ๋•Œ ์ƒˆ๋กœ์šด ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ์„ ์ž์ฃผ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.

  3. Refresh Token
    refresh token์— ๋Œ€ํ•ด์„  ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์—์„œ ์ž์„ธํžˆ ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค.
    https://velog.io/@yulhee741/Refresh-Token-%EC%A0%95%EB%A6%AC


์ฐธ๊ณ )

profile
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž
post-custom-banner

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