HTTP API 호출 시 access token을 헤더와 바디에 보내는 것 사이에는 몇 가지 중요한 보안상 차이점이 있습니다:
주요 보안 차이점
1. 로깅 및 모니터링
- 헤더: 대부분의 웹 서버와 프록시는 기본적으로 Authorization 헤더를 로그에서 마스킹하거나 제외합니다
- 바디: 요청 바디는 디버깅 목적으로 로그에 기록될 가능성이 높아 토큰이 평문으로 노출될 위험이 있습니다
2. 캐싱 동작
- 헤더: HTTP 캐시는 Authorization 헤더가 있는 요청을 기본적으로 캐시하지 않습니다
- 바디: 바디에 토큰이 있어도 캐시 정책에 따라 응답이 캐시될 수 있어, 의도치 않은 토큰 노출 위험이 있습니다
3. 프록시 및 미들웨어 처리
- 헤더: 표준 인증 헤더로 인식되어 보안 미들웨어에서 적절히 처리됩니다
- 바디: 일반 데이터로 취급되어 보안 처리가 누락될 수 있습니다
4. 브라우저 개발자 도구
- 헤더: 네트워크 탭에서 볼 수는 있지만, Authorization 헤더임을 명확히 인식할 수 있습니다
- 바디: 일반 데이터처럼 보여 개발자가 민감한 정보임을 놓칠 수 있습니다
권장사항
// ✅ 권장: Authorization 헤더 사용
fetch('/api/data', {
headers: {
'Authorization': 'Bearer ' + accessToken,
'Content-Type': 'application/json'
}
});
// ❌ 비권장: 바디에 토큰 포함
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
accessToken: accessToken,
otherData: data
})
});
결론: Authorization 헤더를 사용하는 것이 보안상 더 안전하며, HTTP 표준을 준수하는 방법입니다. 대부분의 보안 도구와 인프라가 이를 전제로 설계되어 있어 더 나은 보안 보장을 제공합니다.