2016-07-05 24 views
9

Ich suchte viel auf Google und Stack-Überlauf, um eine Lösung für mein Problem zu finden, aber nichts hat funktioniert.CORS Preflight Anfrage zurück HTTP 401 mit Windows-Authentifizierung

Hier ist mein Problem:

  • I IIS 7 verwenden mit einem speziellen Programmierumgebung namens WebDev, die nicht die direkte Manipulation von OPTIONS HTTP-Methode erlaubt. Daher sind alle Lösungen, die eine Art von serverseitiger Anforderungsverarbeitung unter Verwendung von Code vorschlagen, nicht durchführbar.

  • Ich habe Fenster-Authentifizierung verwenden, und deaktivieren Sie den anonymen Zugriff

  • Ich habe eine Seite, die CORS verwendet, um diesen Server zu senden. Da dieser POST Content-type: Octet-stream haben sollte, wird vom Browser ein Preflight ausgegeben.

  • Wenn ich den anonymen Zugriff aktivieren, funktioniert alles einwandfrei (CORS ist gut konfiguriert)

  • Wenn ich den anonymen Zugriff zu deaktivieren, der Server antwortet mit HTTP 401 nicht autorisierte Antwort auf die Preflight-Anfrage, da es keine Anmeldeinformationen enthalten Information.

  • Ich habe versucht, ein Modul für IIS zu schreiben, die OPTIONS-Anforderungen wie dies akzeptiert, aber es hat nicht funktioniert (könnte das Modul korrekt zu IIS nicht hinzufügen, vielleicht)

    public class CORSModule : IHttpModule 
        { 
    
          public void Dispose() { 
          } 
    
          public void Init(HttpApplication context) 
          { 
           context.PreSendRequestHeaders += delegate 
           { 
            if (context.Request.HttpMethod == "OPTIONS") 
            { 
             var response = context.Response; 
             response.StatusCode = (int)HttpStatusCode.OK; 
            } 
           }; 
          } 
        } 
    

Die Frage is: Wie kann ich IIS veranlassen, mit HTTP 200 auf die Preflight-Anfrage zu antworten, ohne den anonymen Zugriff zu aktivieren oder serverseitigen Code zu schreiben? Gibt es eine einfache Konfiguration oder ein vorgefertigtes Modul für IIS? Zumindest, was sind die detaillierten Schritte, um das obige Modul in IIS 7 zu installieren?

Antwort

7

Hier ist die Lösung, die "URL Rewrite" IIS-Modul verwendet. Es funktioniert perfekt.

1- Stop-IIS-Dienst (vielleicht nicht erforderlich)

2- "Web Platform Installer" Install von https://www.microsoft.com/web/downloads/platform.aspx

3- Gehen Sie zu Registerkarte "Anwendungen" und die Suche nach "URL Rewrite" und es herunterladen

4- Installieren Sie dieses Hotfix KB2749660 (vielleicht nicht erforderlich)

5- Öffnen Sie IIS-Konfigurations-Tool, doppelklicken Sie auf "URL Rewrite"

In

6- neues blankrule

7- Geben Sie ihm einen beliebigen Namen

8- In "Match URL" geben dieses Muster: .*

9- In "Bedingungen", geben diese Bedingung Eintrag : {REQUEST_METHOD} und dieses Muster: ^OPTIONS$

10- In "Aktion" geben: Aktionstyp Personalized response, Staat Code 200, Grund Preflight, Beschreibung Preflight

11- Starten Sie den Server

Nun sollte der Server mit einer 200-Statuscodeantwort auf die Preflight-Anfrage unabhängig von der Authentifizierung antworten.

Bemerkungen: Ich habe auch alle Komprimierung deaktiviert, ich weiß nicht, ob es darauf ankommt.

+2

Lebensretter bro +1 –

0

Damit Ihr Modul Vorrang hat, muss es alle Module in IIS überschreiben, die sich störend auswirken können. Beispielsweise benötigt Ihre web.config-Datei möglicherweise eine anonyme Aktivierung oder Aktivierung und erstellt ein Attribut zum Abfangen des Datenverkehrs und zum Filtern nach Bedarf.

4

Von AhmadWabbi Antwort, einfach XML Einfügen in Ihrer web.config:

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="CORS Preflight Anonymous Authentication" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions> 
        <add input="{REQUEST_METHOD}" pattern="^OPTIONS$" /> 
       </conditions> 
       <action type="CustomResponse" statusCode="200" statusReason="Preflight" statusDescription="Preflight" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer>