본문 바로가기

TIL

[인증/보안][Session]

728x90

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

로그인을 통해 인증 정보가 저장되고, 인증된 사용자가 어떤 식으로 웹사이트를 이용하는지 알아보자

사용자가 웹사이트에서 아이디 및 비밀번호를 이용해서 로그인 시도를 했을 때 정확한 아이디/비번 일 경우 서버는 인증에 성공했다고 판단하게 되고 다음에 인증을 필요로 하는 작업(장바구니에 물품 추가 등)을 요청할 경우 서버가 해당 유저는 인증에 성공했음을 알고 있다면 매번 로그인할 필요가 없다 이때 서버와 클라이언트에 각각 필요한 것으론
서버 : 사용자가 인증에 성공했음을 알고있어야 함 
클라이언트는 인증 성공을 증명할 수단을 갖고 있어야함

사용자가 인증에 성공한 상태를 세션이라고 부른다
서버는 일종의 저장소에 세션을 저장한다 주로 in-memory, 또는 세션 스토어(redis 등과 같은 트랜잭션이 빠른 DB)에 저장한

세션이 만들어지면, 각 세션을 구분할 수 있는 세션 아이디도 만들어지는데 보통 클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달한다 이때 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용한다. 쿠키에는 서버에서 발급한 세션 아이디를 저장한다

쿠키를 통해 유효한 세션 아이디가 서버에 전달되고, 세션 스토어 해당 세션이 존재한다면 서버는 해당 요청에 접근 가능하다고 판단한다

하지만 쿠키에 세션 아이디 정보가 없는 경우, 서버는 해당 요청이 인증되지 않았음을 알려준다

로그아웃

세션 아이디가 담긴 쿠키는 클라이언트에 저장되어 있으며, 서버는 세션을 저장하고 있다 그리고 서버는 그저 세션 아이디로만 인증 여부를 판단한다.

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

서버는 세션 정보를 삭제해야 하고, 클라리언트는 쿠키를 갱신해야 로그아웃이 된다

버가 클라이언트의 쿠키를 임의로 삭제할 수 없다 대신 set-cookie로 클라이언트에게 쿠키를 전송할 때 세션 아이디의 키값을 무효한 값으로 갱신할 수 있다.

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

 

728x90

'TIL' 카테고리의 다른 글

[Spring Security][Web요청 처리 흐름]  (0) 2022.11.20
[인증/보안][SQL Injection][CSRF]  (0) 2022.11.19
[인증/보안][Cookie]  (0) 2022.11.19
[Spring Security][기본구조]  (0) 2022.11.19
[Spring Security][개요]  (0) 2022.11.18