Frage Problembehandlung bei Windows-Authentifizierungsproblemen (keine Abfrage) in IIS 7.5?


Ich weiß, dass es Tausende von Berichten von Leuten gibt, die Schwierigkeiten haben, integrierte Windows-Authentifizierung für die Arbeit mit IIS zu bekommen, aber sie scheinen alle zu Webseiten zu führen, die nicht zutreffen oder Lösungen, die ich bereits ausprobiert habe. Ich habe schon Dutzende solcher Seiten eingerichtet, also ist entweder etwas Bizarres mit dem Server / der Konfiguration los, oder ich habe mir das zu lange angesehen und nicht das Offensichtliche gesehen.

Einfach gesagt, alles funktioniert perfekt auf meiner lokalen Maschine, fällt aber auf dem Produktionsserver auseinander, was ich, soweit ich sagen kann, hat genau dieselbe Konfiguration.

Auf dem lokalen Rechner:

  • Auf dem Computer wird Windows 7 Ultimate, Service Pack 1, IIS 7.5 ausgeführt.
  • Die Website wurde erfolgreich getestet, wobei sowohl IIS als auch der VS Web Development Server verwendet wurden.
  • Die IIS-Standortkonfiguration hat alle Authentifizierungsmethoden deaktiviert außer Windows-Authentifizierung
  • Der lokale Computer befindet sich nicht in einer Domäne.
  • Die Provider sind Verhandeln und NTLM (nicht verhandeln: Kerberos).
  • Erweiterter Schutz ist ausgeschaltet.
  • Alle getesteten Browser (IE, Firefox, Chrome) zeigen die Eingabeaufforderung an und erlauben mir, mich bei der localhost Domain mit meinem (lokalen) Windows-Account.
  • Alle getesteten Browser arbeiten auch mit einer undurchsichtigen lokalen IP-Adresse - daher scheint es den Browsern selbst egal zu sein, ob die Site "lokal" oder "remote" erscheint.
  • Ich habe der Webseite eine Anzeigezeile hinzugefügt, die den aktuell angemeldeten Benutzer anzeigt und genau zeigt, was ich erwarten würde (egal, welcher lokale Benutzer ich mich anmeldete).

Auf dem Remote-Computer:

  • Auf dem Server wird Windows Server 2008 R2, IIS 7.5 ausgeführt.
  • Das Laden der Webseite führt zu einem sofortig 401.2 Fehler: Sie sind aufgrund ungültiger Authentifizierungsheader nicht zum Anzeigen dieser Seite berechtigt.  Keine Aufforderung erscheint jemals.
  • Die IIS-Standortkonfiguration hat alle Authentifizierungsmethoden deaktiviert außer Windows-Authentifizierung
  • Der Remote-Computer befindet sich nicht in einer Domäne.
  • Die Provider sind Verhandeln und NTLM (nicht verhandeln: Kerberos).
  • Erweiterter Schutz ist ausgeschaltet.
  • Auf dem Remotecomputer (Remotedesktopsitzung) wird derselbe Fehler in Internet Explorer angezeigt, unabhängig davon, ob es sich um die Domäne handelt localhost oder die externe IP-Adresse.
  • Wenn ich versuche, die Fernbedienung Website von meinem lokal Maschine, der Fehler ist immer noch 401, aber eine etwas andere 401. Kein Subcode, mit dem Text: Zugang wegen ungültiger Zugangsdaten verwährt.
  • Das Windows-Authentifizierung IIS-Rollenfunktion ist Eingerichtet.
  • Das WindowsAuthentifizierung Modul ist hinzugefügt (auf Serverebene).
  • Der genau gleiche Fehler tritt auf, wenn ich die Windows-Authentifizierung deaktiviere und die Standardauthentifizierung aktiviere.
  • Der Standort tut lade, wenn ich die Windows-Authentifizierung deaktiviere und Anonymous (offensichtlich) aktiviere.
  • Ich habe bereits alle Schritte zur Fehlerbehebung des Microsoft-Supports durchgeführt: Problembehandlung bei HTTP 401-Fehlern in IIS
  • Ich habe es schon ausprobiert Umgehung, die auf einer anderen Microsoft-Supportseite angezeigt wird (angeblich NTLM als einzige Methode zu erzwingen).

Last but not least habe ich versucht, FREB für 401.2-Fehler einzuschalten und die Ergebnisse scheinen mir nichts nützliches zu sagen. Ich sehe nur die folgende Warnung:

MODULE_SET_RESPONSE_ERROR_STATUS

Modulname IIS Web Core
    Benachrichtigung 2
    HttpStatus 401
    HttpReason nicht autorisiert
    HttpSubStatus 2
    Fehlercode 2147942405
    ConfigExceptionInfo
    Benachrichtigung AUTHENTICATE_REQUEST
    ErrorCode Zugriff wurde verweigert. (0x80070005)

... das scheint mir nur zu sagen, was ich bereits weiß (dass es einfach die Anfrage ablehnt, anstatt die Anmeldeinformationen zu verhandeln).

Die Ablaufverfolgung zeigt an, dass das WindowsAuthentication-Modul korrekt geladen wird, da es a NOTIFY_MODULE_START Linie mit ModuleName = WindowsAuthentication (und verschiedene andere ASP.NET-Folgeereignisse - [un] glücklicherweise keine interessanten Fehler oder Warnungen hier).

Kann mir jemand sagen, was ich hier vermisse?


Schnelles Update:

Es ist mir ein wenig unangenehm, einen ganzen Wireshark-Dump zu senden, da dies IPs, URLs und andere Dinge offenbaren würde, aber ich habe die HTTP-Antworten von localhost und dem Remote-Server in Fiddler nebeneinander verglichen - Was ist das Problem?

Localhost:

HTTP / 1.1 401 Nicht autorisiert
Cache-Steuerung: privat
Inhaltstyp: text / html; charset = utf-8
Server: Microsoft-IIS / 7.5
WWW-Authenticate: Verhandeln
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Datum: Sa, 17 Dez 2011 23:42:34 GMT
Inhaltslänge: 6399
Proxy-Support: Sitzungsbasierte Authentifizierung

Fernbedienung:

HTTP / 1.1 401 Nicht autorisiert
Inhaltstyp: text / html
Server: Microsoft-IIS / 7.5
X-Powered-By: ASP.NET
Datum: Sa, 17 Dez 2011 23:43:13 GMT
Inhaltslänge: 1293

Abgesehen von einigen scheinbar unwichtigen Unterschieden wie Cache-Control ist der Hauptunterschied, dass Der Remote-Server sendet die WWW-Authenticate-Header nicht zurück an den Client.

Also, das schränkt die Frage auf: Warum sendet IIS keine WWW-Authenticate-Header, wenn die Windows-Authentifizierung scheinbar installiert, geladen und ausschließlich aktiviert ist?


20
2017-12-17 21:11


Ursprung


Denken Sie daran, einen Klartext-Drahtshark des Authentifizierungsversuchs zu erfassen (ändern Sie Ihr Passwort zu etwas Wegwerfendem - wir wollen Ihr echtes Passwort nicht im Netz hashen)? 18 Monate oder so hat ein Windows-Patch einige Änderungen an der HTTP-NTLM-Verhandlung vorgenommen (übrigens, sind die Systeme vollständig gepatcht worden?), Was die App eines Anbieters in die Luft sprengte und mir viel mehr Erfahrung gab, als ich bei der Analyse zugeben möchte Verhandlungsgespräche. - Shane Madden♦
@ShaneMadden: Ich mache mir Gedanken wegen all der verschiedenen Informationen, die ich veröffentlichen würde, aber ich kann eine Fiddler-Sitzung machen, die fast die gleiche sein sollte, und dann kann ich zumindest IPs anonymisieren und so weiter - und in der Tat habe ich bereits getan, sollten die Ergebnisse ziemlich selbsterklärend sein (der Client zeigt nicht die Anmeldeinformationen Eingabeaufforderung, weil der Server keine fragt). - Aaronaught
Oh, interessant, Jemand scheint dieses Problem bei Stack Overflow gemeldet zu haben außerdem - leider keine Antworten dort. - Aaronaught
@Aaronaught Wie hast du hier einen anderen Benutzernamen als beim Kochen bekommen? Als ich diese Frage zum ersten Mal sah, dachte ich, es wäre jemand, der dich veräppelt hat. - Ward♦
@Ward: Jeder kann seinen Benutzernamen bearbeiten, es ist Teil des Profils. Das war mein Original, benutze nur andere auf den Nicht-Tech-Seiten. - Aaronaught


Antworten:


Problem gelöst. Ich entschied mich schließlich, das zu vergleichen Modul liste Seite an Seite auf und da fehlte tatsächlich einer. Es stellt sich heraus, dass es da ist zwei Windows-Authentifizierungsmodule:

Module List

Auf dem Server verwaltet WindowsAuthentication Modul war da, aber nicht der Eingeborene WindowsAuthenticationModule oben hervorgehoben. Warum es auf diese Weise konfiguriert wurde, ist eine Vermutung, aber wenn das native Modul nicht geladen ist, wird das verwaltete Modul scheinbar fröhlich geladen und stürzt im Hintergrund ab.

Also für alle zukünftigen Leser, die dieses Problem haben, stellen Sie sicher, dass Sie haben beide Module geladen, weil IIS wird dich nicht warnen wenn einer von ihnen fehlt.


13
2017-12-18 00:21



Das verwaltete WindowsAuthentication-Modul ist nicht so, wie es sich anhört. Es unterstützt Windows-Identitäten in ASP.Net, und es wird immer installiert (wenn ASP.Net installiert ist). Aber die Windows-Authentifizierung einheimisch Das Modul wird installiert, wenn Sie die Windows-Auth-Komponente im Server-Manager ankreuzen. Dies ist erforderlich, damit diese Authentifizierungsoption in der Authentifizierungs-GUI sichtbar wird. - TristanK
@TristanK: In diesem Fall wurde diese Komponente angekreuzt, aber das Modul wurde nicht installiert. (Die Option war jedoch in der Authentifizierungs-GUI sichtbar - daher bin ich mir ziemlich sicher, dass der Bildschirm vom verwalteten Modul abhängt, nicht vom systemeigenen.) - Aaronaught
Ich denke, dass es auf diese Weise aufgrund einiger Manipulationen mit den Konfigurationsdateien (wahrscheinlich ApplicationHost.config) gekommen sein könnte. Aber ich denke, es spielt keine Rolle, wie alles aus dem Ruder läuft; es tat es. - Aaronaught
Nun, klar. Windows Auth funktioniert nicht - es sei denn, etwas passiert, um es zu brechen; In diesem Fall, während die Frage besagt, dass die Konfiguration identisch ist, stellt sich heraus, dass sie nicht wahr ist; also hat es nicht funktioniert. QED. - TristanK
Dieses fehlende Modul-Problem hat mich in Windows Server 2012 R2 nur ein bisschen gebissen. Es ist unglaublich, dass es keine Anzeichen gibt, wenn diese Bedingung eintritt. Wie auch immer, vielen Dank für diese Antwort; Ich habe mir buchstäblich die Haare ausgerissen! - Rob Davis


Wir stellten fest, dass dies nicht unbedingt das Problem für Entwickler behoben hat, die lokal auf ASP.NET-Sites arbeiten, die unter Windows-Authentifizierung ausgeführt werden. Wir haben einen Registry-Hack gefunden, der die Loopback-Prüfung deaktiviert; das hat es behoben: -

Registrierungsschlüssel - HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa

Erstellen Sie ein DWORD mit Wert 1 namens "DisableLoopbackCheck"

Sie müssen den Computer neu starten, damit die Einstellung wirksam wird


4
2017-08-30 04:30



Ich fand heraus, dass ich zwischen DisableLoopbackCheck 1 und 0 wechseln konnte, und die Änderung würde sofort wirksam werden. Außerdem können Sie die Ereignis-ID 4625 im Sicherheitsprotokoll des Ereignisprotokolls mit der Meldung "Das Konto konnte sich nicht anmelden" anzeigen. - alastairtree
Vielen Dank! Zwei Tage mit IIS-Authentifizierung und .NET-Versionen, nur um herauszufinden, dass ich meine Host-Datei verwendet habe, um einen Dummy-DNS-Eintrag zu erstellen, während ich eine Site-Migration testete. - JohnLBevan