Versión corta: mi token jwt no sobrevive a una actualización cuando apunta al dominio detrás de Cloudfront.
No estoy seguro de si es mejor publicar esto aquí o en stackoverflow, pero como creo que aislé el problema en AWS Cloudfront, pensé en comenzar aquí.
Mi configuración:
- La configuración de DNS de Route 53 apunta a la distribución de Cloudfront
- 1 El comportamiento de Cloudfront toma el tráfico api/* y lo envía al nodo de alojamiento de la instancia ELB EC2/aplicación express
- 1 El comportamiento de Cloudfront toma el tráfico predeterminado y lo envía al depósito s3 donde se encuentran los archivos de la aplicación de una sola página de Vue
- La aplicación Node/express utiliza Passport.js para la autenticación con la estrategia JWT
- Tallo de frijol elástico
En mi local todo perfecto. Cuando ejecuto mi sitio de prueba y visito mi página de perfil, todos los datos del usuario completan los campos correspondientes. Cuando actualizo la página, sucede algo con el token JWT y se pierden todos los datos del usuario. Esto también sucede en otras páginas detrás de la autenticación.
En lugar de apuntar mis llamadas a la API a la etapa de preparación (que está detrás de la nube), intenté apuntar mi API directamente a mi instancia ec2 y todo funcionó perfectamente.
Entonces, con el problema aislado de Cloudfront, ¿qué debo hacer (debo reenviar ciertos encabezados) para que el token JWT se pase correctamente cada vez?
Respuesta1
Si envía su JWT en un encabezado, entonces su suposición era correcta: debe decirle a CloudFront que reenvíe el encabezado al origen. Se puede lograr cambiando Cache Based on Selected Request Headers
la opción en el comportamiento de su caché a uno de estos valores:
- Todo. Esto reenviará todos los encabezados al origen;
- Lista blanca. Luego puede agregar el nombre del encabezado que usa para enviar el JWT (el más común es Autorización).
Tenga en cuenta que esta opción tiene dos funcionalidades:
- para reenviar encabezados específicos/todos a su origen
- para almacenar en caché objetos según esos encabezados.
Asegúrese de comprender cómo esto podría afectar el comportamiento de su caché. Puedes leer más sobre esto enAlmacenamiento en caché de contenido basado en encabezados de solicitud
Hay otra opción que puedes configurar en el comportamiento de tu caché y que casi siempre uso: Object Caching
. Puede configurar el almacenamiento en caché de objetos de Use Origin Cache Headers
esta manera su aplicación puede controlar el almacenamiento en caché de respuestas. Esta configuración puede estar disponible o no según su origen (S3/ALB/EC2) y/o su Cache Based on Selected Request Headers
valor.
Espero que esto ayude.