웹 공부

왜? 개발자들은 JWT 토큰을 Response Header로 전달할까?

HA젠옹 2024. 5. 15. 20:40
반응형

최근 웹 개발에서 보안이 중요한 이슈로 대두되면서, 많은 개발자들이 JWT(Json Web Token)를 활용하여 클라이언트와 서버 간의 안전한 인증을 구현하고 있습니다. 그런데 여기서 흥미로운 점은, 개발자들이 JWT 토큰을 클라이언트에 전달할 때 responsebody가 아닌 responseheader를 통해 전달한다는 것입니다. 왜 그런 걸까요?

1. 보안 향상

CSRF 보호

JWT를 responsebody로 전달하면, 클라이언트는 이를 로컬 스토리지나 세션 스토리지에 저장하게 됩니다. 그러나 이러한 저장 방식은 CSRF(Cross-Site Request Forgery) 공격에 취약할 수 있습니다. JWT를 responseheader로 전달하면 클라이언트는 이를 쿠키에 저장할 수 있고, 쿠키에 SameSite 속성을 설정하여 CSRF 공격을 효과적으로 방지할 수 있습니다.

 

XSS 보호

JWT가 responsebody로 전달되면 클라이언트에서 이를 쉽게 접근할 수 있어 XSS(Cross-Site Scripting) 공격에 노출될 가능성이 높아집니다. 반면, JWT를 responseheader로 전달하여 쿠키에 저장하면, 쿠키에 HttpOnly 속성을 추가할 수 있어 JavaScript로 쿠키를 읽을 수 없게 되어 XSS 공격을 완화할 수 있습니다.

2. 표준 및 관례

JWT를 쿠키에 저장하여 사용하는 것은 일반적인 관례입니다. 이 방법은 클라이언트와 서버 간의 인증을 처리하는 데 있어 표준적이며, 많은 라이브러리와 프레임워크가 이를 지원합니다. 또한, Authorization 헤더에 JWT를 포함시키는 것도 일반적인 관례입니다. 예를 들어, Authorization: Bearer <token> 형식으로 요청 헤더에 포함시키는 것이 RESTful API 디자인에서 널리 사용됩니다.

3. 분리된 역할

프론트엔드와 백엔드 간의 명확한 역할 분리를 유지할 수 있습니다. 백엔드는 클라이언트에게 JWT를 제공하고, 클라이언트는 이를 적절한 방식으로 저장하고 관리합니다. 이를 통해 양측 간의 책임이 명확해지고, 코드의 유지보수가 용이해집니다.

4. 캐싱 및 프록시 서버

HTTP 응답 본문(responsebody)에 토큰을 포함시키면 프록시 서버나 캐싱 메커니즘이 이를 캐시하여 보안 위험이 발생할 수 있습니다. 반면, 응답 헤더는 이러한 캐시 메커니즘에 의해 처리되지 않거나 설정을 통해 제어할 수 있습니다.

실용적인 예시

JWT를 헤더로 전달하여 쿠키에 저장

백엔드에서 JWT를 생성하여 응답 헤더에 설정합니다

response.setHeader("Authorization", "Bearer " + jwtToken);

 

클라이언트에서는 응답 헤더에서 JWT 추출하여 쿠키에 저장합니다

// 클라이언트에서 응답 헤더에서 JWT를 추출하여 쿠키에 저장
const token = response.headers.get('Authorization').split(' ')[1];
document.cookie = `jwt=${token}; HttpOnly; Secure; SameSite=Strict`;

 

JWT를 요청 헤더로 전송

클라이언트에서 요청 헤더에 JWT 포함하여 요청을 전송합니다

// 클라이언트에서 요청 헤더에 JWT를 포함하여 요청 전송
fetch('https://api.com', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${token}`
  }
});

 

결론

개발자들이 JWT를 responsebody가 아닌 responseheader로 전달하는 이유는 보안 강화를 위한 여러 가지 이유가 있습니다. CSRF와 XSS 공격 방지, 표준 및 관례 준수, 역할 분리, 캐싱 및 프록시 서버 문제 해결 등이 그 주된 이유입니다. 이러한 방식을 통해 우리는 더 안전하고 견고한 웹 애플리케이션을 개발할 수 있습니다.

 

JWT 활용한 인증 시스템을 구현할 이러한 이유들을 이해하고 적용한다면, 보안이 강화된 애플리케이션을 구축할 있을 것입니다.

반응형