Sop*_*hia 36 .net c# ldap active-directory windows-authentication
我正在使用一个使用Windows身份验证的C#和ASP.Net应用程序.
即在Web.config中:
<system.web>
<authentication mode="Windows" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
我想从Active Directory获取当前用户的详细信息(全名,电子邮件地址等).
我可以SOMEDOMAIN\someuser通过使用获得他们的Windows 2000用户登录名(例如:)
string username = HttpContext.Current.Request.ServerVariables["AUTH_USER"];
Run Code Online (Sandbox Code Playgroud)
我已经使用他们当前的登录名(而不是他们的Windows 2000用户登录名)为用户制定了LDAP查询:
DirectorySearcher adSearch = new DirectorySearcher(
"(userprincipalname=someuser@somedomain.com.au)");
SearchResult adSearchResult = adSearch.FindOne();
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何使用他们的前W2K登录名为用户搜索AD,或者以'someuser@somedomain.com.au'格式获取他们的登录名.
有任何想法吗?
Ala*_*lan 52
"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();
}
}
Run Code Online (Sandbox Code Playgroud)
someuser@somedomain.com.au是UserPrincipalName,但它不是必填字段.
mar*_*c_s 44
艾伦已经给你正确的答案 - 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
Run Code Online (Sandbox Code Playgroud)
这些只是您需要指定的常用AD/LDAP属性名称.
Dmi*_*nov 11
添加对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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133782 次 |
| 最近记录: |