성장에 목마른 코린이

Session (인증 성공 상태) 본문

CodeStates/Section 3 (백엔드)

Session (인증 성공 상태)

성장하는 코린이 2022. 4. 19. 06:14
728x90

Session

사용자가 인증에 성공한 상태는 세션이라고 부릅니다.

서버는 일종의 저장소에 세션을 저장합니다. 주로 in-memory, 세션 스토어에 저장합니다.

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

사용자가 만일 정확한 아이디와 비밀번호를 입력했다면, 서버는 인증(Authentication)에 성공했다고 판단할 것입니다.

그러면 다음번에 인증을 필요로 하는 작업을 요청할 경우,

서버는 아이디 및 비밀번호의 해시를 이미 알고 있기 때문에

"인증에 성공했음"을 서버가 알고 있다면, 매번 로그인할 필요가 없을 것입니다.

 

이때 서버와 클라이언트에 각각 필요한 것이 있습니다.

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

세션이 만들어지면 / 인증이 성공하면, 각 세션을 구분할 수 있는 세션 아이디도 만들어지는데,

보통 클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달합니다.

 

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

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

 

쿠키를 통해 유효한 세션 아이디가 서버에 전달되고,

세션 스토어에 해당 세션이 존재한다면 서버는 해당 요청에 접근 가능하다고 판단합니다.

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

로그아웃

세션 아이디가 담긴 쿠키는 클라이언트에 저장되어 있으며, 서버는 세션을 저장하고 있습니다.

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

 

!주의!

쿠키는 세션 아이디, 즉 인증 성공에 대한 증명을 갖고 있으므로,

탈취될 경우 서버는 해당 요청이 인증된 사용자의 요청이라고 판단합니다.

우리가 공공 PC에서 로그아웃해야 하는 이유입니다!

 

로그아웃은 두 가지 작업을 해야 합니다.

  1. 서버의 세션 정보를 삭제해야 합니다.
  2. 클라이언트의 쿠키를 갱신해야 합니다.

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

그래서 set-cookie로 세션 아이디의 키값을 무효한 값으로 갱신해야 합니다.

Comments