관리 메뉴

평행우주 : world 1

[인증 | 보안] Session-based Authentication 본문

텃밭 3 : BE/인증 | 보안

[인증 | 보안] Session-based Authentication

parallelworlds 2022. 2. 18. 04:57

세션기반 인증 

 

로그인

 

  • 서버가 인증(Authentication)에 성공했다고 판단한 이후, 
  • 인증을 필요로 하는 작업(그림에서와 같이, 장바구니에 물품 추가)을 요청할 때,
  • 서버는 아이디 및 비밀번호의 해시를 이미 알고 있기 때문에,
  • ("인증에 성공했음"을 서버가 알고 있다면)매번 로그인할 필요가 없을 것

 

인증에 따라 리소스의 접근 권한(Authorization)이 달라진다

 

 

서버와 클라이언트에 각각 필요한 것

  • 서버는 사용자가 인증에 성공했음을 알고 있어야 한다
  • 클라이언트는 인증 성공을 증명할 수단을 갖고 있어야 한다.

 

+) 보충 설명

  • 사용자가 인증에 성공한 상태가 세션
    • 서버는 일종의 저장소에 세션을 저장. (그림 2) 주로 in-memory,
    • 또는 세션 스토어(redis 등과 같은 트랜잭션이 빠른 DB)에 저장
  • 세션이 만들어지면, 각 세션을 구분할 수 있는 세션 아이디도 만들어진다(그림 3),
  • 보통 클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달한다 (그림 4)

이때 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용.

쿠키에는 서버에서 발급한 세션 아이디 저장

 

  • 쿠키를 통해 유효한 세션 아이디가 서버에 전달되고, (그림 5)
  • 세션 스토어에 해당 세션이 존재한다면 (그림 6)
  • 서버는 해당 요청에 접근 가능하다고 판단(그림 7,8)
  • 하지만 쿠키에 세션 아이디 정보가 없는 경우,
  • 서버는 해당 요청이 인증되지 않았음을 알려준다

 

 


로그아웃

세션 아이디가 담긴 쿠키는 클라이언트에 저장되고,

서버는 세션을 저장한다.

서버는 그저 세션 아이디로만 요청을 판단

 

주의: 쿠키는 세션 아이디, 즉 인증 성공에 대한 증명을 갖고 있으므로, 탈취될 경우 서버는 해당 요청이 인증된 사용자의 요청이라고 판단합니다. 이것이, 우리가 공공 PC에서 로그아웃해야 하는 이유

 

로그아웃 작업

 

  • 서버의 세션 정보 삭제
  • 클라이언트의 쿠키 갱신

서버가 클라이언트의 쿠키를 임의로 삭제할 수는 없음.

대신, set-cookie로 세션 아이디의 키값을 무효한 값으로 갱신

 

 

express-session

  • 이런 세션을 대신 관리해주는 'express-session' 이라는 모듈 존재
  • 'express-session'은 세션을 위한 미들웨어로, 'Express'에서 세션을 다룰 수 있는 공간을 보다 쉽게 만든다.
  • 또한 필요한 경우 세션 아이디를 쿠키에 저장하고,
  • 해당 세션 아이디에 종속되는 고유한 세션 객체를 서버 메모리에 저장
  • 이때 세션 객체는 서로 독립적인 객체이므로 각각 다른 데이터 저장 가능
  • req.session이 바로 세션 객체이며 req.session은 세션 객체에 세션 데이터를 저장하거나 불러오기 위해 사용
Comments