2008-09-10 1 views
8

Wir haben eine ASP.NET-Anwendung, die ihre eigene Benutzer-, Rollen- und Berechtigungsdatenbank verwaltet, und wir haben kürzlich der Benutzer-Tabelle ein Feld hinzugefügt, in dem das Windows-Domänenkonto gespeichert werden kann.Wie erhalten Sie das angemeldete Windows-Domänenkonto von einer ASP.NET-Anwendung?

Ich möchte es so machen, dass der Benutzer nicht physisch in unserer Anwendung anmelden muss, sondern würde automatisch auf dem aktuell angemeldeten Windows-Domänenkonto DOMÄNE \ Benutzername angemeldet werden. Wir möchten das Windows-Domänenkonto gegen unsere eigene Benutzertabelle authentifizieren.

Dies ist ein Kinderspiel in Windows Forms, ist es möglich, dies in Web Forms zu tun?

Ich will nicht der Benutzer mit einem Windows-Herausforderung Bildschirm aufgefordert werden, möge ich unser System in das Protokoll zu handhaben

Klärung. Wir haben unser eigenes individuelles Principal-Objekt verwenden.

Erläuterung: Nicht sicher, ob es einen Unterschied macht oder nicht, aber wir verwenden IIS7.

+0

ich all diese Optionen ausprobiert habe ... das Problem ist, ich eine benutzerdefinierte Hauptaufgabe verwenden. Ich habe versucht, die integrierte Sicherheit einzuschalten, und während der Benutzer nach dem Anmelden immer noch zur Eingabe eines Kennworts und eines Kennworts aufgefordert wurde, wurde Environment.UserName wieder auf NETWORK SERVICE zurückgesetzt. – mattruma

+0

Sounds wie Identitätswechsel ist dann deaktiviert. Identitätswechsel weist ASP.NET an, die Anforderung im Namen des authentifizierten Benutzers auszuführen. Ohne diese Option führt ASP.NET die Anforderung mit dem ASP.NET-Dienstkonto (oder NETWORK SERVICE unter Windows 2003/2008) aus. – Chris

+0

Ich kann das immer noch nicht machen. Ich habe versucht, mit der IIS-Integration zu tüfteln, ohne Erfolg, es kehrt immer wieder zum NETWORK SERVICE-Konto zurück. Gibt es trotzdem eine automatische Anmeldung von Benutzern basierend auf ihren aktuellen Windows NT-Anmeldedaten? – mattruma

Antwort

1

Ich habe ziemlich genau das gemacht, was Sie vor ein paar Jahren machen wollen. Ich versuche, einen Code dafür zu finden, obwohl es bei einem früheren Job war, so dass der Code zu Hause ist.

Ich erinnere mich, obwohl ich this article als meinen Ausgangspunkt verwendet habe. Sie richten den LDAP-Provider ein, so dass Sie tatsächlich eine Überprüfung des Benutzers gegenüber dem LDAP durchführen können. Eine Sache, um sicherzustellen, wenn Sie den LDAP-Ansatz versuchen. Stellen Sie in der Einstellungsdatei, in der Sie das LDAP einrichten, sicher, dass LDAP in Großbuchstaben geschrieben ist. Wenn dies nicht der Fall ist, wird es nicht aufgelöst.

1
using System.Security.Principal; 
... 
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User; 

um den aktuellen Domänenbenutzer zu erhalten. Natürlich müssen Sie sicherstellen, dass der IIS für die Windows-Authentifizierung eingerichtet ist.

1

Dies kann hilfreich sein:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent(); 

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity); 

string name = myPrincipal.Identity.Name; 
string authType = myPrincipal.Identity.AuthenticationType; 
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString(); 

string identName = myIdentity.Name; 
string identType = myIdentity.AuthenticationType; 
string identIsAuth = myIdentity.IsAuthenticated.ToString(); 
string iSAnon = myIdentity.IsAnonymous.ToString(); 
string isG = myIdentity.IsGuest.ToString(); 
string isSys = myIdentity.IsSystem.ToString(); 
string token = myIdentity.Token.ToString(); 

Disclaimer: Ich habe diese von einem Technet-Artikel, aber ich kann den Link nicht finden.

+0

Wir verwenden ein benutzerdefiniertes Prinzipal- und Identitätsobjekt. – mattruma

0

Sie können System.Threading.Thread.CurrentPrincipal verwenden.

+0

Wir verwenden ein benutzerdefiniertes Prinzipal- und Identitätsobjekt. – mattruma

+0

Warum hilft Ihnen das dann nicht? CurrentPrincipal gibt das benutzerdefinierte Prinzipalobjekt zurück ... –

+0

Mein benutzerdefinierter Prinzipal enthält keine Windows-Kontoinformationen. – mattruma

0

Request.ServerVariables [ "REMOTE_USER"]

Diese für Ihr Setup nicht verifizierte ist, aber ich erinnere diese eine Weile zurück mit.

2

Integration dieser Art ist auf der Serverebene, IIS entscheidet, dass der Benutzer nicht angemeldet ist; und IIS sendet die Authentifizierungsaufforderung an den Benutzer zurück, auf den der Browser reagiert.

Da Sie die Domänenanmeldung verwenden möchten, gibt es nur eine Möglichkeit, dies zu tun; integrated windows authentication. Dies funktioniert nur, wenn der IIS-Server ebenfalls Teil der Domäne ist und die Benutzer direkt auf die Maschine zugreifen, nicht über einen Proxy und von Maschinen, die ebenfalls Teil der Domäne sind (mit den entsprechend angemeldeten Benutzern).

Ihr benutzerdefiniertes Prinzipalobjekt kann jedoch Spaß und Spiele erzeugen; Authentifizierung dieses Typs wird ein WindowsPrincipal und eine WindowsIdentity; auf die Sie über das Benutzerobjekt zugreifen können (siehe How To: Use Windows Authentication in ASP.NET 2.0)

Ich nehme an, dass Sie einen benutzerdefinierten Prinzipal wegen Ihrer benutzerdefinierten Rollen möchten? Ich bezweifle, dass Sie die beiden gut spielen können; Sie könnten eine benutzerdefinierte role provider erstellen, die Ihren Datenspeicher betrachtet oder Sie betrachten ADAM, eine Erweiterung von AD, die Rollen auf einer Pro-Programm-Basis bietet und mit netten Management-Tools kommt.

0

Versuchen Sie Request.ServerVariables ("LOGON_USER").

Wenn die Verzeichnissicherheitsoptionen so festgelegt sind, dass dieses Verzeichnis keine anonymen Benutzer zulässt, werden die Benutzer beim Aufrufen der Seite mit dem standardmäßigen modalen Dialog nach Benutzername und Kennwort gefragt. Request.ServerVariables ("LOGON_USER") wird diesen Benutzer zurückgeben.

Dies wird jedoch wahrscheinlich nicht für Sie arbeiten, weil Sie Ihre eigenen benutzerdefinierten Sicherheitsobjekte verwenden. Wenn Sie herausfinden können, wie Sie diese Anmeldebox umgehen oder NT-Anmeldeinformationen an die Site weitergeben, bevor sie nach ihnen fragt, sind Sie fertig.

+0

Korrigieren ... das Problem besteht darin, mein eigenes Hauptobjekt verwenden zu wollen. – mattruma

Verwandte Themen