JSON 웹 토큰으로 인증을 방해하는 Cloudfront

JSON 웹 토큰으로 인증을 방해하는 Cloudfront

짧은 버전: Cloudfront 뒤의 도메인을 가리킬 때 내 jwt 토큰이 새로 고침 후에도 유지되지 않습니다.

이것이 여기 또는 stackoverflow에 게시되는 것이 가장 좋은지 확실하지 않지만 문제를 AWS Cloudfront에 격리했다고 생각하므로 여기서 시작해야겠다고 생각했습니다.


내 설정:

  • Route 53 DNS 설정은 Cloudfront 배포를 가리킵니다.
  • 1 Cloudfront 동작은 api/* 트래픽을 가져와 ELB EC2 인스턴스 호스팅 노드/익스프레스 앱으로 보냅니다.
  • 1 Cloudfront 동작은 기본 트래픽을 가져와 Vue 단일 페이지 앱 파일이 있는 s3 버킷으로 보냅니다.
  • Node/express 앱은 JWT 전략을 통한 인증을 위해 Passport.js를 사용합니다.
    • 엘라스틱 콩나무

내 지역에서는 모든 것이 완벽합니다. 준비 사이트를 실행하고 프로필 페이지를 방문하면 모든 사용자 데이터가 해당 필드에 채워집니다. 페이지를 새로 고치면 JWT 토큰에 문제가 발생하고 모든 사용자 데이터가 손실됩니다. 이는 인증 뒤의 다른 페이지에서도 발생합니다.

내 API 호출을 스테이징(cloudfront 뒤에 있음)으로 지정하는 대신 내 API를 내 ec2 인스턴스로 직접 지정하려고 시도했는데 모든 것이 완벽하게 작동했습니다.

그렇다면 Cloudfront에 국한된 문제인 경우 JWT 토큰이 매번 성공적으로 전달되려면 어떻게 해야 합니까(특정 헤더를 전달해야 합니까)?

답변1

JWT를 헤더로 보내는 경우 가정이 옳았다면 CloudFront에 헤더를 오리진으로 전달하도록 지시해야 합니다. Cache Based on Selected Request Headers캐시 동작의 옵션을 다음 값 중 하나로 변경하면 됩니다 .

  • 모두. 그러면 모든 헤더가 원본으로 전달됩니다.
  • 화이트리스트. 그런 다음 JWT를 보내는 데 사용하는 헤더 이름을 추가할 수 있습니다(가장 일반적인 이름은 Authorization입니다).

이 옵션에는 두 가지 기능이 있습니다.

  1. 특정/모든 헤더를 원본으로 전달하려면
  2. 해당 헤더를 기반으로 개체를 캐시합니다.

이것이 캐시 동작에 어떤 영향을 미칠 수 있는지 이해해야 합니다. 자세한 내용은 다음에서 확인할 수 있습니다.요청 헤더를 기반으로 콘텐츠 캐싱

내가 거의 항상 사용하는 캐시 동작에서 구성할 수 있는 또 다른 옵션이 있습니다 Object Caching. Use Origin Cache Headers애플리케이션이 응답 캐싱을 제어할 수 있는 방식 으로 객체 캐싱을 설정할 수 있습니다 . 이 설정은 원본(S3/ALB/EC2) 및/또는 Cache Based on Selected Request Headers값에 따라 사용 가능 여부가 다를 수 있습니다.

이것이 도움이 되기를 바랍니다.

관련 정보