🤔 액세스 토큰을 응답 바디에 포함하는 게 위험할까?
📌 바디 vs 헤더, 보안적으로 차이가 있을까?
- 액세스 토큰을 응답 바디에 포함하는 것과 응답 헤더에 포함하는 것의 보안적인 차이는 크지 않다.
- 중요한 것은 클라이언트가 토큰을 어디에 저장하느냐이다.
📌 XSS 공격과 저장 위치
- XSS 공격(악성 스크립트 삽입) 시,
localStorage
또는 sessionStorage
에 저장된 토큰이 유출될 수 있다.
- 따라서, 메모리에 저장하는 방식이 가장 안전하다.
Authorization
헤더에 저장하면 localStorage
사용을 방지할 수 있어 보안적으로 더 안전할 수 있다.
📌 CSRF 공격과 저장 위치
- 쿠키에 저장된 토큰은 자동 전송되므로 CSRF 공격 대상이 될 수 있다.
- CSRF 방지를 위해
SameSite=strict
속성을 설정하거나 CSRF 토큰을 별도로 관리해야 한다.
Authorization
헤더를 사용하면 CSRF 공격을 방어할 수 있다.
🔐 결론: 안전한 토큰 관리 방법
✅ 권장 방식:
- 액세스 토큰 → 응답 바디에 포함하고, 클라이언트는
Authorization
헤더로 관리 (메모리 저장 추천)
- 리프레시 토큰 → HttpOnly & Secure 쿠키에 저장하여 자동 전송 (CSRF 방어 필요)
✅ 지양해야 할 방식:
- 액세스 토큰을
localStorage
에 저장하는 것 ❌ (XSS 위험)
- 리프레시 토큰을 응답 바디에 포함하는 것 ❌ (클라이언트가 직접 저장하게 됨)