401-Antwort für CORS Anfrage in IIS Windows Auth aktiviert
Ich versuche, zu aktivieren, CORS-support in meinen WebAPI-Projekt, und wenn ich Sie aktivieren Sie Anonyme Authentifizierung, dann funktioniert alles einwandfrei, aber mit Windows-Auth + deaktiviert die anonyme Authentifizierung, die OPTIONS-Anfrage gesendet gibt immer einen 401 unauthorized Antwort. Die Seite anfordert, ist es auf der DOMÄNE so sollte in der Lage sein, den Anruf zu tätigen, gibt es eine Möglichkeit, um das Problem ohne deaktivieren der Windows-Authentifizierung?
- Haben Sie überprüft, ob die Integrierte Windows-Authentifizierung ist tatsächlich unterstützt auf Ihrem Computer? http://technet.microsoft.com/en-us/library/cc754628%28v=WS.10%29.aspx
- Ja, läuft auf W7 Ultimate & auch auf Server 2008. Ich werde die paste in eine Antwort habe ich von MS, es scheint möglich, nur eben nicht einfach durch irgendwelche Mittel, wir gehen zum Schalter, um eine weitere oauth-Stil statt und trennen unseren API für die anonyme auth, aber Problem-Token zur Autorisierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nur die OPTIONEN, die verb für anonyme Benutzer.
Laut W3C-Spezifikationen, browser schließt Benutzer-Anmeldeinformationen von CORS preflight: https://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#preflight-request
Einige Jahre später, aber durch die Antwort von @dariusriggins und @lex-li ich habe es geschafft, fügen Sie den folgenden code, um meine Globalen.asax:
den httpOrigin ist eigentlich blickte in eine Liste von erlaubten hosts aber, dass nur komplizierte Dinge. Dies bedeutet, dass alle anderen Anforderungen werden validiert, aber Optionen gibt.
Vielen Dank für diese Frage, wäre ich verloren gewesen ohne Sie!
withCredentials
im HTTP-header. Danke!!!Von MS:
Wenn Sie anonyme Authentifizierung deaktivieren, es ist von design, IIS zurückkehren würde, 401, auf jede Anfrage. Wenn Sie aktiviert haben Windows-auth, der 401-Antwort in diesem Fall hätte eine WWW-Authenticate-header an den client starten, einen Authentifizierungs-handshake. Die Frage ist dann, ob der client, dass der Kunde tun kann, Windows-Authentifizierung oder nicht.
Schließlich, wie es scheint, gibt es möglicherweise eine zugrunde liegende Frage, ob es möglich ist oder nicht konfigurieren einer URL so, dass der anonyme Zugriff erlaubt ist, für ein verb (OPTIONEN, in diesem Fall), brauchen aber Windows-Authentifizierung für alle anderen Verben. IIS nicht unterstützt, dies durch einfache Konfiguration. Es könnte möglich sein, dieses Verhalten durch die Aktivierung Anonyme und Windows-Authentifizierung festlegen von ACLs auf die Inhalte, die den Zugriff verweigern Sie dem anonymen Benutzer, und dann konfigurieren der Handlerzuordnung für die URL in Frage, so dass es nicht überprüfen Sie die Existenz der Datei mit der zugehörigen URL. Aber es würde einige spielen mit ihm, um dies zu bestätigen.
HttpApplication.BeginRequest
Veranstaltung, wo dieses Modul gibt den erwarteten 200-Antwort für die preflight-Anfragen. Diese Problemumgehung gilt nur für IIS 7+ integrierter Modus. Leider ist der Microsoft-support vielleicht nicht bewusst sein, dieser Tipp.Der einfachste Weg, um dies zu beheben, erstellen Sie eine rewrite-Regel mit der Bedingung request_method = ^ - OPTIONEN$. Legen Sie dann die Aktion, eine eigene Antwort, auf 200 OK. Dann alle Optionen-Anforderungen reagieren mit 200 statt 401. Wird dieses Update die CORS-Problem.
Natürlich müssen Sie noch sicherstellen, dass Sie die richtige cross-origin-request-Header.
Dies wird stop-Optionen, Anträge (die müssen keine Anmeldeinformationen) reagiert mit 401, wenn die integrierte auth aktiviert ist.
Die akzeptierte Antwort ist korrekt, allerdings war ich zur Fehlerbehebung eine rest-api mit einem "Knoten mit iisnode und npm cors-Modul" setup für eine Weile und war nicht zufrieden mit nur der Aktivierung der anonymen Authentifizierung für alle Benutzer. Da es ein Knoten-Anwendung das system.web tag nicht viel tun. Ich landete mit der folgenden Ergänzung auf das web.config:
Ich habe laufen in gleichen Problem heute aufgrund des Fehlers in IE 10 und 11, ich bin mit ServiceStack statt WebApi, aber der Ansatz kann auch für Sie arbeiten.
Nachdem Sie durch alle Filter, es führt den Dienst aus.
CorsFeature.cs
AuthenticateFilter
In meinem AppHost,
Habe ich geändert, die CorsFeature zu handhaben OptionsRequest neben Sie Header hinzufügen, Prüfen-Filter prüfen-Anforderungen authentifiziert!
Verwandte Frage: IIS entführt CORS Preflight-OPTIONS-Anfrage
Zusammenführen von Informationen aus Antworten gefunden, die in mehreren Orten. Wenn Sie brauchen, um CORS auf einer ASP.net Seite Methode mit der Windows-Authentifizierung im intranet, dies ist, was scheint zu funktionieren. Ohne die änderungen zu
web.config
so funktioniert das nicht.Müssen Sie fügen Sie diese an
Global.asax
Und diese zu
web.config
Ich bin mit der Web API und OWIN und ich habe versucht, jeden Vorschlag, aber das einzige was geklappt hat war den folgenden
müssen Sie fügen Sie diesen code irgendwo in Ihre OWIN startup-Klassen.
Es ist wichtig zu nennen
app.UseStageMarker(PipelineStage.Authenticate)
weil sonst die preflight-check fehlgeschlagen.Weitere infos für UseStageMarker -> https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline
Es ist auch wichtig, dass Sie explizit definieren, die erlaubt Header. Es wird scheitern, wenn Sie
*
als Platzhalter.Vielleicht hilft es jemanden.
Ich verstehe, das ist eine alte Frage mit mehreren möglichen Lösungen (sowie weitere Fragen), aber falls jemand anderes auf diesen, IIS CORS 1.0 ist verfügbar ab Nov '17:
https://blogs.iis.net/iisteam/introducing-iis-cors-1-0
https://docs.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference
Herunterladen können Sie es über den IIS Windows-Plattform Installer (WPI). Dies sollte zu lösen viele Ihrer CORS-Authentifizierung Probleme. Genießen Sie!
<cors enabled="true"> <add origin="http://192.168.3.253:5001" allowCredentials="true" maxAge="120"> <allowHeaders allowAllRequestedHeaders="true" /> <allowMethods> <add method="GET" /> <add method="HEAD" /> <add method="POST" /> <add method="PUT" /> <add method="DELETE" /> </allowMethods> </add> </cors>
Was für mich gearbeitet (bei der Arbeit mit AngularJS oder JQuery) ist das hinzufügen withCredentials:true, um jeder Anforderung auf dem client:
Und ermöglicht CORS auf dem server, dies wurde mit Microsoft.Owin.Cors von nuget und hinzufügen in den Autostart wie folgt:
Referenzen:
Aktivieren SupportCredentials auf EnableCorsAttribute in der WebApiConfig.cs hat den trick für mich:
https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
Stellen Sie sicher, dass Sie senden Sie die Anmeldeinformationen beim Aufruf aus javascript (
{withCredentials :true}
)