๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

CS/๋ณด์•ˆ

์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ vs ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ, ๊ทธ๋ฆฌ๊ณ  ์ฟ ํ‚ค๐Ÿช

 

์„ธ์…˜? ํ† ํฐ? ์ฟ ํ‚ค? 

์ธ์ฆ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฐœ๋…๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

HTTP๋Š” ๋ฌด์ƒํƒœ!

์šฐ์„  HTTP ํ”„๋กœํ† ์ฝœ์ด ๋ฌด์ƒํƒœ(stateless)๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HTTP ํ”„๋กœํ† ์ฝœ๋กœ ์›น์„ ํ†ตํ•ด ํ†ต์‹ ํ•ด์•ผ ํ•  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋‚ด๋Š” ๊ฐ๊ฐ์˜ ์š”์ฒญ์€ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค.

์š”์ฒญ์ด ๋๋‚˜๋ฉด ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฌ๊ณ , ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฐ์ง€ ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

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

์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹๊ณผ ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์˜ ๋กœ๊ทธ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์„ธ์…˜(session)

์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(์˜ˆ๋ฅผ ๋“ค๋ฉด ์œ ์ €๋ช…, ๋น„๋ฐ€๋ฒˆํ˜ธ)๋ฅผ ๋‹ด์•„์„œ ์„œ๋ฒ„๋กœ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ์„ธ์…˜ DB์— ์„ธ์…˜ ID๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ๊ทธ์ธ ์ดํ›„ ์š”์ฒญ๋งˆ๋‹ค ์„ธ์…˜ ID๋ฅผ ํ•จ๊ป˜ ์ „์†กํ•œ๋‹ค.
  4. ์„œ๋ฒ„๋Š” ์„ธ์…˜ DB์—์„œ ์„ธ์…˜ ID๋ฅผ ์ฐพ์•„์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์„ธ์…˜์€ ์„ธ์…˜ ID๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(์ฃผ๋กœ Redis)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ธ์ฆ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์›๋„ ๋Š˜์–ด๋‚˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ•„์š”์— ๋”ฐ๋ผ ์„œ๋น„์Šค์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋น„์ •์ƒ์ ์ธ ํ™œ๋™์„ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ
  • ๋น„์ •์ƒ์ ์ธ ์œ„์น˜์—์„œ ๋กœ๊ทธ์ธ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ์„ธ์…˜ ๋„์šฉ์ด ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ
  • ๋กœ๊ทธ์ธ ๋œ ๋””๋ฐ”์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์›ํ•˜์ง€ ์•Š๋Š” ๋””๋ฐ”์ด์Šค์—์„œ ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ
  • ๊ณ„์ • ๊ณต์œ  ์ˆซ์ž ์ œํ•œ (๋„ทํ”Œ๋ฆญ์Šค์ฒ˜๋Ÿผ)

 

ํ† ํฐ(token)

ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. JWT(JSON Web Token)์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(์˜ˆ๋ฅผ ๋“ค๋ฉด ์œ ์ €๋ช…, ๋น„๋ฐ€๋ฒˆํ˜ธ)๋ฅผ ๋‹ด์•„์„œ ์„œ๋ฒ„๋กœ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ์ผ์น˜ํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด JWT๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ๊ทธ์ธ ์ดํ›„ ์š”์ฒญ๋งˆ๋‹ค JWT๋ฅผ ํ•จ๊ป˜ ์ „์†กํ•œ๋‹ค.
  4. ์„œ๋ฒ„๋Š” JWT๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ์œ ํšจํ•œ ํ† ํฐ์ธ ๊ฒฝ์šฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์€ ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ† ํฐ ์ž์ฒด์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ์„œ๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ํ† ํฐ์„ ๊ฒ€์ฆํ•ด์„œ ๊ทธ ์•ˆ์— ๋‹ด๊ธด ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ JWT ๊ฐ™์€ ํ† ํฐ์€ ์•”ํ˜ธํ™”๋œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋‚˜ ํŽ˜์ด๋กœ๋“œ์— ๋‹ด๊ธด ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋‹ด์œผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

 

 

์ฟ ํ‚ค(cookie)

๊ทธ๋Ÿผ ์ฟ ํ‚ค๋Š” ๋ญ˜๊นŒ์š”?

์ฟ ํ‚ค๋Š” ์„ธ์…˜์ด๋‚˜ ํ† ํฐ ๊ฐ™์€ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋งค๊ฐœ์ฒด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. 

๋งŒ์•ฝ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด JWT๋ฅผ ์ „๋‹ฌํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ๋กœ๊ทธ์ธ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ  JWT๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Set-Cookie ํ—ค๋”์— ๋‹ด์•„์„œ ์ „๋‹ฌํ•œ๋‹ค.
  3. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋กœ๊ทธ์ธ ์ดํ›„ ์š”์ฒญ๋งˆ๋‹ค Cookie ํ—ค๋”์— JWT๋ฅผ ํฌํ•จํ•ด์„œ ์ „์†กํ•œ๋‹ค.
  4. ์„œ๋ฒ„๋Š” JWT๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ์œ ํšจํ•œ ํ† ํฐ์ธ ๊ฒฝ์šฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ด๋Š” JWT๊ฐ€ ์•„๋‹ˆ๋ผ ์„ธ์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„์—์„œ๋Š” ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ผ ๋•Œ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ, ๋งŒ๋ฃŒ์‹œ๊ฐ„ ๋“ฑ์„ ์„ค์ •ํ•ด์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ € ์ŠคํŽ™์ด๊ธฐ ๋•Œ๋ฌธ์— ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

iOS, Android์™€ ๊ฐ™์€ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์—์„œ๋Š” ์ฟ ํ‚ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Ÿด ๋•Œ๋Š” ์š”์ฒญ ํ—ค๋”์— Authorization: <type> <credentials> ํ˜•์‹์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP ํ”„๋กœํ† ์ฝœ์—์„œ๋Š” Authorization ํ—ค๋”๊ฐ€ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์œ„ํ•œ ํ‘œ์ค€ ์œ„์น˜์ด๊ณ , ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์ผ ๊ฒฝ์šฐ type์— Bearer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. [์ฐธ๊ณ 1] [์ฐธ๊ณ 2]

 

โœš Cookie ์™€ Authorization ์˜ ์ฐจ์ด๋Š”?

Cookie์™€ Authorization ํ—ค๋”๋Š” ์ธ์ฆ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋งค๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ๋‘˜์˜ ์ฐจ์ด๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Cookie

  • ์›น ๋ธŒ๋ผ์šฐ์ €์—๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ํฌํ•จํ•ด์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • axios : { withCredentials: true } ์˜ต์…˜ ์ถ”๊ฐ€
    • Fetch API : { credentials: "include" } ์˜ต์…˜ ์ถ”๊ฐ€
  • ๋งค ์š”์ฒญ๋งˆ๋‹ค ์ธ์ฆ ์ •๋ณด๊ฐ€ ์ž๋™์œผ๋กœ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— CSRF ๊ณต๊ฒฉ์˜ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๐Ÿ‘‰ CSRF ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, Referer Header ๊ฒ€์ฆ์„ ์ถ”๊ฐ€ํ•˜์—ฌ CSRF ๊ณต๊ฒฉ์„ ๋ฐฉ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Javascript ์ƒ์—์„œ document.cookie๋กœ ์ ‘๊ทผํ•˜์—ฌ XSS ๊ณต๊ฒฉ์˜ ์œ„ํ—˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๐Ÿ‘‰ ์„œ๋ฒ„ ์ธก์—์„œ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•  ๋•Œ httpOnly ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ Javascript๋กœ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Authorization

  • ๋งค ์š”์ฒญ๋งˆ๋‹ค ์ธ์ฆ ์ •๋ณด๊ฐ€ ์ž๋™์œผ๋กœ ํฌํ•จ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— CSRF ๊ณต๊ฒฉ์—๋„ ๋น„๊ต์  ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€์‹  ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ธ์ฆ ์ •๋ณด๋ฅผ ์–ด๋””์— ๋ณด๊ด€ํ•  ์ง€ ๊ณ ๋ฏผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์ผ ๊ฒฝ์šฐ MDN์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€๋‚˜ ์„ธ์…˜์Šคํ† ๋ฆฌ์ง€๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค๋งŒ, Javascript ์ƒ์—์„œ document.localStorage, document.sessionStorage๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ XSS ๊ณต๊ฒฉ์˜ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๐Ÿ‘‰ Access Token(์ดํ•˜ AT)์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  Refresh Token(์ดํ•˜ RT)๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๋ฉด, XSS ๊ณต๊ฒฉ์„ ํ”ผํ•˜๋ฉด์„œ๋„ ์ •์ƒ์ ์ธ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์›ํ™œํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [์ฐธ๊ณ ]
      • ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ํ†ตํ•ด AT, RT๋ฅผ ๋ชจ๋‘ ๋ฐœ๊ธ‰ ๋ฐ›์Šต๋‹ˆ๋‹ค.
      • AT๋Š” ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ๋ฐ›์•„์„œ (JS ๋ณ€์ˆ˜ ๋“ฑ์œผ๋กœ) ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , ๋กœ๊ทธ์ธ ์ดํ›„ ์„œ๋ฒ„ ์š”์ฒญ์‹œ Authorization ํ—ค๋”์— ๋‹ด์•„์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
      • RT๋Š” ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ์ƒ๋Œ€์ ์œผ๋กœ ๊ธธ๊ฒŒ ์„ค์ •ํ•œ ํ›„ httpOnly ์ฟ ํ‚ค๋กœ ๋ฐ›์•„์„œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
      • AT๊ฐ€ ๋งŒ๋ฃŒ๋˜๋ฉด RT๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด AT๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต ๋ณธ๋ฌธ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.
      • RT๋„ ๋งŒ๋ฃŒ๋˜๋ฉด ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

์ •๋ฆฌ

  ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ
์žฅ์  - ๋ณด์•ˆ์„ ์œ„ํ•œ ์„œ๋น„์Šค ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•จ. - ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์›์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ.
๋‹จ์  - ์„ธ์…˜์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์›์ด ํ•„์š”ํ•จ. - ๋ณด์•ˆ์„ ์œ„ํ•œ ์„œ๋น„์Šค ํ™•์žฅ์€ ์–ด๋ ค์›€.
- ํŽ˜์ด๋กœ๋“œ์— ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์ง€ ์•Š๋„๋ก ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•จ.

 

  Cookie Authorization Header
ํŠน์ง• - ์›น ๋ธŒ๋ผ์šฐ์ €์—๋งŒ ๋™์ž‘ํ•จ.
- ์„œ๋ฒ„์— ์š”์ฒญ์‹œ ์ธ์ฆ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.
- ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ.
- ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์ผ ๊ฒฝ์šฐ Bearer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•จ.
์žฅ์  - ์›น ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ ์ธก์—์„œ ์ธ์ฆ ์ •๋ณด ๋ณด๊ด€ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋กœ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋จ. - ์ธ์ฆ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ CSRF ๊ณต๊ฒฉ์— ๋น„๊ต์  ์•ˆ์ „ํ•จ.
๋‹จ์  - CSRF, XSS ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ฐฉ์–ด๊ฐ€ ํ•„์š”ํ•จ.  - ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ ์ธก์—์„œ ์ธ์ฆ ์ •๋ณด ๋ณด๊ด€ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•จ.
- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์ผ ๋•Œ ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€๋‚˜ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ XSS ๊ณต๊ฒฉ ์œ„ํ—˜์„ฑ ์žˆ์Œ.

 

 

์ฐธ๊ณ 

https://youtu.be/tosLBcAX1vk?si=uO3RaiNXDx6ZJy8B

https://www.cloudflare.com/ko-kr/learning/access-management/token-based-authentication/

https://docs.tosspayments.com/resources/glossary/bearer-auth

https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies

https://velog.io/@gwanuuoo/CSRF-%EA%B3%B5%EA%B2%A9%EA%B3%BC-%EB%B0%A9%EC%96%B4-%EA%B8%B0%EB%B2%95

https://hasura.io/blog/best-practices-of-using-jwt-with-graphql

https://medium.com/@uk960214/refresh-token-%EB%8F%84%EC%9E%85%EA%B8%B0-f12-dd79de9fb0f0