[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개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN