| 항목 | 세션 기반 인증 | 토큰 기반 인증 |
|---|---|---|
| 기본 개념 | 서버가 세션 ID를 생성하고 클라이언트는 쿠키로 보관 | 서버가 토큰(JWT 등)을 발급하고 클라이언트가 저장 |
| 상태 관리 | 상태 유지 (Stateful) | 무상태 (Stateless) |
| 저장 위치 | 세션은 서버, 세션 ID는 클라이언트의 쿠키 | 토큰은 클라이언트 (로컬 스토리지, 세션 스토리지, HttpOnly 쿠키 등) |
| 사용 환경 | 전통적인 웹 애플리케이션 | 모바일, SPA 등 다양한 환경 |
| 확장성 | 서버 세션 저장소 관리 필요 | 서버 부하 적음, 확장성 높음 |
| 보안 이슈 | 세션 탈취(Cookie Hijacking), CSRF | 토큰 탈취(XSS), 재발급 관리 필요 |
OAuth 2.0 : 사용자 비밀번호를 직접 공유하지 않고도 제3자 애플리케이션이 사용자의 리소스(데이터 등)에 안전하게 접근할 수 있도록 허용하는 권한 위임(Authorization Delegation) 프레임워크
제3자 앱이 사용자의 자원에 접근할 수 있게 하되
사용자의 아이디/비밀번호를 직접 넘기지 않도록 하는 안전한 인증 구조
사용자가 "구글 계정으로 로그인" 버튼 클릭
Google 로그인 창으로 리다이렉트
로그인 및 권한 동의
앱은 Access Token을 받아 사용자 Gmail, 프로필, 드라이브 등에 접근 가능
OAuth 인증 구조에서 리소스 소유자는 전체 플로우의 출발점이자 가장 중요한 주체
엔티티는 **자신이 소유하고 있는 보호된 리소스(예: 내 구글 드라이브 파일, 내 사진 등)에 대한 접근 권한 소유
일반적으로는 “최종 사용자(End User)”를 의미
자신이 보유한 데이터나 기능을 외부 서비스가 잠시 사용할 수 있도록 허용 여부 결정
사용자 대신 보호된 리소스에 접근하려는 제3자 애플리케이션
인증과 인가의 중심 역할을 수행
실제 보호된 데이터를 제공하는 주체
| 구분 | 설명 |
|---|---|
| Back Channel | 서버 간 직접 통신 예: 인가 코드 → 액세스 토큰 교환 사용자에게 보이지 않음, 보안성 높음 |
| Front Channel | 사용자의 브라우저를 통해 전송되는 통신 경로 예: 로그인/동의 리다이렉션, 인가 코드 전달 URL에 값이 노출될 수 있어 보안에 주의 필요 |
가장 안전하고 널리 사용되는 OAuth 플로우
서버 사이드 애플리케이션에서 주로 사용됨
민감한 정보를 사용자 브라우저에 직접 노출하지 않고 백 채널(서버 간 통신)을 통해 토큰을 주고받기 때문에 보안에 유리