Session-Based Auth vs. Basic Authentication

기본 인증(Basic Authentication)

기본 인증은 HTTP 프로토콜에 내장된 가장 단순한 인증 방식 중 하나이다. 1996년 RFC 2068에서 처음 소개되었으며, 현재는 RFC 7617에서 정의되고 있다.

작동 방식

  1. 클라이언트가 서버에 리소스를 요청한다.
  2. 인증이 필요한 리소스인 경우, 서버는 “401 Unauthorized” 응답과 함께 “WWW-Authenticate” 헤더를 전송한다.
  3. 클라이언트는 사용자 이름과 비밀번호를 콜론으로 결합한 후 Base64로 인코딩한다.
  4. 이 인코딩된 값을 “Authorization: Basic [인코딩된 값]” 형태로 헤더에 포함시켜 요청을 재전송한다.
  5. 서버는 이 헤더를 디코딩하여 사용자 이름과 비밀번호를 확인하고, 유효한 경우 리소스에 접근을 허용한다.

특징

  • 구현이 매우 간단하다.
  • 모든 HTTP 요청마다 인증 정보가 전송된다.
  • Base64 인코딩은 암호화가 아니므로 HTTPS 없이는 보안에 취약하다.
  • 사용자 세션 상태를 유지하지 않는다(Stateless)
  • 로그아웃 메커니즘이 없다

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

세션 기반 인증은 서버 측에서 사용자의 상태를 유지하는 인증 방식이다. 1990년대 후반부터 웹 애플리케이션에서 널리 사용되기 시작했다.

작동 방식

  1. 사용자가 로그인 페이지에서 자격 증명(보통 사용자 이름과 비밀번호)을 제출한다.
  2. 서버는 자격 증명을 검증한 후, 고유한 세션 ID를 생성한다.
  3. 이 세션 ID는 서버의 메모리, 데이터베이스 또는 캐시 시스템에 저장된다.
  4. 서버는 세션 ID를 쿠키(일반적으로 “JSESSIONID”, “PHPSESSID” 등)로 클라이언트에게 전송한다.
  5. 클라이언트는 이후의 모든 요청에 이 쿠키를 포함시킨다.
  6. 서버는 쿠키에서 세션 ID를 추출하여 저장된 세션 정보와 비교하고, 유효한 경우 요청을 처리한다.

특징

  • 서버 측에서 사용자 상태를 유지한다(Stateful)
  • 민감한 인증 정보는 최초 로그인 시에만 전송된다.
  • 세션에 타임아웃을 설정할 수 있다
  • 명시적인 로그아웃 기능을 제공한다.
  • 서버 자원을 소비한다(세션 저장소)
  • 여러 서버 간 세션 공유에 추가 설정이 필요하다.

장단점

기본 인증의 주요 장단점

장점:

  • 구현이 매우 간단하며 대부분의 HTTP 클라이언트에서 지원된다.
  • 서버 측 상태 관리가 필요 없어 확장성이 좋다
  • API 개발 시 간단한 테스트와 디버깅에 유용하다.

단점:

  • 보안이 취약하다(Base64는 쉽게 디코딩 가능)
  • 모든 요청마다 자격 증명이 전송되어 탈취 위험이 높다
  • 세션 타임아웃이나 로그아웃 기능이 없다
  • 다단계 인증(MFA)과 같은 고급 인증 기능을 지원하기 어렵다

세션 기반 인증의 주요 장단점

장점:

  • 자격 증명은 한 번만 전송되므로 노출 위험이 낮다
  • 세션 관리(타임아웃, 로그아웃)가 용이하다.
  • 사용자 활동에 따라 권한을 동적으로 조정할 수 있다
  • 다양한 보안 기능을 구현하기 쉽다

단점:

  • 서버 측 세션 저장소가 필요하여 자원을 소비한다.
  • 여러 서버가 있는 환경에서는 세션 공유 메커니즘이 필요하다.
  • CSRF(Cross-Site Request Forgery) 공격에 취약할 수 있다
  • 모바일 앱이나 API 환경에서는 쿠키 관리가 복잡할 수 있다

Session-Based Auth vs. Basic Authentication

특성기본 인증(Basic Authentication)세션 기반 인증(Session-Based Authentication)
상태 유지Stateless(상태 비유지)Stateful(상태 유지)
인증 정보 전송모든 요청마다 전송로그인 시에만 전송
저장 위치클라이언트 측주로 서버 측
보안성낮음(HTTPS 필수)중간~높음
구현 복잡도매우 낮음중간
확장성높음(무상태)낮음(세션 저장소 필요)
로그아웃 메커니즘없음있음(세션 파기)
세션 만료없음(수동 재인증 필요)지원(타임아웃 설정 가능)
서버 자원 사용낮음높음(세션 저장)
브라우저 통합기본 제공 대화상자커스텀 UI 가능
다중 서버 환경쉬움(상태 비유지)복잡함(세션 공유 필요)
사용 사례내부 API, 개발 환경일반 웹사이트, 사용자 중심 애플리케이션
CSRF 취약성낮음높음(대응 필요)
모바일 앱 호환성좋음제한적(쿠키 관리)

용어 정리

용어설명

참고 및 출처