it-swarm.com.de

So rufen Sie die Active Directory-Details des aktuellen Benutzers in C # ab

Ich arbeite an einer C # - und ASP.Net-Anwendung, die die Windows-Authentifizierung verwendet.

in Web.config:

<system.web>
    <authentication mode="Windows" />
</system.web>

Ich möchte Details zum aktuellen Benutzer (vollständiger Name, E-Mail-Adresse usw.) von Active Directory erhalten.


Ich kann ihren Benutzernamen vor Windows 2000 erhalten (zB: SOMEDOMAIN\someuser) durch die Nutzung

string username = HttpContext.Current.Request.ServerVariables["AUTH_USER"];

Ich habe die LDAP-Abfrage für den Benutzer unter Verwendung seines aktuellen Anmeldenamens (nicht seines Benutzernamens vor Windows 2000) ausgearbeitet:

DirectorySearcher adSearch = new DirectorySearcher(
        "([email protected])");
SearchResult adSearchResult = adSearch.FindOne();

Ich weiß jedoch nicht, wie ich AD nach dem Benutzer suchen soll, der seinen Anmeldenamen vor W2K verwendet, oder wie ich seinen Anmeldenamen im Format "[email protected]" erhalte.

Irgendwelche Ideen?

36
Sophia

Der Name "vor Windows 2000", d. H. DOMAIN\SomeBody, der Teil Somebody heißt sAMAccountName.

Also versuche:

using(DirectoryEntry de = new DirectoryEntry("LDAP://MyDomainController"))
{
   using(DirectorySearcher adSearch = new DirectorySearcher(de))
   {
     adSearch.Filter = "(sAMAccountName=someuser)";
     SearchResult adSearchResult = adSearch.FindOne();
   }
}

[email protected] ist der UserPrincipalName, aber kein erforderliches Feld.

52
Alan

Alan hat dir bereits die richtige Antwort gegeben - benutze den sAMAccountName, um deinen Benutzer zu filtern.

Ich würde eine Empfehlung für Ihre Verwendung von DirectorySearcher hinzufügen - wenn Sie nur ein oder zwei Informationen wünschen, fügen Sie diese in das "PropertiesToLoad" Sammlung von DirectorySearcher.

Anstatt das gesamte große Benutzerobjekt abzurufen und dann ein oder zwei Elemente auszuwählen, werden genau die Bits zurückgegeben, die Sie benötigen.

Stichprobe:

adSearch.PropertiesToLoad.Add("sn");  // surname = last name
adSearch.PropertiesToLoad.Add("givenName");  // given (or first) name
adSearch.PropertiesToLoad.Add("mail");  // e-mail addresse
adSearch.PropertiesToLoad.Add("telephoneNumber");  // phone number

Dies sind nur die üblichen AD/LDAP-Eigenschaftsnamen, die Sie angeben müssen.

44
marc_s

Verweis auf COM hinzufügen "Active DS Type Library"


            Int32 nameTypeNT4               = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_NT4;
            Int32 nameTypeDN                = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_1779;
            Int32 nameTypeUserPrincipalName = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_USER_PRINCIPAL_NAME;

            ActiveDs.NameTranslate nameTranslate = new ActiveDs.NameTranslate();

            // Convert NT name DOMAIN\User into AD distinguished name 
            // "CN= User\\, Name,OU=IT,OU=All Users,DC=Company,DC=com"
            nameTranslate.Set(nameTypeNT4, ntUser);

            String distinguishedName = nameTranslate.Get(nameTypeDN);

            Console.WriteLine(distinguishedName);

            // Convert AD distinguished name "CN= User\\, Name,OU=IT,OU=All Users,DC=Company,DC=com" 
            // into NT name DOMAIN\User
            ntUser = String.Empty;
            nameTranslate.Set(nameTypeDN, distinguishedName);
            ntUser = nameTranslate.Get(nameTypeNT4);
            Console.WriteLine(ntUser);

            // Convert NT name DOMAIN\User into AD UserPrincipalName [email protected]
            nameTranslate.Set(nameTypeNT4, ntUser);
            String userPrincipalName = nameTranslate.Get(nameTypeUserPrincipalName);

            Console.WriteLine(userPrincipalName);
11
Dmitri Kouminov

Wenn Sie .NET 3.5 SP1 + verwenden, ist ein Blick auf die

System.DirectoryServices.AccountManagement namespace.

Es hat Methoden, um Leute zu finden, und Sie können so ziemlich jedes gewünschte Benutzernamenformat übergeben und dann die meisten grundlegenden Informationen zurückgeben, die Sie benötigen würden. Wenn Sie Hilfe beim Laden der komplexeren Objekte und Eigenschaften benötigen, lesen Sie den Quellcode für http://umanage.codeplex.com its got it all.

Brent

4
Brent Pabst