当前位置:  开发笔记 > 编程语言 > 正文

如何在C#中获取当前用户的Active Directory详细信息

如何解决《如何在C#中获取当前用户的ActiveDirectory详细信息》经验,为你挑选了3个好方法。

我正在使用一个使用Windows身份验证的C#和ASP.Net应用程序.

即在Web.config中:


    

我想从Active Directory获取当前用户的详细信息(全名,电子邮件地址等).


我可以SOMEDOMAIN\someuser通过使用获得他们的Windows 2000用户登录名(例如:)

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

我已经使用他们当前的登录名(而不是他们的Windows 2000用户登录名)为用户制定了LDAP查询:

DirectorySearcher adSearch = new DirectorySearcher(
        "(userprincipalname=someuser@somedomain.com.au)");
SearchResult adSearchResult = adSearch.FindOne();

但是,我不知道如何使用他们的前W2K登录名为用户搜索AD,或者以'someuser@somedomain.com.au'格式获取他们的登录名.

有任何想法吗?



1> Alan..:

"pre Windows 2000"名称即DOMAIN\SomeBody,该Somebody部分称为sAMAccountName.

所以尝试:

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

someuser@somedomain.com.au是UserPrincipalName,但它不是必填字段.


不,这不对.sAMAccountName不包含"DOMAIN"部分,使其对林范围的查询无效.

2> marc_s..:

艾伦已经给你正确的答案 - sAMAccountName用来过滤你的用户.

我会添加一个关于你的使用的建议DirectorySearcher- 如果你只想要一两条信息,把它们添加到.的"PropertiesToLoad"集合中DirectorySearcher.

而不是检索整个大用户对象,然后选择一个或两个项目,这将只返回您需要的那些位.

样品:

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

这些只是您需要指定的常用AD/LDAP属性名称.



3> Dmitri Koumi..:

添加对COM"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 Name.User@Company.com
            nameTranslate.Set(nameTypeNT4, ntUser);
            String userPrincipalName = nameTranslate.Get(nameTypeUserPrincipalName);

            Console.WriteLine(userPrincipalName);

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有