KAPUIST / Node-Recruiter

๋…ธ๋“œ ๊ฐ„๋‹จ ์ด๋ ฅ์„œ CRUD
0 stars 0 forks source link

(์„ ํƒ) RefreshToken ํ™œ์šฉ #9

Closed KAPUIST closed 1 month ago

KAPUIST commented 2 months ago

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ์„ธํŒ…

๋กœ๊ทธ์ธ API์— ๊ธฐ๋Šฅ ์ถ”๊ฐ€

โš ๏ธย RefreshToken ์ €์žฅ์„ ์œ„ํ•œ ์Šคํ‚ค๋งˆ ์ •์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ)
    • [x] RefreshToken(Payload์— **์‚ฌ์šฉ์ž ID**๋ฅผ ํฌํ•จํ•˜๊ณ , ์œ ํšจ๊ธฐํ•œ์ด 7์ผ)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • [x] DB์— RefreshToken์„ ์ƒ์„ฑ ๋˜๋Š” ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
    • [x] ๋ณด์•ˆ์„ ์œ„ํ•ด RefreshToken์€ ํ‰๋ฌธ(Plain Text)์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  Hash ๋œ ๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฐ˜ํ™˜ ์ •๋ณด
    • [x] RefreshToken์„ ์ถ”๊ฐ€ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

RefreshToken ์ธ์ฆ Middleware

๊ณตํ†ต ๋œ RefreshToken ์ธ์ฆ ๊ณผ์ •์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  1. ์š”์ฒญ ์ •๋ณด
    • [x] RefreshToken์„ Request Header์˜ Authorization ๊ฐ’(**req.headers.authorization**)์œผ๋กœ ์ „๋‹ฌ ๋ฐ›์œผ๋ฉฐ, JWT ํ‘œ์ค€ ์ธ์ฆ ํ˜•ํƒœ(**Authorization: Bearer {{ RefreshToken }}**)์— ๋งž์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ
    • [x] JWT ํ‘œ์ค€ ์ธ์ฆ ํ˜•ํƒœ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ - โ€œ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ธ์ฆ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.โ€
    • [x] RefreshToken์ด ์—†๋Š” ๊ฒฝ์šฐ - โ€œ์ธ์ฆ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.โ€
    • [x] RefreshToken์˜ ์œ ํšจ๊ธฐํ•œ์ด ์ง€๋‚œ ๊ฒฝ์šฐ - โ€œ์ธ์ฆ ์ •๋ณด๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.โ€
    • [x] ๊ทธ ๋ฐ–์˜ RefreshToken ๊ฒ€์ฆ์— ์‹คํŒจํ•œ ๊ฒฝ์šฐ - โ€œ์ธ์ฆ ์ •๋ณด๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.โ€
    • [x] Payload์— ๋‹ด๊ธด ์‚ฌ์šฉ์ž ID์™€ ์ผ์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ - โ€œ์ธ์ฆ ์ •๋ณด์™€ ์ผ์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.โ€
    • [x] DB์— ์ €์žฅ ๋œ RefreshToken์ด ์—†๊ฑฐ๋‚˜ ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ - โ€œํ๊ธฐ ๋œ ์ธ์ฆ ์ •๋ณด์ž…๋‹ˆ๋‹ค.โ€
  3. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ)
    • [x] Payload์— ๋‹ด๊ธด ์‚ฌ์šฉ์ž ID๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฐ˜ํ™˜ ์ •๋ณด
    • [x] ์กฐํšŒ ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ **req.user**์— ๋‹ด๊ณ , ๋‹ค์Œ ๋™์ž‘์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ API (๐Ÿ”ย RefreshToken ์ธ์ฆ ํ•„์š”)

AccessToken ๋งŒ๋ฃŒ ์‹œ RefreshToken์„ ํ™œ์šฉํ•ด ์žฌ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์š”์ฒญ ์ •๋ณด
    • [x] RefreshToken(JWT)์„ Request Header์˜ Authorization ๊ฐ’(**req.headers.authorization**)์œผ๋กœ ์ „๋‹ฌ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • [x] ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” ์ธ์ฆ Middleware(req.user)๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ)
    • [x] AccessToken(Payload์— ์‚ฌ์šฉ์ž ID๋ฅผ ํฌํ•จํ•˜๊ณ , ์œ ํšจ๊ธฐํ•œ์ด 12์‹œ๊ฐ„)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • [x] RefreshToken (Payload: ์‚ฌ์šฉ์ž ID ํฌํ•จ, ์œ ํšจ๊ธฐํ•œ: **7์ผ**)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • [x] DB์— ์ €์žฅ ๋œ RefreshToken์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐ˜ํ™˜ ์ •๋ณด
    • [x] AccessToken, RefreshToken์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ์•„์›ƒ API (๐Ÿ”ย RefreshToken ์ธ์ฆ ํ•„์š”)

์š”์ฒญ ํ•œ RefreshToken์œผ๋กœ ๋” ์ด์ƒ ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  1. ์š”์ฒญ ์ •๋ณด
    • [x] RefreshToken(JWT)์„ Request Header์˜ Authorization ๊ฐ’(**req.headers.authorization**)์œผ๋กœ ์ „๋‹ฌ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • [x] ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” ์ธ์ฆ Middleware(req.user)๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ)
    • [x] DB์—์„œ RefreshToken์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐ˜ํ™˜ ์ •๋ณด
    • [x] ์‚ฌ์šฉ์ž ID๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.