웹 애플리케이션 인증 방식 1 : 쿠키-세션

KDG: First things first!·2024년 8월 29일
0

CS

목록 보기
5/6



인증(Authentication)

인증: 시스템이나 네트워크에 접근하려는 유저가 실제로 자신이 주장하는 그 사람이 맞는지 인증하는 과정이다.

인증을 통해 시스템은 올바른 사용자만이 데이터와 리소스에 접근할 수 있도록 시도하여 데이터와 리소스를 보호한다.

인증의 예시로는 스마트폰의 지문 인식, 웹 사이트 로그인 등이 있다.




인가(Authorization)

인증: 유저가 특정 시스템에 접근할 때, 해당 유저가 어떤 리소스나 기능에 접근할 수 있는 권한을 부여받은 게 맞는지 확인하는 과정이다.

인가의 주요 목적은 인증된 사용자에게 적절한 수준의 접근 권한을 부여하여, 시스템의 리소스가 무단으로 접근되거나 변경되지 않도록 보호하는 것이다.

인가의 예시로는 회원/비회원, 일반유저/관리자 여부에 따른 권한 차등 부여 등이 있다.



그렇다면 웹에서는 어떤 방식으로 인증을 진행하는지에 대해 알아보자.



쿠키-세션 방식이란?


쿠키(Cookie): 쿠키는 웹 브라우저와 서버 간의 상태 정보를 유지하기 위해 사용되는 작은 데이터 파일이다. 클라이언트 측(로컬 PC)에 저장되며, 사용자가 웹사이트를 방문할 때마다 웹 브라우저에 의해 서버로 전송되어 필요한 정보를 참조하거나 재사용할 수 있다.

  • 클라이언트에 저장: 쿠키는 클라이언트의 웹 브라우저에 저장된다. 브라우저가 닫히더라도 만료기간이 설정되어 있는 한 계속 쿠키는 유지된다.

  • 만료 기간: 쿠키에는 만료 기간이 있다. 만료 기간이 지나면 브라우저는 해당 쿠키를 삭제한다. 만료 기간을 명시하지 않으면 브라우저 세션이 종료될 때까지 쿠키가 유지된다.

  • 크기 제한: 일반적으로 하나의 쿠키는 4KB 정도의 크기 제한이 있으며, 도메인당 저장할 수 있는 쿠키의 개수도 제한이 있다.

  • 보안 취약: 쿠키는 텍스트 파일로 저장되기 때문에 쉽게 열람하고 조작할 수 있다. 따라서 사용자와 관련된 중요한 정보는 쿠키에 저장해서는 안 된다.



세션(Session): 세션은 사용자와 웹 서버 간의 대화 상태를 유지하기 위한 인증과 관련된 데이터로 쿠키와 달리 서버의 세션 저장소에 저장된다.

방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고도 한다.

  • 서버 측 저장: 세션 데이터는 서버 측에 저장된다. 보안을 위해 클라이언트에는 세션 ID만 전송되어 쿠키에 저장된다.

  • 임시 데이터 저장 : 사용자가 웹사이트를 탐색하는 동안(브라우저 세션이 유지되는 동안) 세션은 데이터를 유지한다. 브라우저를 닫거나 세션 타임아웃이 발생하면 세션 데이터는 삭제된다.

  • 보안성: 세션 데이터는 서버 측에 저장되기 때문에 클라이언트 측에서 직접 조작할 수는 없다. 세션 ID가 유출되지 않는 한 상대적으로 안전한다고 할 수 있다. 하지만 세션 ID가 유출되면 세션 하이재킹(Session Hijacking)의 위험도 존재한다



쿠키-세션을 사용하는 이유는 HTTP 프로토콜을 보완하기 위해 사용되는 비연결성(Connectionless)무상태성(Stateless)의 약점을 보완하기 위해 사용된다. 일반 사용자가 볼 때에는 서버와 웹 브라우저(클라이언트)가 계속 연결되어 있고 클라이언트의 정보가 서버에 저장되는 것처럼 보이지만 실제로는 전혀 그렇지 않다.

비연결성과 무상태성 때문에 클라이언트의 매 요청마다 인증을 진행해야 하는데 이는 매우 비효율적이기 때문에 이미 인증에 통과한 클라이언트의 정보를 유지하기 위해 쿠키-세션 방식이 사용된다.

웹 애플리케이션의 비연결성(Connectionless)와 무상태성(Stateless)에 대해 이해가 부족하다면 웹 애플리케이션 설계: 비연결(Connectionless)와 무상태성(Stateless) 포스팅을 보고오는 것을 권장한다.


세션은 쿠키에 비해 안전하다. 하지만 굳이 세션만 사용하지 않고 쿠키도 같이 사용하는 이유는 세션은 서버 측에 저장되고 이용되다 보니 서버의 리소스를 쿠키에 비해 많이 사용한다. 이로 인한 서버의 과부화를 줄이기 위해 일반적으로 세션뿐만 아니라 쿠키도 병행하여 사용된다.



쿠키-세션 방식은 서버가 특정 유저가 인증(로그인)되었다는 상태를 저장하는 방식이다.

서버가 해당 유저의 인증과 관련된 최소한의 정보만 저장하여 로그인을 유지시킨다.

쿠키-세션 방식의 작동 방식과 순서는 다음과 같다.

1. 사용자가 로그인을 진행하여 서버에 로그인을 요청한다.

2. 서버는 로그인 요청을 받고 ID(혹은 Email), password 등의 로그인 요청 데이터를 회원의 정보가 저장되어 있는 DB에서 데이터를 받아와 해당 유저가 맞는지 대조하여 확인한다.

3. 만약 대조한 데이터가 일치하여 인증을 통과한다면 서버는 "세션 저장소"에 해당 유저가 로그인하였다는 정보를 저장한다.

4. 로그인 정보를 저장한 후 세션 저장소는 난수로 구성된 Session ID를 발급하여 서버에 반환한다.

5. 서버는 클라이언트에 응답 정보를 반환할 때 Session ID를 포함하여 반환한다.

6. 클라이언트는 Session ID를 쿠키에 저장한 후 이후 서버에 요청을 보낼 때마다 HTTP Header에 Session ID가 들어 있는 쿠키를 담아 보낸다.

7. 서버는 요청 데이터에서 쿠키를 꺼내어 세션 저장소에 저장되어 있는 Session ID와 대조하여 검증한다.

8. 만약 검증을 통과한다면 서버는 해당 사용자가 인증(로그인)을 통과한 사용자라고 인식한다.

9. 인증을 통과한 사용자에게 서버가 DB에서 해당 데이터를 찾아와 요청에 따른 응답 데이터를 반환한다.

profile
알고리즘, 자료구조 블로그: https://gyun97.github.io/

0개의 댓글