2012-04-13 6 views
4

Ich portiere eine clientseitige Bibliothek für eine API von JSONP zu CORS. Ich habe alle richtigen Header im Server und alle angegebenen Dinge im Client, aber ich habe ein Problem mit Cookies. Diese API-Authentifizierungsmethode funktioniert mit Cookies. Mit JSONP wurde eine GET-Anfrage an die API mit dem API-Schlüssel als Parameter gestellt. Dann hat der Server einen Cookie auf api.io.holalabs.com (API URL) gesetzt, so dass der Server beim nächsten Aufruf der API den Cookie anfordert und die Anmeldung vornimmt. Das Problem ist, dass, obwohl ich Set-Cookie in den Headern sehe, der Cookie nicht auf api.io.holalabs.com gesetzt ist, so dass die Anmeldung fehlschlägt. Das sind meine Header:Setzen von Cookies durch eine CORS-Anfrage

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version 
Access-Control-Allow-Methods:GET 
Access-Control-Allow-Origin:http://holalabs.com 
Access-Control-Expose-Headers:X-Api-Version, X-Request-Id, X-Response-Time 
Connection:close 
Content-Length:13 
Content-MD5:RjkY1fW5i5MKifxPk+r4tg== 
Content-Type:application/json 
Date:Fri, 13 Apr 2012 16:06:56 GMT 
Server:nginx/1.0.14 
Set-Cookie:apikey.sig=DYyrzLFUfJSjsmK5crkxHQg-rxQ; path=/; httponly 
X-Api-Version:1.0.0 
X-Request-Id:c78b4223-1caf-42db-a99e-b075bdc10ea5 
X-Response-Time:2 

EDIT: Mit Cookies in einer API ist eine schreckliche Idee, jetzt sind wir mit einem Header der Benutzer-Auth. Problem geschlossen!

+1

Welche Header haben Sie? 'Authentifizierung: Base ....'? – pabera

Antwort

0

Ausgabe wird angeblich geschlossen, aber wenn jemand dieses Problem auftritt und die Cookies zu verwenden, hier ist eine mögliche Erklärung und Lösung:

Erklärung

Die Session-ID wird als Cookie gesendet, und seit Die Anfrage ist domainübergreifend und wird vom Browser als Drittanbieter-Cookie betrachtet. Mehrere Browser blockieren Cookies von Drittanbietern und die Sitzung ist verloren.

Lösung

die Session-ID generieren auf dem Client (im Browser), verwenden Sie Javascript session die Session-ID zu speichern, dann mit jeder Anforderung an den Server die Session-ID senden.

(Details: Javascript Cross-Domain Request With Session)

Verwandte Themen