2021년 9월 6일에 작성된 문서 4번 입니다.
https 배운 내용을 정리했습니다.
세션기반 인증 (Session-based Authentication)
1. 로그인

- 사용자가 정확한 아이디와 비밀번호를 입력했다면, 서버는 인증(Authentication)에 성공했다고 판단.
인증에 따라 리소스의 접근 권한(Authorization)이 달라집니다
서버와 클라이언트에 각각 필요한 것
- 서버는 사용자가 인증에 성공했음을 알고 있어야 한다.
- 클라이언트는 인증 성공을 증명할 수단을 갖고 있어야 한다.
- 세션 : 사용자가 인증에 성공한 상태
- 서버는 일종의 저장소에 세션을 저장(그림 2)
- 주로 in-memory, 또는 세션 스토어에 저장
- 세션이 만들어지면, 각 세션을 구분할 세션 아이디도 만들어짐.(그림 3)
- 클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달.(그림 4)
이때 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용합니다. 쿠키에는 서버에서 발급한 세션 아이디를 저장합니다
- 쿠키를 통해 유효한 세션 아이디가 서버에 전달. (그림 5)
- 세션 스토어에 해당 세션이 존재한다면 (그림 6) 서버는 해당 요청에 접근 가능하다고 판단. (그림 7,8)
2. 로그아웃
- 세션 아이디가 담긴 쿠키는 클라이언트에 저장되어 있고, 서버는 세션을 저장하고 있다.
- 서버는 그저 세션 아이디로만 요청을 판단.
쿠키는 세션 아이디, 즉 인증 성공에 대한 증명을 갖고 있으므로, 탈취될 경우 서버는 해당 요청이 인증된 사용자의 요청이라고 판단합니다. 이것이, 우리가 공공 PC에서 로그아웃해야 하는 이유입니다.
로그아웃에 해야하는 두 가지 작업
- 서버의 세션 정보를 삭제
- 클라이언트의 쿠키를 갱신
- 서버가 클라이언트의 쿠키를 임의로 삭제할 수는 없다.
- 대신,
set-cookie로 세션 아이디의 키값을 무효한 값으로 갱신.
express-session
세션을 위한 미들웨어로, 'Express'에서 세션을 다룰 수 있는 공간을 보다 쉽게 만들어준다.
- 필요한 경우 세션 아이디를 쿠키에 저장하고, 해당 세션 아이디에 종속되는 고유한 세션 객체를 서버 메모리에 저장.
req.session(세션 객체) : 서로 독립적인 객체
- 세션 객체에 세션 데이터를 저장하거나 불러오기 위해 사용.
Written with StackEdit.