wake-up-neo.com

Vermeidung der 401-Antwort für jede Anforderung, die NTLM verwendet

Wir haben hier eine asp.net 3.5-Anwendung mit NTLM-basierter Windows-Authentifizierung. Das System läuft in einem privaten Netzwerk, das tatsächlich über verschiedene geografische Orte (über VPN verbunden) verteilt ist.

Wir versuchen nun, die Leistung der Website zu optimieren. Aufgrund der Funktionsweise von NTLM besteht jede neue Anforderung an IIS aus drei verschiedenen Anforderungen, während die ersten zwei 401 Antworten sind. Wir versuchen, die Anzahl dieser Anfragen auf den Beginn der Sitzung zu reduzieren. Wir haben diese Lösung gefunden. Leider hat sich daran nichts geändert und wir erhalten diese 401-Antwort (die Zeit kostet).

Um den Verkehr zu sehen, habe ich zuerst die Fiddler-App verwendet. Irgendwie, wenn ich Fiddler verwende, gibt es zu Beginn der Sitzung nur einen Authentifizierungsprozess (genau so, wie ich es wünsche), aber wenn ich Fiddler schließe und den Verkehr über WireShark überprüfe, kann ich feststellen, dass ich immer noch diese 401-Antwort für jede Anfrage habe .

Die verwendeten Clients sind IE6, IIS Version 6.

Kann jemand beraten?

28
Satumba

NTLM/Negotiate sind im Gegensatz zu allen anderen HTTP-Authentifizierungsschemata verbindungsorientierte Protokolle.

In IIS gibt es verschiedene Einstellungen, die steuern, ob für alle Anforderungen einer zuvor authentifizierten Verbindung eine Authentifizierung verlangt wird (z. B. AuthPersistSingleRequest). Unabhängig von dieser Einstellung glaube ich, dass IIS automatisch eine erneute Authentifizierung erfordert, wenn Sie eine POST -Anforderung durchführen.

Wenn Ihr Server die Wiederverwendung von Verbindungen beeinträchtigt (z. B. durch Senden einer Verbindung: Schließen Sie den Header in den Antworten), müssen Sie dies beheben, da andernfalls die erneute Authentifizierung erfolgt. Sie können mit Fiddler leicht nach solchen Authentifizierungs-Wiederverwendungs-Foliendateien suchen.

19
EricLaw

Die einzige Möglichkeit ist, NTLM nur auf der Anmeldeseite zu verwenden und Cookies wie hier zu verwenden.

4

Zu einem verwandten Thema; Wenn Sie IIS7.0 und Kerberos-Authentifizierung verwenden, kann AuthPersistNonNTLM = true verwendet werden, um 401 Roundtrips für jede Anforderung zu vermeiden.

http://msdn.Microsoft.com/de-de/library/aa347548(VS.90).aspx

http://blogs.technet.com/b/configurationmgr/archive/2010/06/03/solution-you-may-experience-slow-performance-when-using-bits-and-kerberos-authentication-on- configmgr-2007-distribution-points.aspx

3
dparnas

Hast du das in deiner Domain ausprobiert?

setspn -a FQDNServerName applicationPoolServiceAccount
setspn -a biosServerName applicationPoolServiceAccount

Dadurch kann der Anwendungspool NTLM-Authentifizierungsanforderungen bedienen.

3
cfburns

Möglicherweise handelt es sich dabei um Ihre Sicherheitseinstellungen für den Standort im IE6. Wechseln Sie zu einem lokalen Intranett oder einer vertrauenswürdigen Site.

2
Shiraz Bhaiji

Ich habe genau das gleiche Problem! Ich benutze dieselbe Umgebung wie Sie. Nur dass ich sogar 2 401 in Fiddler sehe. Ich hatte ein paar Tage mit diesem Problem verbracht und dann einfach aufgegeben. AuthPersistence hat bei mir auch nicht funktioniert. Aber hier sind die Links, die ich gefunden habe, vielleicht funktionieren sie in Ihrem Fall.

http://msdn.Microsoft.com/de-de/library/ms525244.aspx

http://www.Microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/b0b4ec5c-74f8-43e9-ac64-d8b852568341.mspx?mfr=true

http://technet.Microsoft.com/de-de/library/cc786094.aspx

http://technet.Microsoft.com/de-de/library/cc781339(WS.10).aspx

Ich habe versucht, das Flag sowohl auf der Ebene des virtuellen Verzeichnisses als auch auf der Website zu setzen, aber es hat nicht geholfen. Verwenden Sie den Metabase Explorer IIS, um diese Eigenschaften zu bearbeiten? Dies ist die sauberere Methode zum Bearbeiten von Eigenschaften und kann mehr helfen, als die XML-Datei direkt zu bearbeiten.

Eine Möglichkeit, das Problem zu umgehen, besteht darin, den Cache-Control-Header in die HTTP-Antwort für die Ressourcen einzufügen, die auf keiner Seite häufig geändert werden. In meinem Fall habe ich die css zwischengespeichert (möglichst externe css verwenden, um dies zu optimieren), js und img-Dateien. Da ich ca. 60 Dateien dieser Art auf unserer Homepage geladen habe, konnten wir ca. 120 401 Fehler sofort beseitigen! 

Stellen Sie sicher, dass Sie den Cache-Control-Header verwenden und nicht das auf dem If-modifizierten oder E-Tag-basierende Caching, bei dem ein 401 und ein 304 immer noch generiert werden, selbst wenn die Dateien zwischengespeichert werden.

1
Punit Vora

Ich hatte auch dieses Problem, mit der Ausnahme, dass dies für mich hauptsächlich JS- und CSS-Dateien waren. Meine Website (wie die meisten Websites) speichert JS- und CSS-Dateien in eigenen Verzeichnissen. Daher bestand die Lösung für mich darin, einfach diese Verzeichnisse in IIS aufzurufen und Anon Auth zu aktivieren (ich sage einfach, aber es hat über zwei Jahre gedauert, bis ich das herausgefunden habe; danke an diesem Beitrag). Die Site erfordert jetzt noch Windows auth, die Unterverzeichnisse für JS- und CSS-Dateien jedoch nicht. IOW, es scheint perfekt zu funktionieren.

Ich würde auch niemals vertrauliche Informationen in eine JS-Datei (oder CSS-Datei für diese Angelegenheit) einfügen und würde vorschlagen, dass Sie dies auch nicht tun. In diesem Fall möchten Sie natürlich die vertraulichen Informationen in diesen Dateien aus diesen Verzeichnissen verschieben.

0
krowe2