2017-12-14 3 views
1

Wenn ich eine Antwort von meinem Server nach der Authentifizierung zu senden, Ich gründe ein Authentifizierungstoken Cookie im Browser des Clients mit diesen Header:Dot Präfix auf Cookie-Domain zu verhindern CORS Anfrage

Set-Cookie:mysite_auth=encodedJwtHere.JustPretend; SameSite=lax; domain=subdomain.mydomain.com; HTTPOnly; Max-Age=600; Secure; path=/

Wenn jedoch Ich öffne EditThisCookie in Chrome, ich kann sehen, dass die Domain automatisch auf .subdomain.mydomain.com gesetzt wird.

Von dem, was ich dachte, ich verstehe, sollte dies kein Problem sein. Wenn ich im Browser https://subdomain.mydomain.com anfordere, wird der Cookie gesendet.

Mein Problem passiert, wenn ich versuche, eine CORS-Anfrage zu machen. Ich entwickle eine Javascript App und serviere sie auf localhost. Wenn ich einen AJAX-Anruf an https://subdomain.mydomain.com mache, wird der Cookie nicht gesendet.

Ich habe alle die richtigen Header für die Antwort gesetzt:

Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:Content-Type, * Access-Control-Allow-Origin:*

Ich habe die {withCredentials:true} Config auf meine Anfrage.

Wenn ich https://subdomain.mydomain.com im Browser öffnen, dann mit EditThisCookie, ich entferne den Präfix Punkt, I.E. Ich ändere .subdomain.mydomain.com zu subdomain.mydomain.com, plötzlich arbeiten meine AJAX-Anrufe von localhost. Der Cookie wird mit der Anfrage gesendet.

Also meine Frage ist vor allem, warum der Cookie nicht gesendet wird, wenn es einen Präfix-Punkt gibt, und gibt es eine Möglichkeit, dieses Problem zu lösen, ohne die Domäne jedes Mal manuell zu aktualisieren, wenn mein Cookie aktualisiert wird?

+0

Eigentlich scheint der Punkt nichts damit zu tun zu haben. Wenn ich EditThisCookie öffne und einfach auf die Schaltfläche "Speichern" klicke, wird der Cookie für alle nachfolgenden Anfragen gesendet. Es gibt etwas, das verhindert, dass der Cookie auf CORS-Anfragen gesendet wird, bis ich die Cookies manuell aktualisiert habe. –

Antwort

1

Wenn Sie Anmeldeinformationen senden, können Sie nicht mit Access-Control-Allow-Origin:* antworten - Sie müssen mit einem Wert antworten, der den Header der Origin-Anforderung EXAKT spiegelt, z. Access-Control-Allow-Origin: {value-of-Origin-Header}. In Ihrem Fall wäre das vermutlich Access-Control-Allow-Origin: https://subdomain.mydomain.com. Am besten, es nicht hart zu codieren - spiegle nur den Ursprungswert zurück.

Verwandte Themen