jquery cross domain authentication
Ich konfiguriert mein Jetty-server zu ermöglichen cross-domain-http-Anfragen (allowedOrigins = *) und auch, um einen cross-domain authentication (allowCredentials=true) mit seiner CrossOriginFilter.
Cross-domain-http-Anfragen ohne Authentifizierung Anforderung arbeiten ok. Nun, wenn es um die http-Aufrufe, die eine Authentifizierung erfordern Es funktioniert nicht mit JQuery. Ich verwende den folgenden code und diesem Beispiel gefolgt: http://www.aswinanand.com/2009/01/http-basic-authentication-using-ajax/
function login(username, password) {
$.ajax({
type: "GET",
contentType: "application/json",
dataType: "json",
url: url,
beforeSend: function(xhr) {
var base64 = Base64.encode(username + ":" + password);
xhr.setRequestHeader("Authorization", "Basic " + base64);
xhr.withCredentials = true;
},
error: function(data){
alert("error");
},
success: function(data){
alert("success");
}
});
Im HTTPFox sehe ich folgende Anfrage an den server:
OPTIONS /login HTTP/1.1
...
Access-Control-Request-Method GET
Access-Control-Request-Headers authorization,content-type
Antwortet der server mit einem
HTTP/1.1 204 No Content
...
Allow OPTIONS,GET,HEAD
Ich auch die folgenden Optionen, die nicht machen einen Unterschied.
$.ajax({
...
username: username,
password: password,
...
}
Die error-Funktion immer feuert.
Jemand eine Idee was das problem sein könnte?
- Sehen Sie diese in Ihre Antwort-header
Access-Control-Allow-Origin:*
? Gute Frage übrigens! Herzlich willkommen auf StackOverflow! - Ich denke, es wäre hilfreich, wenn man zeigen könnte, jede stacktraces im Zusammenhang mit dem Thema als gut.
- ok, bitte überprüfen, um zu sehen, ob das header enthalten ist, in Ihre Antwort. Wenn nicht, dann ist es möglich, die Sicherheit überschreiben, die Antwort-Header. Mehr sehen müssen logs zum Debuggen weiter. Viel Glück! 🙂
- Nein, ich dont sehen, wie diese header in der Antwort vom server. Die Sicherheit der jetty? Welche Art von Protokollen oder stacktraces kann ich bieten?
- Dies würde bei der Rahmen-oder server-Ebene. Die server in der Regel meldet sich die Dinge auf einem sehr viel niedrigeren Niveau als Ihre app macht, so müssten Sie ändern, Protokollierung.Eigenschaften (oder was auch immer-logger, die Sie verwenden), und legen Sie es zu Protokoll zu DEBUGGEN, oder ALLE, so Sie sehen können, was die server-und framework sind dabei unter der Haube. Sie sind auf der Suche für jede Instanz der Header gesetzt wird, ohne die Access-origin-header
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als die Standard-Header erlaubt sind
Ich hatte, um die Header
Gefunden dies über die log-Datei
Danke für die vielen Hinweise!
Die Antwort-Header, die Sie in Ihre Anwendung -- wenn die Sicherheit nicht aktiviert 00 funktioniert Prima, wie haben Sie das bestätigt. Allerdings, wenn die Sicherheitsfunktion aktiviert ist, werden Ihre cross-domain-Anfragen scheitern.
Dies ist wahrscheinlich auf die zusätzliche Filter und zusätzliche Antwort-Header, die gesetzt sind durch die Sicherheits-filter, um eine Antwort generieren.
Um dieses problem zu lösen, die high-level-Lösung ist, dass Sie müssen Ihre response-Header vor dem Zeitpunkt der security-Filter setzt seinen Antwort-Header und/oder begeht Sie an den client.
Du bist auch mit Steg; daher können Sie die Steg Cross-Origin-Filter, um sicherzustellen, dass die Antwort-Header sind in die Filter-Kette, in der Reihenfolge, wie Sie gesetzt werden müssen:
Hier ist eine Liste der Parameter, die Sie übergeben können, die in der Filter-Konfiguration im web.xml:
Standardmäßig Erlaubt die Ursprünge der response-header gesetzt ist
*
werden, was bedeutet, dass standardmäßig jede Anfrage kann aus einer beliebigen Domäne. Sie müssen sicher sein, dies zu ändern, damit nur domains, die Sie beabsichtigen, auf die whitelist, wenn Sie nicht möchten, dass jede Anfrage aus allen Domänen gültig:web.xml Eintrag für den Filter:
Hier ist eine Liste von zusätzlichen Ressourcen, die Sie finden können hilfreich bei der Lösung dieses speziellen Problems:
Steg Cross-Origin-Filter
Access-Control-Allow-Origin nicht erlaubt
Java EE 5 Tutorial - Filterung von Anfragen und Antworten
HttpServletResponseWrapper javadoc - Sie benötigen in diesem Fall müssen Sie das überschreiben der HttpServletResponse-Objekt.
Einstellung Authentication Header im Servlet über Filter
Unterschiede zwischen ServletResponse und HttpServletResponseWrapper?
Wie Sie add-response-Header auf Basis von Content-type; erste Content-type vor der Antwort verpflichtet sich
Für SOAP-Sachen, die erlaubten Header sollte auch messagetype,soapaction
Vorsicht, dass keine wildcard zu konfigurieren erlaubt-Header...