Frage

Wir haben eine ASP.NET-Anwendung, die ihre eigene Benutzer-, Rollen- und Berechtigungsdatenbank verwaltet, und wir haben kürzlich ein Feld zur Benutzertabelle hinzugefügt, um das Windows-Domänenkonto zu speichern.

Ich möchte es so gestalten, dass der Benutzer es nicht tun muss physisch Melden Sie sich bei unserer Anwendung an, sondern werden Sie automatisch basierend auf dem aktuell angemeldeten Windows-Domänenkonto DOMAIN\Benutzername angemeldet.Wir möchten das Windows-Domänenkonto anhand unserer eigenen Benutzertabelle authentifizieren.

Dies ist in Windows Forms ein Kinderspiel. Ist dies auch in Web Forms möglich?

Ich möchte nicht, dass der Benutzer mit einem Windows-Aufforderungsbildschirm aufgefordert wird, sondern dass unser System die Anmeldung übernimmt.

Klärung:Wir verwenden unser eigenes benutzerdefiniertes Principal-Objekt.

Klärung:Ich bin mir nicht sicher, ob es einen Unterschied macht oder nicht, aber wir verwenden IIS7.

War es hilfreich?

Lösung

Ich habe so ziemlich genau das, was man vor ein paar Jahren tun will. Im Versuch, einen Code für sie zu finden, obwohl es bei einem frühen Job war so, dass Code zu Hause ist.

Ich erinnere mich, obwohl ich verwenden diesen Artikel als meinen Ausgang Punkt. Sie setzen den LDAP-Provider, so können Sie tatsächlich einen Scheck des Benutzers gegen den LDAP laufen. Eine Sache, um sicherzustellen, dass der, wenn Sie versuchen, den LDAP-Ansatz. In der Einstellungsdatei in dem Sie die LDAP stellen Sie sicher, LDAP einrichten sind alle Kappen, wenn sie es nicht sind, wird nicht lösen.

Andere Tipps

Die Integration dieser Art ist auf Server-Ebene, es IIS ist, dass der Benutzer entscheidet, dass nicht angemeldet ist; und es ist IIS, die die Authentifizierungsaufforderung an den Benutzer sendet, auf dem der Browser reagiert.

Wenn Sie die Domain-Anmeldung dort verwenden wollen, ist nur ein Weg, dies zu tun; integrierte Fenster Authentifizierung . Dies funktioniert nur, wenn der IIS-Server ist auch einen Teil der Domäne und die Benutzer Zugriff auf die Maschine direkt, nicht über einen Proxy, und von Maschinen, die auch Teil der Domäne sind (mit den Benutzern geeignet angemeldet).

Jedoch Ihre benutzerdefinierte Hauptaufgabe kann Spaß und Spiele erstellen; Authentifizierung dieser Art wird ein Windows und eine Windows sein; die Sie über das User-Objekt zugreifen (siehe How To: Verwenden Sie Windows-Authentifizierung in ASP .NET 2.0 )

Ich nehme an, Sie eine benutzerdefinierte Haupt wollen, weil die benutzerdefinierten Rollen? Ich bezweifle, man kann die beiden bekommen schön zu spielen; Sie können eine benutzerdefinierte Rollenanbieter rel="nofollow die in Ihrem Datenspeicher schaut dich schauen oder unter ADAM aussehen könnte, eine Erweiterung AD, welche Rollen auf einer pro-Programm-Basis bietet und kommt mit netten Management-Tool.

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

den aktuellen Domäne-Benutzer zu erhalten. Natürlich müssen Sie sicherstellen, dass die IIS Windows-Authentifizierung umgehen eingerichtet ist.

Dies könnte 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 gefunden

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

Request.ServerVariables [ "REMOTE_USER"]

Dies ist für das Setup nicht nachgeprüft, aber ich erinnere mit diesem eine Weile zurück.

Versuchen Request.ServerVariables ( "LOGON_USER").

Wenn die Verzeichnissicherheitsoptionen eingestellt werden, so dass dieses Verzeichnis nicht nicht anonyme Benutzer erlauben, wenn der Surfer diese Seite trifft sie mit dem Standard-modalen Dialog für Benutzername und Passwort gefragt gefragt. Request.ServerVariables ( "LOGON_USER") diesen Benutzer zurück.

Allerdings wird dies wahrscheinlich nicht für Sie arbeiten, weil Sie Ihre eigenen benutzerdefinierten Sicherheitsobjekte verwenden. Wenn Sie herausfinden, wie um diese Anmeldefeld zu bekommen, oder in NT-Anmeldeinformationen auf der Website durchlaufen, bevor es für sie askes, dann würden Sie alle eingestellt werden.

Haben Sie sich Gedanken über den Identitätswechsel? Sie könnten den NT-Anmeldeinformationen des Benutzers speichern in Ihrem benutzerdefinierten Sicherheitsobjekt und dann impseronate nur den Benutzer über den Code, wenn angemessen.

http://msdn.microsoft.com/ en-us / library / aa292118 (VS.71) aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top