Entwickler-Ecke
ASP.NET und Web - "Benutzerpfad" des ActiveDirectory auslesen
ebber - Do 07.05.09 17:36
Titel: "Benutzerpfad" des ActiveDirectory auslesen
Hallo,
ich habe eine ASP.Net C# Seite. Diese ist auf einem Server und kann nur von Menschen angeschaut werden, die sich am Server über die Windows Authentifizierung angemeldet haben.
Über:
kann ich den Benutzernamen des angemeldeten Benutzers auslesen.
Wie ich herausgefunden habe sind die Benutzer im ActiveDirectory gespeichert. Und zwar in einer Baumstruktur, die ungefähr so aussieht:
Quelltext
1:
| Benutzer/ÜbergreifendeGruppe/Gruppe/SpezielleGruppe/"User.Identity.Name" |
Genau diesen "Pfad" möchte ich haben. Ich kenne mich leider mit ActiveDirectory überhaupt nicht aus. Ist sowas ohne weiteres möglich?
MfG
UGrohne - Fr 08.05.09 08:19
Das Active Directory ist ein LDAP-Speicher und damit werden solche "Pfadangaben" eigentlich als DSN (Distinguished Names) angegeben, in Deinem Fall z.B.
CN=User.Identity.Name,OU=SpezielleGruppe,OU=Gruppe,OU=ÜbergreifendeGruppe,OU=Benutzer,DC=domaene,DC=de. Damit sollte ein Systemadministrator eigentlich auch zurechtkommen ;).
Den Pfad kannst Du über die DirectoryServices von .NET bekommen. Dazu musst Du allerdings die Assembly "System.DirectoryServices" referenzieren.
Hier [
http://www.codeproject.com/KB/system/everythingInAD.aspx#27] gibt es zu den einzelnen Tasks Beispielcode, hab jetzt direkt auf das DirectorySearchen verwiesen. Folgenden Code habe ich der zum Verständnis auf de für Dich relevanten Teile gekürzt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| public string GetObjectDistinguishedName(string objectName, string LdapDomain) { string distinguishedName = string.Empty; string connectionPrefix = "LDAP://" + LdapDomain; DirectoryEntry entry = new DirectoryEntry(connectionPrefix); DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(objectClass=user)(|(cn=" + objectName + ")(sAMAccountName=" + objectName + ")))"; SearchResult result = mySearcher.FindOne();
if (result == null) { throw new NullReferenceException ("unable to locate the distinguishedName for the object " + objectName + " in the " + LdapDomain + " domain"); } DirectoryEntry directoryObject = result.GetDirectoryEntry(); distinguishedName = "LDAP://" + directoryObject.Properties["distinguishedName"].Value; entry.Close(); entry.Dispose(); mySearcher.Dispose(); return distinguishedName; } |
Diese Methode übergibst Du den Benutzernamen und den Domänennamen und solltest den DSN dann erhalten.
//EDIT: Kleine Anmerkung: Prüfe, ob Du von Identity.User den Benutzernamen inkl. Domänennamen (z.B. domaene\benutzer) erhältst. Wenn ja, musst Du den Domänenteil vorher entfernen.
ebber - Fr 08.05.09 18:50
UGrohne hat folgendes geschrieben : |
Kleine Anmerkung: Prüfe, ob Du von Identity.User den Benutzernamen inkl. Domänennamen (z.B. domaene\benutzer) erhältst. |
Ja das ist so.
Danke mal für die Antwort. Ich kann das leider erst am Montag testen. Dann melde ich mich nochmal, ob es funktioniert hat.
MfG
Edit: Es funktioniert :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!