5

In IIS habe ich bekam:IE/IIS integrierte Authentifizierungsproblem

http://myserver/myapplication
http://myserver/reports

Die Berichte App Reporting Services in der Tat, die Windows-Authentifizierung verwendet. myapplication ist eine asp.net-Anwendung, die Formularauthentifizierung verwendet.

Der Server befindet sich außerhalb der Unternehmensdomäne. Wenn ich zuerst auf die Berichte zugreife und den Benutzer und das Kennwort (lokale Anmeldeinformationen, die auf dem Server erstellt wurden) eingeben, kann ich auf die Berichtseite zugreifen, ohne Probleme. Wenn ich dann direkt zur Anmeldeseite meiner Anwendung gehe und versuche, mich anzumelden, wird die Anmeldeseite aktualisiert, ohne etwas zu tun. Dies geschieht immer in IE 6. In IE 7 passiert es intermittierend. Es passiert nicht in Firefox oder wenn Fiddler im Hintergrund läuft, was das Problem im laufenden Betrieb zu beheben scheint.

Ich habe wireshark verwendet, um zu sehen, was los ist, und festgestellt, dass IE 6 das Windows-Authentifizierungstoken aus der App Berichte an myapp senden. Das war der einzige Unterschied zwischen IE und Firefox. IIS scheint auszuflippen und interpretiert einfach meinen POST auf der Anmeldeseite als GET und kehrt zurück.

Wenn ich die Windows-Authentifizierung zu meiner Anwendung in IIS hinzufügen, scheint alles mit jedem Browser gut zu funktionieren.

Warum passiert das? Ein Fehler im IE oder fehlt mir etwas?

Antwort

13

Es ist sorta ein Fehler in IE, und sorta einen Fehler in der Gestaltung von NTLM/Negotiate (aka Integrierte) Authentifizierung über HTTP.

NTLM/Negotiate sind verbindungsorientierte Authentifizierungsprotokolle, für die HTTP nicht wirklich entwickelt wurde. Wenn Sie diesen Authentifizierungsmechanismus für eine Seite auf Ihrem Server benötigen, geht der IE daher davon aus, dass andere Seiten auf dem Server die gleiche Anforderung haben.

Darüber hinaus für die Leistung und Sicherheit, wenn IE erwartet ein Verhandeln/NTLM Herausforderung für eine Anforderung gegeben POST, dann wird es zunächst einen 0-Byte-POST senden, um den Server erwartete eine HTTP/401 Herausforderung zurückzukehren, zu dem Es authentifiziert und sendet dann ordnungsgemäß den POST-Nachrichtentext.

In Ihrem Fall, der Ordner, der keine integrierte Auth benötigt, erhält die 0 Byte POST und sagt "Hrm, komisch, ein 0 Byte Post. Okay, HTTP/200, hier ist die Seite, als ob Sie verwendet GET. "

Da IE nie die 401-Herausforderung erhält, die es erwartet, sendet es nie tatsächlich den POST-Nachrichtentext.

(Fiddler kann Sie wegen der Wiederverwendung der HTTP-Verbindung ein wenig verwirren).

Die Problemumgehung besteht darin, sicherzustellen, dass Sie bei Verwendung von Integrated Auth auf dem Host diese überall verwenden.

+0

danke Eric, was wäre die Lösung dafür? IE sollte die ganze POST-Nachricht senden, wie es Firefox tut, oder? Ich denke, IE 8 funktioniert, habe es noch nicht getestet. –