2020-11-20
쿠키와 인증(Auth)
쿠키란?
📌 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억할 수 있는 기술
서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각
동일한 서버에 재 요청 시 저장된 데이터를 함께 전송
쿠키는 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용 (사용자의로그인 상태를 유지)
목적
세션 관리
서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등등의 정보를 관리함
개인화
사용자 선호, 테마 등의 세팅
트래킹
사용자의 행동을 기록하고 분석하는 용도
쿠키 생성하기
HTTP 응답 헤더의 Set-Cookie
key에 값을 설정할 수 있다.
javascript
function(req, res) {
res.writeHead(200, {
'Set-Cookie': ['yummy_cookie=choco', 'tasty_cookie=strawberry'],
})
}
function(req, res) {
res.writeHead(200, {
'Set-Cookie': ['yummy_cookie=choco', 'tasty_cookie=strawberry'],
})
}
쿠키 가져오기
javascript
function(req, res) {
console.log(res.headers.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
javascript
'Set-Cookie': ['hello_secure_cookie=hello-secure; Secure'],
'Set-Cookie': ['hello_secure_cookie=hello-secure; Secure'],
Secure 쿠키는 HTTPS 프로토콜 상에서 암호화된 요청일 경우에만 전송된다. 하지만 이플래그가 실질적인 보안을 제공하는 것은 아니다.
HttpOnly
javascript
'Set-Cookie': ['hello_http_only=hello-http; HttpOnly'],
'Set-Cookie': ['hello_http_only=hello-http; HttpOnly'],
HttpOnly 쿠키는 JavaScript의 document.cookie API로 접근할 수 없다. 서버에게 전송되기만 한다.
Path & Domain
path
path=/subpath
이런 식으로 쿠키를 전송하기 위하여 요청되는 URL 내에 반드시 존재해야 하는 URL 경로를 지정할 수 있다.
domain
javascript
'Set-Cookie': ['hello_domain=hello-domain; Domain=o2.org'],
'Set-Cookie': ['hello_domain=hello-domain; Domain=o2.org'],
이렇게 지정하면 subdomain.o2.org
등등의 모든 서브 도메인에 대해서도 쿠키가 저장되게 된다.