[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] โœจ์•ผ๊ฐ„์ž์œจํ•™์Šต๋ฐ˜โœจ Cookie/Session , Token , OAuth2.0 ๊ณผ์ œ ์ธ์ฆ ํ๋ฆ„ ๊ทธ๋ฆผ์œผ๋กœ ์ •๋ฆฌ

JiEunยท2023๋…„ 5์›” 4์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

์ด๋ฒˆ ์ข…ํ•ฉ ํ€ด์ฆˆ์™€ ๊ณผ์ œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ข‹์ง€ ๋ชปํ•ด ์•ผ๊ฐ„์ž์œจ ํ•™์Šต๋ฐ˜์— ์„ ์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
Cookie/Session ํŠœํ† ๋ฆฌ์–ผ, Token ๊ณผ์ œ, OAuth2.0 ๊ณผ์ œ์˜ ์ธ์ฆ ํ๋ฆ„์„ ๊ทธ๋ฆผ์œผ๋กœ ์ •๋ฆฌํ•˜์—ฌ ๋ธ”๋กœ๊น… ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.


๐Ÿ“ Cookie/Session , Token , OAuth2.0 ๊ณผ์ œ ์ธ์ฆ ํ๋ฆ„ ๊ทธ๋ฆผ์œผ๋กœ ์ •๋ฆฌ

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ

  • ์ฟ ํ‚ค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•œ๋‹ค.
  • ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•œ ์„ธ์…˜์ธ์ฆ ๊ณผ์ •์— ๋Œ€ํ•ด ์ดํ•ดํ•œ๋‹ค.
  • ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•œ๋‹ค.
  • OAuth ์ธ์ฆ์˜ ์ฃผ์š” ์šฉ์–ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ธฐ์–ตํ•œ๋‹ค.

๋กœ๊ทธ์ธ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ Cookie/Session , Token , OAuth2.0 ๋ฐฉ์‹์œผ๋กœ ๊ณ„์ • ์ €์žฅ ๋ฐฉ๋ฒ•์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

๐Ÿช ์ฟ ํ‚ค(Cookie)

1. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
(์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋กœ๊ทธ์ธ ์ €์žฅ ์ฒดํฌ ์—ฌ๋ถ€)

2. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ํ™•์ธํ•˜๊ณ  ๋กœ๊ทธ์ธ ์š”์ฒญ ์ฒ˜๋ฆฌํ•ด์„œ ์‘๋‹ตํ•ด ์ค€๋‹ค.

  • ์š”์ฒญ์œผ๋กœ ์ „๋‹ฌ ๋ฐ›์€ ์ •๋ณด๊ฐ€ ํšŒ์›๊ฐ€์ž… ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
  • ํšŒ์›์ธ ๊ฒฝ์šฐ ์‘๋‹ต์— ์ฟ ํ‚ค์™€ ํšŒ์› ์ •๋ณด ๋‹ด์•„ ์ „๋‹ฌ
    3. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—๊ฒŒ ์‘๋‹ต ๋ฐ›์•„ React ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

4. ํด๋ผ์ด์–ธํŠธ๋Š” ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์œผ๋กœ Mypage๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

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

5. ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์„œ๋ฒ„์— ๋กœ๊ทธ์•„์›ƒ ์š”์ฒญ ๋ณด๋‚ธ๋‹ค.

6. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›์€ ๋กœ๊ทธ์•„์›ƒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ์ฟ ํ‚ค ์‚ญ์ œํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ต ๋ณด๋‚ธ๋‹ค.

7. ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต์ด ์ž˜ ๋Œ์•„์˜ค๋ฉด React ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.(์ƒํƒœ ๋น„์›€)

8. ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒํƒœ๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜์—ˆ๊ธฐ์— ํ™”๋ฉด์„ ์กฐ๊ฑด๋ถ€ ๋ฆฌ๋ Œ๋”๋ง์œผ๋กœ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œ ํ•œ๋‹ค.

  • ์ฟ ํ‚ค๋Š” http์˜ ๋ฌด์ƒํƒœ์„ฑ์„ ๋ณด์•ˆํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด์ง€ ์ฟ ํ‚ค ์ž์ œ๋Š” ์ธ์ฆ์ด ์•„๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์กด์žฌํ•œ๋‹ค.

๐Ÿ“ ์„ธ์…˜(Session)


์„ธ์…˜์€ ์ฟ ํ‚ค์—์„œ 2, 6๋ฒˆ์—์„œ ์ „๋‹ฌ ํ•˜๋Š” ์ฟ ํ‚ค๋ฅผ ์„ธ์…˜์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฑฐ ๋ฟ์ด๋‹ค.

  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ €์ธ์ง€ ์„œ๋ฒ„์—์„œ ์ถ”๊ฐ€๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ์„ฑ์ด ๋†’์•„์ง€์ง€๋งŒ ์„œ๋ฒ„์— ๋ถ€๋‹ด์„ ์ค€๋‹ค.

๐Ÿช™ ํ† ํฐ(Token)


1. ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์•„ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
2. ์„œ๋ฒ„๋Š” DB์— ์ €์žฅ๋œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ํ™•์ธํ•œ๋‹ค.
3. ์ธ์ฆ ์„ฑ๊ณต ์‹œ ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ/๊ถŒํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์˜ ๋น„๋ฐ€ ํ‚ค์™€ ํ•จ๊ป˜ ํ„ฐํฐ์œผ๋กœ ์•”ํ˜ธํ™” ํ•œ๋‹ค.(ํ† ํฐ ์ƒ์„ฑ + ์„œ๋ฒ„ ๋น„๋ฐ€ํ‚ค)
4. ์ƒ์„ฑ๋œ ํ† ํฐ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

  • HTTP์—์„œ ์ธ์ฆ ํ† ํฐ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ—ค๋”์ธ Authorizationํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜
  • ์ฟ ํ‚ค๋กœ ์ „๋‹ฌํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  1. ํด๋ผ์ด์–ธํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ์„ ์ €์žฅํ•œ๋‹ค.
  • ์ €์žฅํ•˜๋Š” ์œ„์น˜ (Local Storage, Session Storage, Cookie ๋“ฑ ๋‹ค์–‘ํ•จ - ๊ฐœ๋ฐœํ•˜๋Š” ์„œ๋น„์Šค ๋ชฉ์ ์— ๋งž์ถฐ ์ž‘์—…)
  1. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ ํ† ํฐ์„ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.
  • ํ† ํฐ์„ ์ „๋‹ฌํ•  ๋•Œ๋„ Authorizationํ—ค๋” ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ฟ ํ‚ค ์‚ฌ์šฉ
  1. ์„œ๋ฒ„๋Š” ์ „๋‹ฌ ๋ฐ›์€ ํ† ํฐ์„ ์„œ๋ฒ„์˜ ๋น„๋ฐ€ ํ‚ค๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆํ•œ๋‹ค.
    (ํ† ํฐ์ด ๊ฐ€์งœ์ธ์ง€ ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ฌ๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.)
  2. ํ† ํฐ ์œ ํšจํ•  ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ „์†กํ•œ๋‹ค.
  • ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๊ณ ์•ˆ๋˜์—ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•œ๋‹ค.
  • ํ† ํฐ ๋˜ํ•œ ์™„๋ฒฝํ•œ ๋ณด์•ˆ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค. ์ธ์ฆ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ํƒˆ์ทจ๋˜์–ด๋„ ํ† ๊ทผ์„ ๊ฐ•์ œ ๋งŒ๋ฃŒํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋งŒํผ ์•”ํ˜ธํ™” ๊ณผ์ •๋„ ๊ธธ์–ด์ง€๊ณ  ํ† ํฐ์˜ ํฌ๊ธฐ๋„ ์ปค์ ธ ๋„คํŠธ์›Œํฌ ๋น„์šฉ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๐Ÿค OAuth(์ธ์ฆ์„ ์ค‘๊ฐœํ•ด ์ฃผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜)

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ ์ ‘์†์„ ํ•œ๋‹ค.
  2. ํด๋ผ์ด์–ธํŠธ๋Š” Github Authorization ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  3. Github์—์„œ ๊ถŒํ•œ ํ—ˆ๋ฝ ํŽ˜์ด์ง€์—์„œ ํ—ˆ๋ฝ ํŽ˜์ด์ง€๋ฅผ ํด๋ฆญํ•œ๋‹ค.
  4. Github๋Š” ํด๋ผ์ด์–ธํŠธ์— Authorization code๋ฅผ ์ „๋‹ฌํ•ด ์ค€๋‹ค.
  5. ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ›์•„์˜จ Authorization code๋ฅผ ์„œ๋ฒ„์˜ /callback ์—”๋“œํฌ์ธํŠธ๋กœ ์ „๋‹ฌํ•ด ์„œ๋ฒ„์—์„œ
  6. Github Authorization ์„œ๋ฒ„์—๊ฒŒ Access token ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•œ๋‹ค.
  7. Github Authorization๋Š” ์š”์ฒญ ๋ฐ›์€ Access token์„ ์ „๋‹ฌํ•œ๋‹ค.
  8. Access token ๋ฐœ๊ธ‰๋ฐ›์€ token์„ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•œ๋‹ค.
  9. ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐœ๊ธ‰ ๋ฐ›์€ token์œผ๋กœ ์กฐ๊ฑด๋ถ€ ์ฒ˜๋ฆฌํ•ด ๋กœ๊ทธ์ธ ํ›„, Mypage ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ณ 
  10. Access token์„ ์ด์šฉํ•ด /userinfo๋กœ ์š”์ฒญํ•œ๋‹ค.
    11, 12. 13. ๋กœ์ปฌ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค์ธ serverResource์™€ Github Resource ์„œ๋ฒ„์— ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์ธ githubUserData๊ฐ€ ์‘๋‹ต์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

์ž˜ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„

  • ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑ, ์‚ญ์ œํ•˜๊ณ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ถ„์„ ์ž˜ ๋ชฐ๋ž๋‹ค.
    - res.cookie, res.clearCookie, process.evn.๋ณ€์ˆ˜๋ช…

์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„

  • .evn ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๋ชฐ๋ผ์„œ ํ—ค๋ฉจ๋˜ ๊ฑฐ ๊ฐ™๋‹ค.
    - React์˜ ๊ฒฝ์šฐ process.env.React_APP_๋ณ€์ˆ˜๋ช…์œผ๋กœ ์ž‘์„ฑํ•ด ์ค˜์•ผํ•œ๋‹ค.
    - React๋Š” require('dotenv').config();
  • ๋กœ๊ทธ์•„์›ƒ ํ•˜๋Š” ๊ฒฝ์šฐ ํ† ํฐ์„ ์‚ญ์ œํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— post๊ฐ€ ์•„๋‹Œ delete๋กœ ์ฒ˜๋ฆฌํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
    - ์ „๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” data๋กœ ๊ฐ์‹ธ์ค˜์•ผํ•œ๋‹ค. data:{accessToken}
axios.delete('http://localhost:4000/logout', {data:{accessToken}})

โœ๏ธ ๋Š๋‚€์ 

Cookie/Session , Token , OAuth2.0 ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋น„์Šทํ•˜๋ฉด์„œ ๋‹ฌ๋ž๋˜ ๊ฑฐ ๊ฐ™๋‹ค.
์ด๋ฒˆ ๊ณ„๊ธฐ๋กœ ๋ฐฑ์—”๋“œ์˜ ํ๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๊ณ  ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ „ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•ด ๋‘์–ด๋„ ๊ดœ์ฐฎ๋‹ค ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์•„์ง ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•„ ์ข€ ๋” ๊ณต๋ถ€ํ•ด์•ผ ๋ด์•ผ๊ฒ ๋‹ค.
(๋„ˆ๋ฌด ์–ด๋ ค์›Œ....)

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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