CORS - Die Ajax-Fehlerfunktion meldet den Fehlercode als 0 für eine API-Anforderung, die 401 zurückgibt

9

Hintergrund

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).

Einrichtung

  • (API-Projekt) Visual Studio 2012-Instanz, auf der MVC4-Projekt auf lokalem IIS Express ausgeführt wird

    • Lokale Host-Dateizuordnungen 127.0.0.1 zu api.mycompany.com
    • Projekt festlegen - & gt; Eigenschaften - & gt; Web zu IIS Express
      • Verwenden Sie lokales IIS Express (aktiviert)
      • Projekt-URL: http://localhost:8080
      • Erzeugtes virtuelles Verzeichnis
      • Überschreiben Sie die Anwendungsstamm-URL (aktiviert)
      • Überschreiben Sie die Anwendungsstamm-URL: 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

    • Projekt festlegen - & gt; Eigenschaften - & gt; Web zu IIS Express
      • Verwenden Sie lokales IIS Express (aktiviert)
      • Projekt-URL: http://localhost:22628
      • Erzeugtes virtuelles Verzeichnis
  • Verwenden Sie Google Chrome als Test-Client

  • Verwenden von Fiddler zum Anzeigen von Datenverkehr

Code

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.

API-Projekt

Authorization Header Handler

%Vor%

Stuff Controller

%Vor%

Kundenprojekt

main.html

%Vor%     
Erds 10.01.2013, 22:48
quelle

2 Antworten

3

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%     
Erds 25.01.2013, 15:57
quelle
0

Anstatt den Statuscode direkt auf Ajax zu prüfen, können Sie das mit onComplete unter Verwendung dieses Codes überprüfen ...

%Vor%     
Pratik Bhatt 22.01.2013 05:12
quelle

Tags und Links