JSON Web Token (JWT)

chanloperยท2024๋…„ 9์›” 3์ผ

Django

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

์ฟ ํ‚ค ๐Ÿช

  • ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์š”์ฒญ, ์‘๋‹ต์„ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์กฐ๊ฐ
  • ์ฟ ํ‚ค๋Š” ๋„๋ฉ”์ธ์— ์ œํ•œ์ ์ด๋ฉฐ ์œ ํšจ ๊ธฐ๊ฐ„์ด ์ •ํ•ด์ ธ์žˆ๋‹ค.
  • Auth ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

์„ธ์…˜ (Session)

  • statelessํ•œ HTTP ํŠน์ง•์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•
  • ์„ธ์…˜ DB๋ฅผ ์ด์šฉํ•ด์„œ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜๋ฉฐ Session ID๋ผ๊ณ  ํ•˜๋Š” ๋žœ๋คํ•œ key๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„์„œ Auth์— ํ™œ์šฉ
  • ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์„œ Session ID๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.

JWT

  • Cookie๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๋‹ค์–‘ํ•œ ์žฅ์น˜๋“ค๊ณผ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด ํ•„์š”ํ•˜๋‹ค.
    ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ Token Auth, ๊ทธ์ค‘์—์„œ๋„ JWT ๋ฐฉ์‹์ด ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.
  • JWT๋Š” ์ผ์ •ํ•œ ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ„๋‹จํ•œ ์„œ๋ช…์„ ๋”ํ•œ ๋ฌธ์ž์—ด๋กœ ํ† ํฐ ์ž์ฒด์— ์œ ์ €์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ํ˜•ํƒœ๋‹ค.
  • JWT ๋ฐฉ์‹์œผ๋กœ Auth๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด Session DB๋‚˜ ์ธ์ฆ์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋กœ์ง ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š” ์—†๋‹ค.

์ฒ˜๋ฆฌ ๋ฐฉ์‹

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ID/PW๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋ƒ„
  2. ์„œ๋ฒ„์—์„œ ID/PW๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ์œ ํšจํ•˜๋‹ค๋ฉด ์ผ์ •ํ•œ ํ˜•์‹์œผ๋กœ ์„œ๋ช… ์ฒ˜๋ฆฌ๋œ Token์„ ์‘๋‹ต
  3. ์ดํ›„ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ชจ๋“  ์š”์ฒญ ํ—ค๋”์— ํ† ํฐ์„ ๋‹ด์•„ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ์ „์†ก
  4. ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํ† ํฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ์œ ์ €์˜ ์‹ ์›๊ณผ ๊ถŒํ•œ์„ ํ™•์ธ ํ›„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ

Session๊ณผ ์ฐจ์ด์ 

  • ์„œ๋ฒ„์— ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
  • ํ† ํฐ ์ž์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ์ธ์ฆ ๋ฐ์ดํ„ฐ
  • ์„œ๋ฒ„๋Š” ํ† ํฐ์ด ์œ ํšจํ•œ์ง€๋งŒ ๊ฒ€์ฆํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์žฅ/๋‹จ์ 

  • ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ณต์žกํ•œ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ
    ๊ทธ๋ ‡๋‹ค ๋ณด๋‹ˆ ์ผ๋ฐฉ์ ์œผ๋กœ ๋กœ๊ทธ์ธ์„ ๋ฌดํšจํ™” ํ•˜๋Š” ๋“ฑ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. (์„ธ์…˜ ํ…Œ์ด๋ธ” X)
    โž– ๋ชจ๋“  ๊ธฐ๊ธฐ ๋กœ๊ทธ์•„์›ƒ, ํ˜„์žฌ ์ ‘์† ์œ ์ง€ ๊ด€๋ฆฌ ๋“ฑ
    โž• ์„ธ์…˜์ด๋‚˜ DB ์—†์ด ์œ ์ €๋ฅผ ์ธ์ฆํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ
    โž– Token ์ž์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์ •๋ณด์ด๋ฏ€๋กœ ํƒˆ์ทจ ๋‹นํ•  ์‹œ ๋ณด์•ˆ์ด ์ทจ์•ฝํ•˜๋‹ค.
    ( ๋งŒ๋ฃŒ ๊ธฐํ•œ์„ ์งง๊ฒŒ ์žก์•„ ๋งŒ์•ฝ ํƒˆ์ทจ ๋‹นํ•ด๋„ ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ์œ ํšจํ•˜์ง€ ์•Š์€ ํ† ํฐ์˜ ํ˜•ํƒœ๊ฐ€ ๋จ )

๊ตฌ์กฐ

  • . ์„ ๊ธฐ์ค€์œผ๋กœ HEADER, PAYLOAD, VERIFY SIGATURE ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌ์„ฑ๋œ๋‹ค.

Refresh Token

  • Access Token์ด ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์ƒˆ๋กœ Access Token์„ ๋ฐœ๊ธ‰ ๋ฐ›๊ธฐ ์œ„ํ•œ Token
  • Acces Token๋ณด๋‹ค ๊ธด ์œ ํšจ ๊ธฐ๊ฐ„์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
  • ์ฃผ๋กœ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๊ธฐ์— ์ €์žฅํ•ด๋‘๊ณ  ์‚ฌ์šฉ๋˜๋ฉฐ ๋งŒ์•ฝ Refresh Token๊นŒ์ง€ ๋งŒ๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์‹œ ์ธ์ฆ(๋กœ๊ทธ์ธ)์ด ํ•„์š”ํ•ด์ง„๋‹ค.
  • Refresh Token์˜ ํƒˆ์ทจ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด DB ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹๋„ ์กด์žฌํ•จ -> BlackList ๋“ฑ

ORM

๊ฑด๋„ˆ๋›ด๋‹ค.

profile
์ด๊ฒƒ ๋ญ์—์š”?

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