Ich habe CORS in meiner lokalen Entwicklungsumgebung, wenn die Authentifizierung (JWT) erfolgreich ist. Ich lasse die Klientenseite von localhost ablaufen und in api.mycompany.com für Daten benennen. Mein API-Projekt sucht nach einem gültigen JWT und gibt den Inhalt zurück, wenn es übergeben wird. Ich brauchte eine Weile, um hierher zu kommen, aber das alles funktioniert gut.
Wenn ich kein gültiges JWT sende, antwortet die API richtig mit einem 401 (überprüft dies in Fiddler), aber der Fehlerfunktionsrückruf auf dem Client meldet einen Fehlercode von 0 und einen Status von "Fehler".
Ich möchte, dass die Ajax-Callback-Funktion den Statuscode des Fehlers prüft und wenn es 401 ist, überprüfe die Header für einen Header namens location (der das uri für den Authentifizierungsdienst enthalten wird).
(API-Projekt) Visual Studio 2012-Instanz, auf der MVC4-Projekt auf lokalem IIS Express ausgeführt wird
http://localhost:8080
http://api.mycompany.com:8080
In applicationhost.config unter Sites:
%Vor%(Client-Projekt) Trennen Sie die Visual Studio-Instanz mit der leeren Webanwendung von ASP.net
http://localhost:22628
Verwenden Sie Google Chrome als Test-Client
Verwenden von Fiddler zum Anzeigen von Datenverkehr
Ich denke, das sollten die wichtigen Bestandteile meines Proof of Concept sein. Noch einmal, CORS Preflight und Datenabruf funktionieren alle gut. Es ist nur der nicht autorisierte Fall, der nicht funktioniert. Wenn Sie noch etwas brauchen, lassen Sie es mich wissen. Danke für die Hilfe.
Authorization Header Handler
%Vor%Stuff Controller
%Vor%main.html
%Vor%Ich habe es endlich herausgefunden. Wenn tokenProcessor.IsValid im Berechtigungsheaderhandler false ist, spreche ich zu FailedResponseWithAddressToIdentityProvider und setze dann sofort das Ergebnis und markiere die Aufgabe als abgeschlossen. Daher besuche ich nie den Stuff Controller und bekomme die Access Control Header hinzugefügt:
%Vor%}
Es gibt wahrscheinlich einen besseren Weg, dies zu tun, aber ich habe einfach die Header zu meiner Antwort in der FailedResponseWithAddressToIdentityProvider-Methode hinzugefügt und der Browser sieht schließlich die 401 in Chrome, Firefox und IE8. Hier ist die Änderung:
%Vor%Anstatt den Statuscode direkt auf Ajax zu prüfen, können Sie das mit onComplete unter Verwendung dieses Codes überprüfen ...
%Vor%