๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

201120

ยท ์•ฝ 3๋ถ„

์ฟ ํ‚ค์™€ ์ธ์ฆ(Auth)#

์ฟ ํ‚ค๋ž€?#

๐Ÿ“Œ ์ƒํƒœ๊ฐ€ ์—†๋Š”(stateless) HTTP ํ”„๋กœํ† ์ฝœ์—์„œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ 

  • ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „์†กํ•˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ

  • ๋™์ผํ•œ ์„œ๋ฒ„์— ์žฌ ์š”์ฒญ ์‹œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ „์†ก

  • ์ฟ ํ‚ค๋Š” ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋“ค์–ด์™”๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ (์‚ฌ์šฉ์ž์˜๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€)

๋ชฉ์ #

  • ์„ธ์…˜ ๊ด€๋ฆฌ

    ์„œ๋ฒ„์— ์ €์žฅํ•ด์•ผ ํ•  ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๊ฒŒ์ž„ ์Šค์ฝ”์–ด ๋“ฑ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•จ

  • ๊ฐœ์ธํ™”

    ์‚ฌ์šฉ์ž ์„ ํ˜ธ, ํ…Œ๋งˆ ๋“ฑ์˜ ์„ธํŒ…

  • ํŠธ๋ž˜ํ‚น

    ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์„ ๊ธฐ๋กํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ์šฉ๋„

์ฟ ํ‚ค ์ƒ์„ฑํ•˜๊ธฐ#

HTTP ์‘๋‹ต ํ—ค๋”์˜ Set-Cookie key์— ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

function(req, res) {  res.writeHead(200, {    'Set-Cookie': ['yummy_cookie=choco', 'tasty_cookie=strawberry'],  })}

์ฟ ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ#

function(req, res) {  console.log(res.headers.cookie); // ['yummy_cookie=choco', 'tasty_cookie=strawberry']}

Session vs Persistent#

Session Cookie#

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ ์‚ญ์ œ ๋จ.

session storage๋Š” ๋ธŒ๋ผ์šฐ์ € ํƒญ์ด ์ข…๋ฃŒ๋˜๋ฉด ์‚ญ์ œ๋˜๋Š” ๋ฐ˜๋ฉด, ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ € ํƒญ ๊ฐ„์—๋„ ๊ณต์œ ๋˜์–ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜์–ด์•ผ ์‚ญ์ œ๋œ๋‹ค. ์ฐธ์กฐ

Persistent Cookie#

  • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•ด๋„ ์‚ฌ์šฉ์ž์˜ ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅ.

  • ์‚ญ์ œ ์‹œ๊ธฐ : Max-Age ์†์„ฑ์— ๋ช…์‹œ๋œ ๊ธฐ๊ฐ„ ์ดํ›„์—, ๋˜๋Š” Expires ์†์„ฑ์— ๋ช…์‹œ๋œ๋‚ ์งœ์— ์‚ญ์ œ, ๋˜๋Š” ์ง์ ‘ ์‚ญ์ œ

Secure & HttpOnly#

Secure#

'Set-Cookie': ['hello_secure_cookie=hello-secure; Secure'],

Secure ์ฟ ํ‚ค๋Š” HTTPS ํ”„๋กœํ† ์ฝœ ์ƒ์—์„œ ์•”ํ˜ธํ™”๋œ ์š”์ฒญ์ผ ๊ฒฝ์šฐ์—๋งŒ ์ „์†ก๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ดํ”Œ๋ž˜๊ทธ๊ฐ€ ์‹ค์งˆ์ ์ธ ๋ณด์•ˆ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

HttpOnly#

'Set-Cookie': ['hello_http_only=hello-http; HttpOnly'],

HttpOnly ์ฟ ํ‚ค๋Š” JavaScript์˜ document.cookie API๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ์„œ๋ฒ„์—๊ฒŒ ์ „์†ก๋˜๊ธฐ๋งŒ ํ•œ๋‹ค.

Path & Domain#

path#

path=/subpath ์ด๋Ÿฐ ์‹์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์š”์ฒญ๋˜๋Š” URL ๋‚ด์— ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•˜๋Š” URL ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

domain#

'Set-Cookie': ['hello_domain=hello-domain; Domain=o2.org'],

์ด๋ ‡๊ฒŒ ์ง€์ •ํ•˜๋ฉด subdomain.o2.org ๋“ฑ๋“ฑ์˜ ๋ชจ๋“  ์„œ๋ธŒ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด์„œ๋„ ์ฟ ํ‚ค๊ฐ€ ์ €์žฅ๋˜๊ฒŒ ๋œ๋‹ค.