2009-06-29 8 views
2

aktualisiertIIS/Directory/ASP.NET - Anmeldung fehlgeschlagen

Putting dies an der Spitze, weil es verrückt ist :)

So mancher Anwender hat es funktionieren, andere nicht. Wenn ich mein eigenes Konto über IE7 verwende, funktioniert es nicht (mein Code fängt die Ausnahme ab und greift einfach auf den Identitätsnamen anstelle des AD-Vollnamens zurück). Wenn ich es über Chrome ausprobiere, werden wir aufgefordert, den Benutzernamen und das Passwort einzugeben, die ich angegeben habe, und der vollständige Name wird angezeigt. Das Benutzerkonto, der Servercode und die Einstellungen sind also identisch, aber wenn Sie einen anderen Browser verwenden, um die Authentifizierung zu senden, funktioniert es.

Ich löschte auch alle Cookies von IE7, neu gestartet, und es gab keine Änderung in IE Verhalten. Viele Benutzer von IE7 haben es funktioniert gut.

Update # 2

Remotely in eine andere Maschine angemeldet, ging in IE7 auf die Seite, und es zeigt meinen vollen Namen. Keine Ahnung. Ich dachte, vielleicht war Session etwas im Cache, aber ich habe die App neu veröffentlicht und das sollte die Sitzung löschen. Ich dachte, vielleicht hätte ein Cookie einen alten/schlechten Token, aber ich habe diese gelöscht und es erneut versucht. Irgendetwas muss langfristig Caching bekommen. Hoffentlich klappt es sich selbst.

End Updates

Hallo,

Ich bin ein Benutzer vollständigen Namen unserer AD in einer ASP.NET (MVC) Anwendung Abrufen auf IIS 6.0 ausgeführt.

string domainUser = filterContext.HttpContext.User.Identity.Name; 

WindowsIdentity windowsIdentity = filterContext.HttpContext.User.Identity as WindowsIdentity; 

WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate(); 

DirectoryEntry userEntry = new DirectoryEntry("WinNT://" + domainUser.Replace('\\', '/') + ",User"); 
filterContext.Controller.ViewData["User"] = (string)userEntry.Properties["fullname"].Value; 

Die letzte Zeile löst eine Ausnahme aus: "Anmeldefehler: unbekannter Benutzername oder falsches Kennwort."

Wenn ich die HttpContext.User.Identity betrachten, ist es ein gültiger Domain-Benutzer und WindowsIdentity.GetCurrent wird korrekt imitiert.

Diese Ausnahme scheint auch nicht zu 100% geworfen zu werden, und sie wird nicht ausgelöst, wenn sie vom IIS-Server durchsucht wird.

Meine web.config wie folgt aussieht:

<authentication mode="Windows"/> 
<authorization> 
    <deny users="?"/> 
</authorization> 
<identity impersonate="false"/> 

Was mich nervt, dass, wenn ich entfernen Sie die Identitätswechsel Linie:

WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate(); 

Es funktioniert. WindowsIdentity.GetCurrent ist NT AUTHORITY \ NETWORK SERVICE, das kein Domänenbenutzer ist, aber keine Ausnahme ausgelöst wird und der vollständige Name aus dem AD abgerufen wird.

Das letzte Bit ist, dass dies scheint nur mit einer neuen Bereitstellung der Anwendung (von Test zu Live) geschehen ist. Ich weiß nicht, ob ich eine IIS-Einstellung vermisse oder was, aber der Code hat sich nicht geändert.

Ich weiß, dass ich früher imitieren musste, damit es funktioniert, und es scheint, als müsste ich mich imitieren, also zögere ich, den Identitätswechselaufruf zu entfernen, ohne genau zu wissen, was passiert und warum dieser Fehler vorliegt jetzt passiert.

Danke.

Antwort

1

Ich vermute, das Problem besteht darin, dass der Server, der Ihre ASP.NET-Anwendung hostet, für die Delegierung nicht vertrauenswürdig ist. Google für "Trusted for Delegation" für weitere Informationen oder this MSDN article ist ein guter Ausgangspunkt.

+0

Nach dem Testen ein bisschen mehr, während ich nicht sicher bin, wo das Problem ist, glaube ich nicht, dass es 100% der Server sein kann. Ich habe ein Update hinzugefügt, aber im Prinzip funktioniert es für dasselbe Konto, denselben Server, denselben Client-Computer, verschiedene Browser (ein Browser schlägt fehl, einer funktioniert). Ich bin irgendwie ratlos. Ich habe den Vorschlag versucht und den Server als vertrauenswürdig für die Delegierung festgelegt, aber die Dinge schienen nicht behoben zu sein (das heißt, die Zeit für die Verbreitung könnte höher sein als ich gewartet habe). – anonymous

Verwandte Themen