Autor Beitrag
ebber
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Do 07.05.09 17:36 
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:
ausblenden C#-Quelltext
1:
User.Identity.Name;					

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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Fr 08.05.09 18:50 
user profile iconUGrohne hat folgendes geschrieben Zum zitierten Posting springen:

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 :)