GOOGLE ADS

martes, 26 de abril de 2022

Render.com: la cookie HttpOnly no se configura en el almacenamiento del navegador al hacer res.cookie entre servicios web

Tengo una aplicación NestJs que usa cookies HttpOnly para la autenticación. En desarrollo todo funciona perfectamente. Mi cliente NextJs (http://localhost:4200) usa Graphql para enviar una solicitud de inicio de sesión a mi servidor NestJs (http://localhost:3333), que establece cookies httpOnly en la respuesta, y luego el cliente agrega correctamente las cookies a el almacenamiento del navegador.

Sin embargo, cuando implemento ambas aplicaciones en Render.com, todo funciona excepto el paso final. Las cookies se reciben correctamente en la respuesta, pero no se agregan al almacenamiento del navegador. Curiosamente, si uso el área de juegos de GraphQL del servidor de producción implementado para realizar la solicitud de inicio de sesión, todo funciona. Entonces, claramente, el problema parece ser que la solicitud proviene de un subdominio.

Mi configuración de producción:

Cliente: https://swingapple-web-staging.onrender.com
Servidor: https://swingapple-api-staging.onrender.com

Configuración de cookies (Servidor):

sameSite: process.env.NODE_ENV === 'production'? 'none': 'lax',
secure: process.env.NODE_ENV === 'production',
domain: process.env.NODE_ENV === 'production'? '.onrender.com': undefined

Configuración de GraphQLModule de Nestjs (servidor):

playground: true,
introspection: true,
autoSchemaFile: true,
sortSchema: true,
context: ({ req, res }) => ({ req, res }),
cors: {
credentials: true,
origin: [process.env.CLIENT_URL, 'http://localhost:4200']
}

Configuración relevante de Nest main.ts (servidor):

app.set('trust proxy', 1);

Configuración de solicitud de graphql (cliente):

credentials: 'include'

¡Pasé días tratando de resolver esto, así que cualquier ayuda sería muy apreciada!


Solución del problema

Después de hablar con el soporte de Render.com, me informaron que onrender.com(el dominio para sus subdominios) está en la lista de sufijos públicos, lo que significa que las cookies de sitios cruzados no funcionarán. La solución fue agregar un dominio personalizado para ambos servicios web (que obviamente tiene que ser el mismo, por ejemplo, app.my-custom-domain.com y api.my-custom-domain.com). ¡Hice esto, y ahora todo funciona según lo previsto!

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...