[Authentication/Security] Session-based Authentication

Steve·2021년 7월 11일
0

웹개발 코스

목록 보기
51/59

Session-based Authentication

세션

정보의 교환. 통신이 가능한 상태.
예) 로그인 기능

세션을 이용한 인증과정

  1. 클라이언트가 id 와 pw 를 서버에 보내어 로그인 요청을 한다.
  2. 서버는 비밀번호를 해쉬한 값과 DB 에 저장된 hash 값을 비교하여 맞는지 확인한다.(이때 hash 값은 salt 가 쳐진 hash 값)
  3. 맞으면 session idsession store 에 저장한다. (서버 자체 저장소나 redis 등과 같은 트랜젝션이 빠른 db)
  4. Session id 를 클라이언트에 쿠키로 전달한다(connect.sid).
  5. 로그인 성공

session id 가 포함된 쿠키가 삭제되지 않는다면 로그인 상태에서 가능한 작업들을 할 수 있다.

  • 예를 들어 내 유저 정보 보기, 장바구니에 물건 담기 등.
  • 위와 같은 작업을 클라에서 요청시 session id 를 쿠키로 보내면, 서버는 자신이 가지고 있는 session id 와 일치하는지 확인하여 클라이언트의 로그인 여부를 확인한다.

로그아웃 기능

  1. 서버에 저장된 session 정보를 삭제
  2. 클라이언트의 쿠키를 갱신 (서버가 클라의 쿠키를 삭제하진 못하기 때문에 쿠키의 값을 초기화함)

express-session

세션을 관리해주는 express module

  • req.session에 원하는 값을 저장하면 알아서 session store 와 cookie 에 값을 저장해줌.
  • 클라가 cookie 를 보내면 알아서 cookie 의 session idsession store 에 있는 id 를 비교하여 req.session 데이터를 가져옴.
  • cookie 의 이름은 connect.sid 라고 부여함.

Session 인증이 들어간 axois 통신 사용하기

https://lahuman.github.io/cors_axios_session/

Session 의 한계

  • 큰 회사의 사이트는 여러개의 서버를 사용한다. 예를 들어 로그인 요청을 했을 때 가장 여유로운 서버에 요청이 된다.
  • session 을 통해 로그인 인증을 할 경우 서버에 session id 를 저장해야 하는데, 서버가 여러개이므로 모든 서버에 session id를 저장하도록 만들어야한다. 이 과정이 비효율적일 수 있다.
  • session 정보만 따로 저장하는 서버를 따로 만들어줄 수는 있다.

따라서 요즘은 대부분 여러대의 서버를 사용하기 때문에 클라이언트만으로 해결이 가능한 token 방식을 사용한다.

profile
게임과 프론트엔드에 관심이 많습니다.

0개의 댓글