1. Question

세션 기반 인증(Session-Based Authentication)토큰 기반 인증(Token-Based Authentication)의 차이점은?

2. Answer

A. 인증 방식과 데이터 저장 위치

세션 기반 인증

  • 서버가 사용자의 인증 정보를 기반으로 세션을 생성하고, 각 세션에 유니크한 세션 ID를 부여한다.

  • 세션 ID는 서버의 메모리나 데이터베이스에 저장되며, 서버는 이 ID를 사용하여 사용자의 로그인 상태와 인증 정보를 추적한다.

토큰 기반 인증

  • 서버는 사용자의 인증 정보를 검증한 후, 암호화된 토큰을 생성하여 사용자에게 반환한다. 이 토큰은 사용자의 권한과 ID 정보를 포함할 수 있다.

  • 토큰은 클라이언트 측에서 저장되며(일반적으로 로컬 스토리지나 쿠키에 저장), 서버는 토큰을 통해 사용자를 인증하므로 서버는 사용자의 상태 정보를 저장할 필요가 없다.’

B. 확장성

세션 기반 인증

  • 서버가 모든 세션 정보를 유지하므로, 서버 확장 시 세션 데이터를 공유해야 하는 동기화 문제가 발생할 수 있다. 이는 서버의 확장성을 제한할 수 있다.

토큰 기반 인증

  • 클라이언트가 토큰을 보유하고 있고, 서버는 상태를 유지할 필요가 없으므로 서버의 수평 확장이 용이하다. 로드 밸런서를 사용하여 request를 여러 서버에 분산시킬 때 각 서버가 독립적으로 토큰을 검증할 수 있다.

C. 보안

세션 기반 인증

  • 세션 하이재킹과 CSRF(크로스 사이트 요청 위조) 공격에 취약할 수 있다. 이를 방지하기 위해 HTTPS 사용, 쿠키에 HttpOnly와 Secure 플래그 설정, 그리고 CSRF 토큰 사용 등의 방법이 필요하다.

토큰 기반 인증

  • 토큰이 탈취되면, 탈취자는 사용자의 권한을 가진 채로 서비스를 이용할 수 있다. 이를 방지하기 위해 토큰의 유효 기간을 짧게 설정하고, HTTPS를 사용하여 토큰을 안전하게 전송해야 한다. 또한 XSS 공격을 방지하기 위해 적절한 콘텐츠 보안 정책을 적용해야 한다.

D. 클라이언트-서버 통신

세션 기반 인증

  • 사용자가 서버에 request를 보낼 때마다 쿠키에서 세션 ID를 참조하여 서버가 해당 사용자를 인식하고 처리한다.

토큰 기반 인증

  • 클라이언트는 모든 서버 request에 Authorization header를 통해 토큰을 전송한다. 서버는 토큰을 검증하고 request를 처리한다. 이 방식은 API 호출에 특히 적합하며, 다양한 플랫폼(웹, 모바일 앱 등)과 서비스에서 효율적으로 사용할 수 있다.

3. Detail

A. 세션 기반 인증 사용 상황

세션 기반 인증은 주로 내부 서버 자원이 풍부하고, 사용자 상태 정보(예: 사용자의 로그인 상태, 프로필 설정 등)를 서버에서 직접 관리해야 할 때 사용된다.

  • 전통적인 웹 애플리케이션: 사용자가 서버와 지속적으로 상호작용하는 전통적인 웹 사이트에서 세션 기반 인증이 자주 사용된다. 예를 들어, 온라인 쇼핑몰이나 인터넷 뱅킹 사이트에서 사용자의 로그인 세션을 서버에서 관리하여 사용자의 구매 기록, 장바구니, 개인 설정 등을 효과적으로 관리할 수 있다.

  • 서버 리소스 관리에 대한 통제: 기업 환경에서 내부 네트워크를 통해 제공되는 서비스에서 세션을 사용하는 경우, 서버가 직접 사용자 세션을 관리하고 보안을 유지할 수 있어, 보안 요구 사항이 엄격한 애플리케이션에 적합하다.

B. 토큰 기반 인증 사용 상황

토큰 기반 인증은 서비스의 확장성이 중요하고, 다양한 플랫폼(웹, 모바일, 타 서비스 간 연동)에서의 인증을 통합하고자 할 때 사용된다.

  • 분산 시스템 및 마이크로서비스 아키텍처: 서비스가 여러 서버나 서비스 간에 분산되어 있는 경우, 토큰을 사용하여 각 서비스가 독립적으로 사용자를 인증할 수 있다. 예를 들어, 클라우드 기반 서비스에서 사용자의 API request를 여러 서버가 처리하는 경우, 각 request에 포함된 토큰으로 사용자를 인증할 수 있다.

  • 모바일 애플리케이션과의 통합: 모바일 앱과 웹 서비스 간에 사용자 인증 정보를 공유해야 할 때, 토큰을 사용하면 각 디바이스와 플랫폼에 걸쳐 일관된 인증 방식을 제공할 수 있다. 예를 들어, 소셜 미디어 로그인(페이스북, 구글 등)을 통해 다양한 플랫폼에서 서비스에 접근할 수 있도록 할 때 토큰이 유용하다.

  • 서드파티 액세스 제공: API를 공개하여 외부 개발자가 특정 서비스 기능을 활용할 수 있도록 할 때, API 토큰을 제공하여 안전하게 인증 처리를 할 수 있다. 이 경우, 각 토큰은 특정 권한을 가지고 있어, API 사용을 통제할 수 있다.

4. Reference

None

댓글남기기