피드로 돌아가기
Dev.toSecurity
원문 읽기
Browser Native Cookie를 활용한 WebSocket 인증 최적화 및 보안 강화
The WebSocket Auth Problem: Cookies vs. Bearer Tokens
AI 요약
Context
WebSocket 연결은 HTTP GET Upgrade 요청으로 시작하나 브라우저 WebSocket API의 Custom Header 미지원으로 인해 Bearer Token 전달이 불가한 제약 존재. Query Parameter 사용 시 로그 노출 위험 및 First Message Auth 도입 시 연결 라이프사이클 복잡도 증가라는 설계적 딜레마 발생.
Technical Solution
- Browser Native Cookie 메커니즘을 활용하여 WebSocket Handshake 시 인증 정보를 자동 전송하는 구조 설계
- HTTP-only Cookie에 JWT를 저장하여 Client-side 코드 변경 없이 보안성과 편의성을 동시에 확보
- Backend의 IncomingMessage 객체에서 raw cookie header를 직접 추출하는 Manual Parsing 로직 구현
- jwt.verify 및 Schema Validation을 통한 토큰 유효성 검증 후 User ID를 추출하는 유틸리티 계층 분리
- 인증 실패 시 4001 Unauthorized 상태 코드로 즉시 연결을 종료하는 Connection Interception 전략 적용
- 인증 완료된 Socket만 메모리 스토어에 매핑하여 세션 기반의 메시지 핸들링 체계 구축
실천 포인트
1. WebSocket API 사용 시 Custom Header 미지원을 고려하여 인증 전략 수립
2. 보안 요구사항에 따라 Token 노출 위험이 큰 Query Parameter 사용 지양
3. HTTP-only Cookie 설정을 통해 XSS 공격으로부터 JWT 보호
4. Backend 연결 수립 단계에서 즉각적인 인증 검증 및 4000번대 Close Code를 통한 명확한 연결 종료 처리