쿠키 인증과 베어러 토큰 인증의 차이점과 사용 시기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Express.js 기반 웹 애플리케이션 개발자, 보안 및 인증 시스템 설계자
핵심 요약
- 쿠키 인증은
res.cookie()
로 생성된 쿠키를 자동으로 전송하여 세션 관리가 간편하나,httpOnly
와secure
플래그 설정이 필수 - 베어러 토큰은 클라이언트가
Authorization: Bearer ${token}
헤더에 토큰을 수동으로 추가해야 하며, SPA와 API 통합에 유리 - 보안 고려사항으로 쿠키는
sameSite: 'Strict'
설정을 통해 CSRF 방어, 베어러 토큰은 HTTPS 강제 및 토큰 암호화 필요
섹션별 세부 요약
1. 쿠키 기반 인증
- 서버에서
res.cookie('token', jwtToken, { httpOnly: true, secure: true, sameSite: 'Strict' })
로 쿠키 생성 - 클라이언트는
cookie-parser
미들웨어를 통해req.cookies.token
으로 토큰 접근 가능 - 쿠키 자동 전송 조건: 도메인 일치,
sameSite
설정,credentials: 'include'
사용, HTTPS 연결 - 예시 코드:
fetch('https://api.example.com/user', { credentials: 'include' })
2. 베어러 토큰 인증 (JWT)
- 클라이언트가
localStorage
에 토큰 저장 후Authorization: Bearer ${token}
헤더에 명시적으로 추가 - 서버는
req.headers.authorization
에서 토큰 추출 (authHeader?.split(' ')[1]
) - 인증 헤더 설정 예시:
fetch('/api/protected', { headers: { Authorization:
Bearer ${token}} })
결론
- 쿠키 인증은 전통적 웹 앱과 세션 기반 보안이 필요한 경우 적합, 베어러 토큰은 SPA 및 API 통합 시 유리
- 보안 강화를 위해 쿠키는
secure: true
와httpOnly
설정, 베어러 토큰은 HTTPS 강제 및 JWT 암호화 적용 필수 - 프론트엔드 기술 스택에 따라 자동 전송 vs 수동 전송 방식 선택이 중요