상세 컨텐츠

본문 제목

Authentication with express-session and flow

Programming/Concept

by 쌩우 2019. 6. 27. 23:52

본문

클라이언트와 서버, 그리고 데이터베이스를 연결짓는 흐름에서 사용자에 대한 인증은 중요하다.

 

단순히 회원가입시의 아이디와 비밀번호만을 기억하고, 로그인 시에 확인하는 것에서 더 나아가,
로그인 시에 세션을 만들어서 쿠키 정보로 전달해주는 과정을 추가하였다.
클라이언트로부터 어떤 요청이 들어왔을 경우, 해당 사용자의 정보만을 조회 가능하도록 만들기 위함이다.
인증 과정을 추가하지 않으면, 나의 정보를 다른 사용자가 요청하여 유출돼버리는 경우가 발생할 수도 있다.

 

간단한 흐름은 아래의 그림에서 보는 것과 같다.

 

 

 

순서

  1. 사용자의 로그인
  2. 서버에서 로그인 정보 확인
  3. 사용자의 고유한 ID 값 부여 => 세션 저장소에 저장 후 connect.sid 발행
  4. 사용자는 서버로부터 세션ID를 받아 쿠키에 저장 => 인증 필요한 요청마다 헤더에 쿠키 포함하여 보냄(여기까지의 과정을 express-session 모듈이 알아서 해준다.)
  5. 서버에서 쿠키를 받음 => 세션 저장소와 비교 후 대응되는 정보 가져옴
  6. 인증 완료 => 서버로부터 사용자에게 일치하는 데이터 응답

세션&쿠키 방식은 서버에 세션 저장소가 필요하다.
세션 저장소는 로그인 시 사용자의 정보를 저장하고, 고유의 세션ID값을 만든다.
만들어진 세션ID값은 HTTP response header에 실어 사용자에게 보내진다.
사용자는 받은 세션ID값을 쿠키로 보관하고, 인증이 필요한 요청에 쿠키를 담아 보낸다.
서버는 쿠키 내의 세션ID값을 세션 저장소의 것과 비교하여 인증을 진행한다.

단점

  1. 나의 HTTP request를 누군가 가로채면, 내부의 쿠키도 도둑맞을 수 있다. 훔친 쿠키를 사용하여 HTTP request를 보내면, 서버는 내가 보낸 요청으로 착각하고 응답을 하게 될 것이다.
  2. 서버에 세션 저장소를 사용하므로 추가적인 저장공간이 필요하고, 부하가 커질 것이다.

토큰 기반 인증 방식 (Json Web Token)

추가 작성 필요

'Programming > Concept' 카테고리의 다른 글

AWS(Amazon Web Service)  (0) 2019.06.28
Deployment and AWS (목표)  (0) 2019.06.28
Authentication 목표  (0) 2019.06.26
Database sprint  (0) 2019.06.24
Promise, Asynchronous, async & await - Javascript  (0) 2019.06.21

관련글 더보기

댓글 영역