팝업에서 오늘 보지 않기, 로그인시 로그인상태유지, 구글추천광고에 쿠키를 분석하여 띄우는경우에 사용하는 보조적인 목적으로 사용 된다. 보안적인 목적으로는 사용하지 않는다
표면적인 기능은 서버에서 클라이언트의 데이터를 저장하는 방법중 하나이다.
사용자가 삭제하지 않는다면 계속해서 유지하므로 장시간 보존해야 하는 정보( 로그인 정보, 카드정보 등등)저장에 적합.
Set-Cokkie, Cookie 프로퍼티를 통해 전달.
쿠기는 key- value 형태로 구성되어있고 쿠키 전송을 위한, 쿠키보존을 위한 여러가지 옵션들이 있다.
Domain
Path
MaxAge or Expires option
Secure
HttpOnly
SameSite
Set-Cookie':[
'cookie=yummy',
'Secure=Secure; Secure',
'HttpOnly=HttpOnly; HttpOnly',
'Path=Path; Path=/cookie',
'Doamin=Domain; Domain=codestates.com'
]
http무상태성
을 유지하면서 통신할 수 있다.클라이언트가 웹페이지에 로그인을 했다면 서버는 클라이언트가 로그인에 성공했다는걸 알고 있어야 하고 클라이언트는 로그인에 성공했다는걸 증명할 수단을 가지고 있어야 한다.
세션 : 사용자가 인증에 성공한 상태를 말함.
세션상태라면 서버는 DB나 in-memory에 정보를 저장한다.
쿠키의 단점과 마찬가지
로 Session ID를 담고있는 쿠키가 해킹되면 해커는 서버와 통신이 가능해진다.로그아웃
시에는 서버에서 session정보를 삭제하고 클라이언트에서는 cookie를 갱신, 삭제한다.
session은 secret옵션의 비밀키를 이용해 session ID를 암호하여 클라이언트에 전달한다.
서버에서 로그인정보를 가져있기 때문에 로그인이 되어있다면 어느 디바이스에서 접속하더라도 접속되어있는 상태인지 알 수 있고, 서버측에서 일방적으로 로그인을 끊을 수 있다.
Node.js에서는 express-session 모듈이 존재하고 Session을 위한 미들웨어 이다.
https://github.com/expressjs/session#reqsession
클라이언트는 발급받은 JWT를 local storage, cookie, state등에 저장을 한다.
local storage는 XSS를 방어할수 없으므로 보안상 약하다.
cookie는 Http only 옵션과 Secure(https)옵션
이 켜져있을때는 쿠키값 읽기를 막을수 있으므로 안전하다.
CSRF 공격을 염두하여 Refresh 토큰은 cookie에 저장하고 access토큰은 변수에 저장한다.
access토큰이 탈취되면 유저정보는 탈취 당한다 따라서 access토큰은 만료시간을 짧게 가져가서 보안을 높히고 cookie에저장된 refresh토큰은 탈취할 방법이 없으므로 안전하다.
토큰을 기반
으로 직접 서버에서 인증과 관련된 로직을 처리할 필요없이 인증을 중개하는 외부 서버를 이용한 Oauth 기술로 내서버가 아닌 외부서버에서 사용자 인증처리를 맡기는 것을 말함.
Resource Owner: 사용자이며 정보 제공자이기도 하기 때문에 Resource Owner라고 합니다.
Client: Resource Owner를 대신하여 보호된 리소스에 액세스하는 애플리케이션입니다.
Local Server: Client의 요청을 수락하고 응답할 수 있는 서버입니다.
Resource Server: 사용자의 정보를 저장하고 있는 서버입니다.
Authorization Server: 인증을 담당하고 있는 서버입니다. Access Token을 발급하는 인증 서버입니다.
Authorization Grant: Client가 Access Token을 얻는 방법을 의미합니다. 다음과 같은 방법들이 주로 사용됩니다.
Authorization Code Grant Type
Refresh Token Grant Type
Authorization Code: Authorization Grant의 한 타입으로 Access Token을 발급받기 위한 Code를 의미합니다.
Access Token: 보호된 리소스에 액세스하는 데 사용되는 인증 토큰입니다. 이 Access Token으로 이제 Resource Server에 접근할 수 있습니다.
Refresh Token: 발급받은 Access Token이 만료될 시 Refresh Token을 통해 새로운 Access Token을 받급받을 수 있습니다.
https://jwt.io/
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie
https://www.oauth.com/oauth2-servers/accessing-data/obtaining-an-access-token/