랑아
article thumbnail
Published 2023. 4. 23. 01:02
Session 기초 CS/인증&보안

Session

세션은 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다.
여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 종료하여 연결을 끝내는 시점을 말한다.

즉, 서버와 클라이언트 간의 연결이 활성화된 상태를 세션이라고 한다.


Session 전달 방법

회원이 쇼핑몰에서 장바구니에 물건을 담으려는 경우

  • 세션 id 부여 이전

    1. 클라이언트에서 로그인 후, 상품을 장바구니에 넣기 위해 서버로 요청을 전달한다.
    2. 서버는 DB에 정보를 저장한다.
    3. DB는 서버에세 session_id 를 반환한다.
    4. 서버는 session_id 를 암호화하고 Set Cookie 메서드를 통해 쿠키에 담아 클라이언트에게 전달한다.
  • 세션 id 부여 이후

    1. 추가 상품을 장바구니에 넣기 위해 서버로 요청을 전달한다.
    2. 서버는 클라이언트에게 전달 받은 session_id 가 DB와 일치하는지 확인하고, 일치한다면 DB에 장바구니를 업데이트한다.
    3. DB에 업데이트가 완료되면 서버는 클라이언트에게 업데이트된 정보를 전달한다.

Cookie와 Session의 차이점

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

Session 기반 인증

로그인

사용자가 웹사이트에서 아이디 및 비밀번호를 이용해서 로그인을 시도할 때, 정확한 아이디와 비밀번호를 입력했다면, 서버는 인증(Authentication)에 성공했다고 판단할 것이다.

그런 다음, 인증을 필요로 하는 작업을 요청할 경우, 서버는 해당 유저가 인증에 성공했음을 알기 때문에 매번 로그인할 필요가 없다.

이는 인증에 따라 리소스의 접근 권한이 달라지기 때문이다.
이때 서버와 클라이언트에 각각 필요한 것은 다음과 같다.

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

간략히 설명하자면

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

이때 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용하고, 쿠키에는 서버에서 발급한 세션 아이디를 저장한다.

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

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


로그아웃

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

주의할 점으로, 쿠키는 세션 아이디, 즉 인증 성공에 대해 증명을 하고 있으므로, 탈취될 때 서버는 해당 요청이 인증된 사용자의 요청이라고 판단한다.

따라서 로그아웃은 다음 두 가지 작업을 해야 한다.

  • 서버는 세션 정보를 삭제해야 한다.
  • 클라이언트는 쿠키를 갱신해야 한다.

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

'CS > 인증&보안' 카테고리의 다른 글

Cookie 기초  (0) 2023.04.22
Hashing 기초  (0) 2023.04.22
HTTPS 기초  (0) 2023.04.22
profile

랑아

@RangA

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!