Authentication - Session

Verba volant, scripta manent·2021년 4월 14일
0

Session 이란?

서버가 클라이언트에 유일하고 암호화된 id(session)를 부여하는 인증 방식으로 암호화된 세션(신분증의 역할)으로 요청이 전달되면 확인 후 그 요청이 반영된다.
쿠키가 클라이언트에 정보를 저장하는 방식이었다면, 세션은 데이터를 서버에 저장하고, 쿠키에는 데이터를 암호화된 상태로 부여한다.

단점은 서버의 메모리에 저장하므로 가용메모리가 점점 줄어들어 서버의 성능이 안좋아질 수 있다.

Cookie vs Session

설명 접속 상태 저장 경로 장점 단점
Cookie 그저 http의 stateless한 것을 보완해주는 도구 클라이언트 서버에 부담을 덜어줌 쿠키 그 자체는 인증이 아니다.
Session 접속 상태를 서버가 가짐(stateful) 접속 상태와 권한 부여를 위해
세션아이디를 쿠키로 전송
서버 신뢰할 수 있는 유저인지 서버에서 추가로 확인 가능 하나의 서버에서만 접속 상태를 가지므로 분산에 불리

세션기반 인증(Session-based Authentication)

  1. 로그인 이후 각각의 세션 객체에 해당 유저의 인증정보를 저장
    (쿠키에 해당 세션의 아이디를 저장)
  2. 서버는 매 요청마다 해당되는 세션 객체에 저장된 유저 인증정보를 바탕으로 이전에 인증된 유저의 요청인지 검증
  3. 해당 세션 아이디에 유저의 인증정보가 존재할 경우 ⇒ 서버는 접근을 허용
    쿠키에 세션 아이디 정보가 없거나 세션 객체에 유저 인증정보가 존재하지 않는 경우 ⇒ 서버는 접근을 거절
  4. 로그아웃 요청 시에는 서버에서 세션을 파괴해야 함

express-session

  • 세션을 다루기 위한 익스프레스 미들웨어
  • 세션 아이디를 쿠키에 저장하고, 해당 세션 아이디에 종속되는 고유한 세션 객체를 서버 메모리에 저장시킬 수 있다.
    (세션 객체는 서로 독립적인 객체이므로 각각 다른 데이터를 저장할 수 있음)
  • req.session이 세션 객체 ⇒ req.session으로 세션 데이터를 저장거나 불러올 수 있다.
profile
말은 사라지지만 기록은 남는다

0개의 댓글