COOKIE & SESSION
- HTTP 프로토콜의 특징인 비연결성(Connectionless)과 무상태성(Stateless)를 보완하기 위해서 사용
Cookie
- 로컬(사용자 컴퓨터)에 저장되는 Key와 Value 형태로 된 작은 데이터 파일
- 서버에서 응답을 보낼 때 Response Header에 Set-Cookie 속성을 사용해서 클라이언트에 쿠키를 제공한다.
- 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header에 쿠키를 넣어서 자동으로 서버에 전송한다.
세션 쿠키(Session Cookie) :브라우저가 종료되면 사라지는 쿠키로 브라우저 메모리에 저장된다.
지속 쿠키(Persistent Cookie) : 브라우저가 종료되어도 남아있는 쿠키로 파일 형태로 저장된다.
Session
TOKEN
- 서버가, 각각의 클라이언트를 누군지 정확히 구별할 수 있도록, 유니크한 정보를 담은 암호화 데이터.
무상태 stateless, 확장성 scalability
- 토큰은 클라이언트 측에서 저장하기 때문에 완전한 stateless 이며, 서버를 확장하기에 매우 적합한 환경을 제공한다. 만약 세션을 서버 측에서 저장하고 있고, 여러 서버를 사용해 요청을 분산했다면 어떤 유저가 로그인했을때는 그 유저는 처음 로그인했었던 서버에만 요청을 보내도록 설정해야 한다. 하지만 토큰을 사용한다면, 어떤 서버로 요청이 들어가든지 상관없게 된다.
보안성
클라이언트가 서버에 요청을 보낼 때, 더 이상 쿠키를 전달하지 않음으로 쿠키를 사용함으로 인해 발생하는 취약점이 사라진다.
확장성 exensibility
extensibility 는 로그인 정보가 사용되는 분야를 확장하는 것을 의미한다. 토큰을 사용해 다른 서비스에서도 권한을 공유
JWT
장점
- 토큰은 클라이언트 측에 저장되기 때문에 서버는 완전히 stateless 하다.
- 클라이언트와 서버의 연결고리가 없기 때문에 확장하기에 매우 적합하다.
- 쿠키 사용에 의한 취약점이 사라진다.
- 서버 기반 인증 시스템의 문제점 중 하나인 CORS를 해결할 수 있따.
단점
- 한 번 발급된다면 만료 기간까지 계속 이용해야 한다.
- 암호화하지 않고 인코딩하기 때문에 페이로드 정보가 제한적이다.
- JWT의 길이가 길어 인증 요청이 많아질수록 서버의 자원 낭비가 생길 수 있다.
Refresh Token
Refresh token은 긴 유효기간을 가지면서, Access token이 만료됐을 때 새로 발급해주는 열쇠 역할
Oauth
- Open Authorization, Open Authentication 을 뜻하는 것으로 애플리케이션(페이스북, 구글, 트위터 등의 Service Provider) 유저의 비밀번호를 Third-Party 앱에 제공 없이 인증, 인가를 할 수 있는 오픈 스탠다드 프로토콜이다.
- OAuth의 인증은 API를 제공하는 서버에서 진행하고, 유저가 인증되었다는 Access Token을 발급
https://django-allauth.readthedocs.io/en/latest/providers.html
ref
https://velog.io/@sms8377/TIL-32-쿠키와-세션-그리고-차이점
https://velopert.com/2389
https://velog.io/@junghyeonsu/프론트에서-로그인을-처리하는-방법