Session-Based Auth vs. Basic Authentication
기본 인증(Basic Authentication)
기본 인증은 HTTP 프로토콜에 내장된 가장 단순한 인증 방식 중 하나이다. 1996년 RFC 2068에서 처음 소개되었으며, 현재는 RFC 7617에서 정의되고 있다.
작동 방식
- 클라이언트가 서버에 리소스를 요청한다.
- 인증이 필요한 리소스인 경우, 서버는 “401 Unauthorized” 응답과 함께 “WWW-Authenticate” 헤더를 전송한다.
- 클라이언트는 사용자 이름과 비밀번호를 콜론으로 결합한 후 Base64로 인코딩한다.
- 이 인코딩된 값을 “Authorization: Basic [인코딩된 값]” 형태로 헤더에 포함시켜 요청을 재전송한다.
- 서버는 이 헤더를 디코딩하여 사용자 이름과 비밀번호를 확인하고, 유효한 경우 리소스에 접근을 허용한다.
특징
- 구현이 매우 간단하다.
- 모든 HTTP 요청마다 인증 정보가 전송된다.
- Base64 인코딩은 암호화가 아니므로 HTTPS 없이는 보안에 취약하다.
- 사용자 세션 상태를 유지하지 않는다(Stateless)
- 로그아웃 메커니즘이 없다
세션 기반 인증(Session-Based Authentication)
세션 기반 인증은 서버 측에서 사용자의 상태를 유지하는 인증 방식이다. 1990년대 후반부터 웹 애플리케이션에서 널리 사용되기 시작했다.
작동 방식
- 사용자가 로그인 페이지에서 자격 증명(보통 사용자 이름과 비밀번호)을 제출한다.
- 서버는 자격 증명을 검증한 후, 고유한 세션 ID를 생성한다.
- 이 세션 ID는 서버의 메모리, 데이터베이스 또는 캐시 시스템에 저장된다.
- 서버는 세션 ID를 쿠키(일반적으로 “JSESSIONID”, “PHPSESSID” 등)로 클라이언트에게 전송한다.
- 클라이언트는 이후의 모든 요청에 이 쿠키를 포함시킨다.
- 서버는 쿠키에서 세션 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 취약성 | 낮음 | 높음(대응 필요) |
모바일 앱 호환성 | 좋음 | 제한적(쿠키 관리) |
용어 정리
용어 | 설명 |
---|---|