Web-API 2.1 Windows-Authentifizierung CORS Firefox

8

Hier ist das Szenario:

Ich habe ein Web-API-Projekt und ein MVC-Projekt wie folgt erstellt:

Ссылка

Ich habe die CORS-Unterstützung über nuget installiert und das EnableCorsAttribute

hinzugefügt

Ich habe das Projekt ausgeführt und alles funktioniert wie erwartet (GET, PUT und POST) über Chrome, IE und FireFox.

Ich habe dann die Windows-Authentifizierung im Web-API-Projekt aktiviert (ja, ich brauche wirklich eine Auth-Berechtigung im API-Projekt). Um dies zum Laufen zu bringen, habe ich das Argument xhrFields zu meinem Aufruf jquery.ajax hinzugefügt:

%Vor%

Außerdem habe ich die Eigenschaft EnableCorsAttribute.SupportsCredentials = true

festgelegt

Ich habe alles ausprobiert. Chrome und IE funktionierten, FireFox nicht. Firefox erhält eine 401 als Antwort auf seine Preflight (OPTIONS) Anfrage.

Es sieht so aus, als ob FireFox keinen Versuch unternimmt, sich mit dem Dienst zu authentifizieren.

Hat jemand eine Lösung für dieses Problem gefunden?

    
ahanusa 04.03.2014, 21:25
quelle

2 Antworten

7

Ich habe eine zweiteilige Lösung gefunden.

Das Problem ist, dass wenn Firefox eine OPTION-Anfrage absetzt und eine 401 verweigert wird, es keinen weiteren Versuch unternimmt, sich erneut zu authentifizieren. Dies führte mich zu einem Pfad, um die Authentifizierung bei allen OPTION-Anfragen zu umgehen. Ich konnte nicht viele Informationen zu diesem Thema finden, aber ich fand das:

401-Antwort für CORS-Anfrage in IIS mit Windows Auth aktiviert

Darauf basierend setze ich die anonyme Authentifizierung in den Einstellungen des API-Projekts auf Aktiviert (die Windows-Authentifizierung war weiterhin auf Aktiviert eingestellt).

Nach dem Ausführen der Projekte (mvc und api) wurde ich beim Ausgeben einer CORS-Anforderung zur Eingabe von Anmeldeinformationen aufgefordert. Nachdem ich meine Anmeldeinformationen eingegeben hatte, konnte ich GET / POST / PUTS mit Firefox erfolgreich erstellen.

Um die Eingabe von Zugangsdaten in Firefox zu vermeiden, erhielt ich einen Tipp von Brock Allen , der mich auf den Weg zur Aktivierung der NTLM-Authentifizierung geführt hat. Ich habe einen Post hier gefunden, der Anweisungen zur Änderung der entsprechenden Einstellungen enthält.

Nachdem ich ' http://localhost ' zu der Einstellung network.negotiate-auth.trusted-uris hinzugefügt habe, kann ich jetzt CORS-Anfragen für alle Verben mit Firefox ausgeben, ohne nach Anmeldeinformationen zu fragen.

    
ahanusa 06.03.2014, 01:01
quelle
0

Ich löse gerade dieses Problem und die Lösung, die anonyme Authentifizierung zu ermöglichen, war etwas, was ich nicht wirklich mochte. So ein wenig zu kämpfen, fand ich die richtige Kombination in diesem Antwort . Ich bin immer noch nicht 100% glücklich, ich möchte den Code in der globalen asax vermeiden, aber durch die Webkonfiguration habe ich Jet nicht erfolgreich.

Ich hoffe, das kann helfen.

    
Manuel 17.04.2015 14:42
quelle