[Authorization] 1. 쿠키와 세션(Cookie & Session)을 통한 인증

Cookie

HTTP 프로토콜은 비연결성, 무상태성이라는 특징 때문에 그 자체만으로는 사용자를 식별할 수 없다.

따라서 인증이 필요한 경우 서버가 클라이언트(브라우저)에 데이터를 저장하는 방식을 이용하는데, 이 데이터를 Cookie(쿠키)라고 부른다.

그러나 Cookie는 도난당하기 쉬우며, 암호화되지 않은 정보를 저장하기 때문에 그 내용 또한 확인하기 쉽다는 문제가 있다.

Cookie & Session

따라서 Cookie의 보안 취약점을 해결하기 위해 Session과 함께 사용한다. Cookie에는 세션 ID라는 무의미한 임의의 문자열만을 저장하고, 이 세션 ID를 통해 서버의 세션이라는 저장소에서 해당 사용자의 정보에 접근할 수 있도록 하는 것이다.

이를 통해 사용자의 정보를 보호할 수는 있게 되었으나, 여전히 다음의 문제들이 존재한다.

  1. 여전히 쿠키는 보안에 취약하므로, 해커가 쿠키를 탈취하여 클라이언트인 척 위장할 수 있다.

  2. 클라이언트와 서버가 Stateful 통신을 함으로써 다양한 문제가 발생한다.

이러한 문제를 해결하기 위해 최근에는 Token 기반 인증 방식을 사용하는 추세이다.

인증 흐름

  1. 사용자가 아이디/비밀번호를 통해 로그인을 시도
  2. 서버는 해당 정보가 맞다면 고유한 ID 값인 세션 ID 값을 발급한 뒤 세션 저장소에 저장
  3. 해당 세션 ID를 사용자에게도 전달
  4. 클라이언트(브라우저)는 이를 쿠키에 저장한 뒤 서버에 요청을 보낼 때마다 쿠키를 실어 보냄
  5. 서버에서는 쿠키를 받아 세션 저장소에서 탐색하고 대응되는 정보가 있다면 반환