๐Ÿ’ป ์†Œ์…œ ๋กœ๊ทธ์ธ

ozzingยท2022๋…„ 1์›” 26์ผ
0
post-thumbnail

์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ

์ด๋ฒˆ ์•ฑ์žผ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ๋งž๊ฒŒ ๋œ ํŒŒํŠธ์ด์ž, ๋‚ด๊ฐ€ ์™„์ „ ๋ฌธ์™ธํ•œ์ธ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋ ค ํ•œ๋‹ค.
๋จผ์ € OAuth2.0 ๊ฐœ๋…์˜ ์ดํ•ด๋ฅผ ์œ„ํ•ด ์ƒํ™œ์ฝ”๋”ฉ ์œ ํŠœ๋ธŒ ์˜์ƒ์„ ์ฐธ๊ณ ํ•ด ๊ณต๋ถ€ํ•˜์˜€๋‹ค.


OAuth2.0

Resource Owner, Resource Server, Client๋กœ ๊ตฌ๋ถ„์ง€์—ˆ๋‹ค.
์ดํ•˜ resource๋Š” ์ƒ๋žตํ•˜๊ณ  ์ž‘์„ฑํ•˜์˜€๋‹ค.

OAuth2.0์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด

  1. client๋Š” server์— ๋“ฑ๋ก, id์™€ secret์„ ์ œ๊ณต ๋ฐ›์Œ
  2. client๊ฐ€ owner์—๊ฒŒ ๋กœ๊ทธ์ธ ์Šน์ธ ๋ฒ„ํŠผ ์ œ๊ณต
  3. server๊ฐ€ owner์—๊ฒŒ ์ •๋ณด ์ œ๊ณต ๋™์˜ ๋ฒ„ํŠผ ์ œ๊ณต
  4. server๊ฐ€ client์—๊ฒŒ 'code'๋ผ๋Š” owner๊ฐ€ ๋™์˜ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณต
  5. client๊ฐ€ server์—๊ฒŒ id์™€ secret์„ code์™€ ํ•จ๊ป˜ ๋ฐ˜ํ™˜, ์ด๋กœ์„œ access token์„ ์ œ๊ณต ๋ฐ›์Œ
  6. ์ดํ›„ client๋Š” access token์„ ์ด์šฉํ•ด ์š”์ฒญ, server๋Š” ์ž์‹ ์ด ๋ถ€์—ฌํ–ˆ๋˜ ํ† ํฐ์ด๋ฉด ์ˆ˜๋ฝ ๋ฐ resource ์ œ๊ณต
  7. client๋Š” ๋ฐ›์€ resource๋ฅผ ์•Œ๋งž๊ฒŒ ๊ฐ€๊ณตํ•ด owner์—๊ฒŒ ์ œ๊ณต

์ด ์ค‘ 5๋ฒˆ๋ถ€ํ„ฐ๊ฐ€ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด์˜€๋‹ค.

์šฐ๋ฆฌ๋Š” ์นด์นด์˜ค ๋กœ๊ทธ์ธ๋งŒ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์›์น™๋Œ€๋กœ provider๋„ ๋Œ๋ ค ๋ฐ›๊ธด ํ–ˆ์ง€๋งŒ ์•„์ง ์“ฐ์ง€๋Š” ์•Š์•˜๊ณ 

authentication code, client id, client secret์„ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š” api๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.


๋จผ์ € ์‹œ๋„ํ–ˆ๋˜ ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์ธ์ฆ!

firebase auth

๊ธฐ๋ณธ์ ์œผ๋กœ firebase authentication์ด ์ œ๊ณตํ•˜๋Š” ๋กœ๊ทธ์ธ ๋ฐฉ๋ฒ•์ด ๊ฝค ์žˆ๋‹ค.
google, facebook, twitter, github ๋“ฑ๋“ฑ.. ๊ทธ๋ ‡์ง€๋งŒ ์นด์นด์˜คํ†ก์€ ์—†๋‹ค.
๋Œ€์‹  ์ปค์Šคํ…€ ํ† ํฐ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

![https://velog.velcdn.com/images%2Fozzing%2Fpost%2F378c67e6-2f60-41cc-94d5-27465d8aed98%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fozzing%2Fpost%2F378c67e6-2f60-41cc-94d5-27465d8aed98%2Fimage.png)

access token์œผ๋กœ Kakao API์— ์ •๋ณด ์š”์ฒญ์„ ํ•ด์„œ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ firebase admin SDK๋ฅผ ์‚ฌ์šฉํ•ด firebase authentication์— user๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ƒ์„ฑ๋œ ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž์˜ UID๋ฅผ ํ†ตํ•ด firebase custom token์„ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•œ๋‹ค. ๊ธฐ๊ธฐ์— ์ „๋‹ฌ ํ›„ signInWithCustomToken ๋ฉ”์†Œ๋“œ์— ์ด๋ฅผ ๋„˜๊ฒจ ๋กœ๊ทธ์ธ ํ•œ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ์—„์ฒญ ๊ฐ„ํŽธํ–ˆ๋‹ค.

์‹ค์ œ๋กœ ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์œ ์ €๋ฅผ ๋“ฑ๋กํ•˜๊ณ  UID๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค.

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


์ธ์ฆ ๋ฐฉ์‹ ๋ณ€๊ฒฝ

firebase auth๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ๋กœ ํ–ˆ๋‹ค.
๋ฌผ๋ก  firebase authentication์˜ ์žฅ์ ๋„ ์žˆ์—ˆ๊ณ  ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์ด๋ฉ”์ผ / SNS / ์ต๋ช… ๋กœ๊ทธ์ธ์ด ์ „๋ถ€ ๊ฐ€๋Šฅ
  • ๋‚ด ์ดํ•ด ๋ฒ”์œ„๋ฅผ ๋›ฐ์–ด ๋„˜๋Š” ์ข‹์€ ๋ณด์•ˆ
  • firebase auth๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ•์ œ๋กœ ๋กœ๊ทธ์•„์›ƒ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

ํšŒ์›๊ฐ€์ž… ์‹œ์ ์— ์ž…๋ ฅ๋ฐ›์€ ์‚ฌ์šฉ์ž์˜ ์•„์ด๋””๋กœ ์ž„์˜๋กœ ์ด๋ฉ”์ผ ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์นด์นด์˜ค ์ธก์— ์ด๋ฉ”์ผ์„ ์š”๊ตฌํ•  ์ˆ˜๋„ ์žˆ์—ˆ์œผ๋‚˜ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์•„๋Š” ๋ฒ”์œ„ ์•ˆ์—์„œ ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์นด์นด์˜ค์—๊ฒŒ ๋Œ๋ ค๋ฐ›์€ ํšŒ์› ์‹๋ณ„ ๋ฒˆํ˜ธ๋งŒ์œผ๋กœ ์œ ์ €๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์šฐ๋ฆฌ ์„œ๋ฒ„ ๋‚ด์—์„œ๋Š” ํ•ด๋‹น ์œ ์ € ์ •๋ณด๋ฅผ ์ง€๋‹Œ JWT ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋‹ค.


์นด์นด์˜ค ๋กœ๊ทธ์ธ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ

์ธ๊ฐ€ ์ฝ”๋“œ์™€ provider๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ ๊นŒ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ฒ”์œ„์ด์ง€๋งŒ, ๋‚˜๋Š” ์ผ๋‹จ ๊ณต๋ถ€๊ฒธ ํด๋ผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š”๊ฒธ ํ˜ผ์ž ์—ฐ์Šตํ•ด๋ณด์•˜๋‹ค.

๊ฒ€์ƒ‰ํ•˜๋ฉด ๋งŽ์ด ๋‚˜์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ KAKAO DEVELOPERS์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋“ฑ๋กํ•˜๊ณ ,

<https://kauth.kakao.com/oauth/authorize?response_type=code&redirect_uri=>{๋‚ด ์ฝœ๋ฐฑ URI}&client_id={๋‚ด ์นด์นด์˜ค ํด๋ผ์ด์–ธํŠธ ์•„์ด๋””}

ํ•ด๋‹น uri๋กœ ์ด๋™ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค.

![https://velog.velcdn.com/images%2Fozzing%2Fpost%2F8c55b7a0-8f99-49ae-8526-51301830f4f7%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fozzing%2Fpost%2F8c55b7a0-8f99-49ae-8526-51301830f4f7%2Fimage.png)

์œ„ ํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ URI์˜ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค.

{๋‚ด ์ฝœ๋ฐฑ URI}?code={์ธ๊ฐ€์ฝ”๋“œ}๋กœ ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์–ป์€ ํ•ด๋‹น ์ธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋กœ๊ทธ์ธ API์—์„œ https://kauth.kakao.com/oauth/token๋กœ POST๋ฅผ ๋‚ ๋ฆฌ๋ฉด, ์–ด์„ธ์Šคํ† ํฐ, ๋ฆฌํ”„๋ ˆ์‹œํ† ํฐ์„ ๋Œ๋ ค์ค€๋‹ค.

์ดํ›„ ๋Œ๋ ค ๋ฐ›์€ ๋‘๊ฐœ์˜ ํ† ํฐ์œผ๋กœ https://kapi.kakao.com/v2/user/me์— GET์„ ๋‚ ๋ฆฐ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์œ ์ €์˜ ์นด์นด์˜ค ํ”„๋กœํ•„์„ ๋Œ๋ ค์ฃผ๋Š”๋ฐ ์ด ๋•Œ ์นด์นด์˜ค์—์„œ ์ œ๊ณตํ•˜๋Š” ์œ ์ € ID๊ฐ€ ์œ„์—์„œ ๋งํ•œ ์œ ์ €์˜ ์‹๋ณ„๋ฒˆํ˜ธ ์—ญํ• ์ด๋‹ค.


๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…

๋“œ๋””์–ด ์–ป์€ ์œ ์ € ์‹๋ณ„๋ฒˆํ˜ธ๋กœ DB๋ฅผ ์กฐํšŒํ–ˆ๋‹ค.

์„œ๋ฒ„ ์˜ค๋ฅ˜๋ผ๋˜๊ฐ€ ํ•„์š”ํ•œ ๊ฐ’์ด ์—†๋‹ค๊ฑฐ๋‚˜ ๋ญ ๊ทธ๋Ÿฐ ๊ฑธ ์ œ์™ธํ•˜๊ณ  ํฌ๊ฒŒ ์„ธ๊ฐ€์ง€ response๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  1. ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์„ฑ๊ณต, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ ์ €๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ โ†’ ๋กœ๊ทธ์ธ ์„ฑ๊ณต
  2. ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์„ฑ๊ณต, ๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ ์ €๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ โ†’ ํšŒ์› ๊ฐ€์ž… ํ•„์š”
  3. ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์‹คํŒจ โ†’ ์ธ๊ฐ€ ์ฝ”๋“œ๋‚˜ ํ† ํฐ ๋ฌธ์ œ

๋จผ์ € ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ์œ ์ €์˜ JWT ํ† ํฐ (access, refresh)์„ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•˜์˜€๋‹ค.

๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ํšŒ์›๊ฐ€์ž…์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋Œ๋ ค์ฃผ์—ˆ๋‹ค.

์ด ์ •๋ณด์™€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋‹‰๋„ค์ž„ ๋“ฑ์„ ๊ฐ€์ง€๊ณ  ํšŒ์›๊ฐ€์ž… API์— ์š”์ฒญํ•œ๋‹ค.
ํšŒ์›๊ฐ€์ž…์— ์„ฑ๊ณตํ•˜๊ณ  ๋‚˜๋ฉด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JWT ํ† ํฐ(access, refresh)์„ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์•„์ด๋””(์ธ์Šคํƒ€ ์•„์ด๋”” ๋Š๋‚Œ)๋งŒ ์ค‘๋ณต์ฒดํฌ ํ•ด์ฃผ์—ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ๋กœ๊ทธ์ธ ์‹คํŒจ ๋ฉ”์‹œ์ง€๋ฅผ ๋Œ๋ ค์ค€๋‹ค.


๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ๋ฆฌํŒฉํ† ๋ง

์œ„์˜ ๋ฐฉ์‹์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ซ๊ฒŒ ๋˜์–ด, ๋กœ์ง์„ ์•Œ๋งž๊ฒŒ ๋ฐ”๊พธ๊ณ ์ž ํŒ€์— ๋ฆฌํŒฉํ† ๋ง์„ ์ œ์•ˆํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฐ™์ด ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๋‹ด๋‹นํ–ˆ๋˜ ํ”„๋ก ํŠธ ํŒ€์›์ด ํŒ€์„ ๋‚˜๊ฐ„ ๋ฐ”๋žŒ์—, ๋ฐ”๊พธ๊ณ  ์‹ถ์ง€๋งŒ ๊ณ ๋ฏผํ•˜๋˜ ์ค‘์— ๋‹ค๋ฅธ ํ”„๋ก ํŠธ ํŒ€์›์ด ์„ ๋œป ์ข‹๋‹ค๊ณ  ํ•ด์ฃผ์–ด์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

2๋ฒˆ ์ผ€์ด์Šค์—์„œ ํšŒ์› ๊ฐ€์ž…์ด ํ•„์š”ํ•  ๋•Œ ํด๋ผ์—๊ฒŒ ๊ณ ์Šค๋ž€ํžˆ ๋„˜๊ฒจ์คฌ๋˜ accesstoken, refreshtoken ์ด ๋‘ ๊ฐ€์ง€ ํ† ํฐ ์ •๋ณด๋Š” ๋…ธ์ถœ๋˜์„œ๋Š” ์•ˆ๋˜๋Š” ์ •๋ณด์˜€๊ณ , ์ด ๋•Œ๋ฌธ์— ๋กœ์ง ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค.

๊ธฐ์กด ๋กœ์ง

๊ฐ€์ž… ํšŒ์› ๋กœ๊ทธ์ธ ์„ฑ๊ณต -> ํšŒ์› ์ •๋ณด ๋ฐ˜ํ™˜

๋ฏธ๊ฐ€์ž… ํšŒ์› ๋กœ๊ทธ์ธ ์„ฑ๊ณต -> ์นด์นด์˜ค aT, rT ๋ฐ˜ํ™˜

๋กœ๊ทธ์ธ ์‹คํŒจ -> ์—๋Ÿฌ ์ฒ˜๋ฆฌ

๋ฐ”๋€ ๋กœ์ง

๊ฐ€์ž… ํšŒ์›๊ณผ ๋ฏธ๊ฐ€์ž… ํšŒ์›์„ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ , ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ ๋ฌด์กฐ๊ฑด ๊ฐ€์ž…๋œ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์˜€๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐ€์ž… ์ดํ›„์—๋„ ํ™ˆ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์ „ ์œ ์ €๊ฐ€ ์ง์ ‘ ์ž…๋ ฅํ•ด์•ผํ•˜๋Š” ์ •๋ณด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ†ตํ•ด ๋‘ ํšŒ์› ๊ทธ๋ฃน์„ ๊ตฌ๋ถ„ํ•˜์˜€๋‹ค.

๊ฐ€์ž… ํšŒ์› ๋กœ๊ทธ์ธ ์„ฑ๊ณต -> DB ์กฐํšŒ ์ดํ›„ ํšŒ์› ์ •๋ณด ๋ฐ˜ํ™˜ -> ํ™ˆ

๋ฏธ๊ฐ€์ž… ํšŒ์› ๋กœ๊ทธ์ธ ์„ฑ๊ณต -> DB์— ํšŒ์› ์ƒ์„ฑ ์ดํ›„ ํšŒ์› ์ •๋ณด ๋ฐ˜ํ™˜
-> ํ•„์ˆ˜ ์ž…๋ ฅ ๋‚ด์šฉ ์ž‘์„ฑ -> ํ™ˆ

์ด๋ฅผ ํ†ตํ•ด ๋‘ ํ† ํฐ์ด ๋…ธ์ถœ๋˜๋Š” ์ผ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋˜ ํšŒ์› ๊ฐ€์ž… ์ž์ฒด์˜ ๋กœ์ง์€ ํ•˜๋‚˜๋กœ ํ†ต์ผ ๋˜๋ฉด์„œ ์ค‘๋ณต ์ฝ”๋“œ๋„ ์‚ฌ๋ผ์กŒ๋‹ค.


JWT ํ† ํฐ

๋ชจ๋“  ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ํŽ˜์ด์ง€์—์„œ ๋งค๋ฒˆ JWT ์–ด์„ธ์Šค ํ† ํฐ์„ ํ—ค๋”๋กœ ๋„˜๊ธด๋‹ค. ์œ ์ €๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์–ธ์ œ๊นŒ์ง€๋‚˜ ์“ธ ์ˆœ ์—†๋‹ค.

๋งŒ๋ฃŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๊ฐ–๊ณ  ์žˆ๋˜ JWT ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ํ•จ๊ป˜ ์„œ๋ฒ„์— ๋„˜๊ฒจ์ฃผ๊ณ , ์„œ๋ฒ„์—์„  ์œ ํšจํ•œ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์ธ์ง€ ํ™•์ธํ•œ ๋’ค ๋‹ค์‹œ JWT ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ํ•„์š”ํ•œ๊ฑด JWT ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์•Œ๋ ค์ฃผ๋Š” ๋ฆฌ์Šคํฐ์Šค์™€, ์ด ๋•Œ ํ”„๋ก ํŠธ์—์„œ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ๊ณผ ํ•จ๊ป˜ JWT ํ† ํฐ ์žฌ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•˜๋„๋ก ํ•˜๋Š” API์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์žผ ๋™์•ˆ์—๋Š” ์–ด์„ธ์Šค ํ† ํฐ ๊ธฐ๊ฐ„์„ ๋Š˜๋ ค ๋‹จ์ˆœํžˆ ์ด๊ฒƒ๋งŒ์„ ๊ฐ€์ง€๊ณ  ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

๋ณดํ†ต ์–ด์„ธ์Šค ํ† ํฐ์€ 1์‹œ๊ฐ„, ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์€ 2์ฃผ ์ •๋„๋กœ ์„ค์ •ํ•˜๋Š” ๋“ฏ ํ•˜๋‹ค. ์•ฑ์žผ ๊ธฐ๊ฐ„๋™์•ˆ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด 7์ผ๋กœ ์„ค์ •ํ•ด ๋‘์—ˆ์ง€๋งŒ, ๋ฆด๋ฆฌ์ฆˆ ์‹œ์ ์—๋Š” ์ €๋ ‡๊ฒŒ ๋ฐ”๊พธ์–ด์•ผ ๊ฒ ๋‹ค.


JWT ํ† ํฐ ๋ฆฌํŒฉํ† ๋ง

์œ„์™€ ๊ฐ™์ด Access Token ๊ธฐ๊ฐ„์„ ๋ฌด์ž‘์ • ๋Š˜๋ ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์—์„œ ์ข‹์ง€ ์•Š๋‹ค. ๋˜, Refresh Token์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ์ž๋™ ๋กœ๊ทธ์ธ ๊ธฐ๊ฐ„์„ ์—ฐ์žฅํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ, Access Token์ด ๋งŒ๋ฃŒ๋˜๋ฉด ํ”„๋ก ํŠธ์—์„œ Refresh Token๊ณผ ํ•จ๊ป˜ ์š”์ฒญํ•˜๋Š” ๋ฆฌํ”„๋ ˆ์‹œ API๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. ๋ฐ›์€ Refresh Token์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์œ ํšจํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ๊ธˆ ํ•ด๋‹น ์œ ์ €์˜ ID๋กœ ๋‘ ๊ฐ€์ง€ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜์—ฌ ๋Œ๋ ค์ฃผ์—ˆ๋‹ค.

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