HTTP + SECURE
암호화된 데이터를 주고받는다.
인증서 정보를 확인할 수 있다. 브라우저는 인증서에서 해당 인증서를 발급한 CA 정보를 확인하고 인증된 CA가 발급한 인증서가 아니라면 아래와 경고창을 띄워 서버와 연결이 안전하지 않다는 화면을 보여줍니다.
Domain
쿠키 옵션에서 도메인은 포트 및 서브 도메인 정보,세부 경로를 포함하지 않습니다.
만약쿠키 옵션에서 도메인 정보가 존재한다면 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있습니다.
Path
Path옵션의 특징은 설정된 path를 전부 만족하는 경우 요청하는 Path가 추가로 더 존재하더라도 쿠키를 서버에 전송할 수 있습니다.
MaxAge or Expires
쿠키가 유효한 기간을 정하는 옵션입니다.
Secure
만약 해당옵션이 true
로 설정된 경우, HTTPS 프로토콜을 이용하여 통신하는 경우에만 쿠키를 전송할 수 있다.
HttpOnly
자바스크립트에서 브라우저의 쿠키에 접근 여부를 결정합니다.
만약 해당옵션이 true
로 설정된 경우, 자바스크립트에서는 쿠키에 접근이 불가합니다.
만약 이옵션이 false
인 경우 자바스크립트에서 쿠키에 접근이 가능하므로 XSS공격에 취약합니다.
SameSite
Cross-Origin 요청을 받은 경우 요청에서 사용한 메소드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정하게 된다.
Lax: Cross-Origin 요청이면 GET
메소드에 대해서만 쿠키를 전송할 수 있다.
Strict: Cross-Origin이 아닌 same-site
인 경우에만 쿠키를 전송 할 수 있습니다.
None: 항상 쿠키를 보내줄수 있다.
이러한 옵션들을 지정한 다음 서버에서 클라이언트로 쿠키를 처음 전송하게 된다면 헤더에 Set-Cookie
라는 프로퍼티에 쿠키를 담아 전송하게 된다.
이후 클라이언트 혹은 서버에서 쿠키를 전송해야 한다면 클라언트는 헤더에 Cookie라는 프로퍼티에 쿠키를 담아 서버에 쿠키를 전송하게 됩니다.
서버가 Client에 유일하고 암호화된 ID를 부여
중요 데이터는 서버에서 관리
서버가 클라이언트의 쿠키를 임의로 삭제할 수는 없다. 대신, set-cookie
로 세션 아이디의 키값을 무효한 값으로 갱신해야 한다.
클라이언트에서 인증 정보를 보관하는 방법으로 토큰 기반 인증이 고안되었다.
클라이언트가 처음 인증을 받게 될 때, Access Token과 Refresh Token 두가지를 받는다.
1. Access Token
보호된 정보들(유저의 이메일,연락처,사진 등)에 접근할수 있는 권한부여에 사용한다.
짤은 유효기간을 주어 탈취 되더라도 오랫동안 사용할 수 없도록 하는것이 좋다.
1.Header
이것이 어떤 종류의 토큰인지, 어떤 알고리즘으로 sign(암호화)할지가 들어있다.
2.Payload
정보가 담겨있다. 권한 및 사용자의 유저이름 등
3.Signature
base64로 인코딩된 첫번째, 그리고 두번째 부분이 완성되었다면, 원하는 비밀 키를 사용하여 암호화 한다.
서버는 클라이언트에 대한 정보를 저장할 필요 없다.
클라이언트는 새로운 요청을 보낼때마다 토큰을 헤더에 포함시키면 된다. 서버를 여러개 가지고 있는 서비스라면 이용성이 높다(같은 토큰으로 여러 서버에서 인증가능)
소셜 로그인 인증 방식은 Oauth 2라는 기술을 바탕으로 구현된다. 인증을 위한 표준 프로토콜의 한 종류이다.
OAuth는 인증(Authentication)을 다른 서비스에 맡길 뿐,접근 권한 관리(Authorization)는 순전히 내 서버의 몫입니다.