#27.TIL | Authentication(Access Token & Session with Cookie)

Seongjae Hwang·2021년 12월 30일
0

HTTP

HTTP(HyperText Transfer Protocol)는 클라이언트가 서버로부터 리소스들을 가져올 수 있도록 해주는 클라이언트와 서버간의 의사소통 수단이다. 특징으로 HTTP 통신은 RequestResponse로 이루어 지고, 매 요청마다 HTTP는 상태를 저장하지 않는다(Stateless).
따라서, Stateless한 성질때문에 웹사이트에서 사용자가 로그인한 회원인지에 대한 인증을 관리하는 방안이 필요하다.

인증(Authentication)

Access Token

1. 서버에서 아이디, 비밀번호 인증을 완료한 사용자에게 Access Token을 발급.
2. 클라이언트에서 Access Token을 별도의 공간(local storage, session storage, cookie 등)에 저장한 후, 서버에 요청할 때 헤더에 토큰을 포함.
3. 서버는 해당 JWT의 유효성을 검사하고 인가.

장점

  1. 서버입장에서 추가적인 DB가 필요없음(검증만 하면 되기 때문)
  2. 토큰을 기반으로 하는 다른 인증 시스템에도 접근이 가능(확장성)

단점

  1. JWT가 브라우저에 노출되어 있음.(탈취당할 위험)
  2. 유효기간이 끝나기전까지 임의로 만료시킬 수 없음.

Session


1. 서버에서 아이디, 비밀번호 인증을 완료한 사용자에게 고유한 ID를 부여하여 세션DB에 저장 후 세션ID발급 (사용자 특정 가능)
2. 서버에서 HTTP 응답 헤더에 발급된 세션ID를 실어 보냄.
3. 매 요청마다 쿠키에 세션ID실어서 보냄.
4. 서버에서는 쿠키를 받아 세션DB에서 확인 후 세션ID에 맞는 정보를 가져옴.

장점

  1. 쿠키가 담긴 HTTP 요청이 도중에 노출되더라도 유의미한 값을 갖고있지 않아 안전함.
  2. 고유한 세션ID가 있기 때문에 사용자 특정 가능(넷플릭스 서비스 등)

단점

  1. 쿠키를 탈취 후 그 쿠키를 사용하여 HTTP 요청을 보내면 서버는 사용자로 오인
  2. 세션ID를 저장해야 할 DB가 필요함.
profile
Always Awake

0개의 댓글