Actualmente nos enfrentamos a un error con la generación de cookies de nuestro cliente/api. Estamos usando Angular 12 y NGINX para un servidor front-end que se ejecuta con SSL en un subdominio de cms.domain.co.uk; el backend ejecuta node.js con pm2 en un subdominio de api.domain.co.uk:3067 con SSL.
Nuestro archivo Backend nodejs tiene el siguiente fragmento de opciones de CORS:
const app = express(); app.use(express.json()); app.use(cookieParser()); app.use(cors({ origin: 'https://cms.domain.cloud', credentials: true, methods: 'GET, POST, OPTIONS', allowedHeaders: 'Origin, Content-Type, X-Auth-Token, Set-Cookie, Authorisation, Accept' }));Estamos configurando la cookie en el archivo node.js de la siguiente manera:
response.cookie('LoginCookie', sid, {httpOnly: true, secure: true, SameSite: "none"});Hemos probado todas las combinaciones posibles de orígenes, etiquetas y políticas y ahora estamos oficialmente perplejos. Disculpe nuestra ingenuidad en CORS ya que venimos de un fondo de origen no cruzado.
El encabezado receptivo del servidor contiene la etiqueta set-cookie, pero la cookie no se configura en el navegador, permitir controles de credenciales se establece en verdadero tanto en POST como en OPCIONES, además de tener el origen establecido para evitar errores CORS.
Este es el encabezado de OPCIONES previo al vuelo enviado:
Este es el encabezado POST enviado con la etiqueta Set-Cookie:
Al iniciar otra ventana de Chrome con el uso de chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security, el navegador reconoce la existencia de la cookie en una sección pero no en el otro:
¡Cualquier comentario o ayuda sería muy apreciada! ¡Gracias!
Una alternativa es recuperar el valor del encabezado Set-Cookie de la clave 'LoginCookie' y almacenarlo en el navegador mediante document.cookie.setItem( 'LoginCookie', <data>)