Ich habe eine HTML-Seite, die Anfragen an ein CAS-geschütztes ( zentraler Authentifizierungsdienst ) Web stellen muss Dienst mit den jQuery AJAX-Funktionen. Ich habe den folgenden Code:
%Vor% Die request
-Variable kann entweder zum CAS-Server ( https://cas.mydomain.com/login?service=myServiceURL
) oder direkt zum Dienst (der dann zum CAS zurückgeleitet werden sollte, um ein Service-Ticket zu erhalten) sein. Firebug zeigt, dass die Anfrage gestellt wird und dass sie als 302 Redirect zurückkommt. Die Funktion $.ajax()
verarbeitet die Umleitung jedoch nicht.
Ich habe diese Funktion geschrieben, um das zu umgehen:
%Vor% Aber selbst dann wird die Funktion handleRedirects
niemals aufgerufen, und xmlHttp.status
gibt immer 0
zurück. Es sieht auch nicht so aus, als ob die Cookies mit dem Aufruf cas.mydomain.com gesendet werden. (Siehe diese Frage für ein ähnliches Problem.)
Ist das ein Problem mit den AJAX-Anrufen, die keine Weiterleitungen behandeln, oder ist hier mehr los, als man sieht?
Es ist tatsächlich mehr los als es auf den ersten Blick scheint.
Nach einigen Untersuchungen scheint es, dass jQuery AJAX-Anfragen, die auf diese Weise gemacht wurden, fehlschlagen, wenn sie nicht zur selben Subdomain gemacht werden. In diesem Beispiel werden Anforderungen an cas.mydomain.com
von einem anderen Server gesendet. Auch wenn es sich um mydomain.com
handelt, schlägt die Anforderung fehl, weil die Subdomäne nicht mit übereinstimmt.
jQuery AJAX behandelt Umleitungen ordnungsgemäß. Ich habe einige Tests mit Skripts in derselben Subdomain durchgeführt, um dies zu überprüfen. Darüber hinaus werden Cookies wie erwartet weitergegeben. Siehe meinen Blogpost für diese Forschung.
> Denken Sie auch daran, dass die Protokolle identisch sein müssen. Das heißt, da cas.mydomain.com
HTTPS verwendet, muss die Seite, von der Sie sie aufrufen, auch auf HTTPS sein oder die Anforderung wird fehlschlagen.
Sie können solche domainübergreifenden AJAX-Aufrufe mit einem PHP-Proxy durchführen. Im folgenden Beispiel kann der Proxy REST-Web-Services aufrufen, die eine JSON-Zeichenfolge zurückgeben.
wsproxy.php
%Vor%URL-Nutzung
Beachten Sie, dass eine GET-Anfrage ausreicht, wenn Sie Benutzername und Passwort nicht weitergeben müssen.
%Vor%Cross-Domain-Aufrufe sind vom Browser nicht erlaubt. Der einfachste Weg wäre, JSONP auf der Seite der mobilen Anwendung zu verwenden und ein CAS-Gateway zu verwenden, um ein Ticket zurückzugeben.
Tags und Links jquery authentication redirect