entry - c# request active directory



Comment obtenir les détails Active Directory de l'utilisateur actuel en C# (3)

Ajouter une référence à COM "Bibliothèque de types Active DS"

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

https://src-bin.com

Je travaille sur une application C # et ASP.Net, qui utilise l'authentification Windows.

c'est-à-dire dans Web.config:

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

Je souhaite obtenir les détails de l'utilisateur actuel (nom complet, adresse électronique, etc.) à partir d'Active Directory.

Je peux obtenir leur nom d'utilisateur antérieur à Windows 2000 (par exemple: SOMEDOMAIN\someuser ) en utilisant

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

J'ai élaboré la requête LDAP de l'utilisateur en utilisant son nom de connexion actuel (et non son nom de connexion antérieur à Windows 2000):

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

Cependant, je ne sais pas comment effectuer une recherche AD sur l'utilisateur à l'aide de son nom d'utilisateur antérieur à W2K, ni obtenir son nom d'utilisateur au format "[email protected]".

Des idées?


Answer #1

Alan vous a déjà donné la bonne réponse - utilisez sAMAccountName pour filtrer votre utilisateur.

J'ajouterais une recommandation sur votre utilisation de DirectorySearcher - si vous souhaitez seulement une ou deux informations, ajoutez-les à la collection "PropertiesToLoad" de DirectorySearcher .

Au lieu de récupérer l'intégralité du gros objet utilisateur, puis de sélectionner un ou deux éléments, vous obtiendrez exactement les bits dont vous avez besoin.

Échantillon:

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

Ce ne sont que les noms de propriétés AD / LDAP habituels que vous devez spécifier.


Answer #2

Si vous utilisez .NET 3.5 SP1 +, le meilleur moyen de le faire est de consulter la

System.DirectoryServices.AccountManagement namespace.

Il a des méthodes pour trouver des personnes et vous pouvez passer dans n'importe quel format de nom d'utilisateur, puis renvoyer la plupart des informations de base dont vous auriez besoin. Si vous avez besoin d'aide pour charger les objets et propriétés les plus complexes, consultez le code source de http://umanage.codeplex.com .

Brent





windows-authentication