从 C# 针对 ADAM 对 ADAM 用户进行身份验证 - 无法绑定
Posted
技术标签:
【中文标题】从 C# 针对 ADAM 对 ADAM 用户进行身份验证 - 无法绑定【英文标题】:Authenticating an ADAM user against ADAM from C# - cannot bind 【发布时间】:2009-05-14 15:24:50 【问题描述】:我已经设置了一个 ADAM 实例并添加了一些测试用户。在 c# 中,我可以使用 Windows 帐户绑定到 ADAM,但无法使用 ADAM 用户之一进行绑定。 (我可以在 ldp 中成功绑定 adam 用户)并且我已通过将 msDS-UserAccountDisabled 属性设置为 false 来确保启用了用户。 当我与我的 Windows 帐户绑定时,我可以成功搜索并带回 ADAM 用户的属性,但我仍在努力对他们进行身份验证,当我尝试与 ADAM 用户帐户绑定时,我收到错误:
错误:System.Runtime.InteropServices.COMException (0x8007052E):登录失败:未知用户名或密码错误。在 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
这是我正在使用的代码:
string userName = txtUserName.Text;
string password = txtPassword.Text;
string ADConnectionString = "LDAP://localhost:389/CN=sandbox,DC=ITOrg";
DirectoryEntry entry = new DirectoryEntry(ADConnectionString);
entry.Username = "myComputer\\Administrator";
entry.Password = "myPassword";
try
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = "(&(objectClass=user)(CN=" + userName + "))";
SearchResultCollection result = searcher.FindAll();
if (result.Count > 0)
//bind with simple bind
using (DirectoryEntry de = new DirectoryEntry(result[0].Path, userName, password,AuthenticationTypes.None))
if (de.Guid != null) // this is the line where it dies
Label1.Text = "Successfully authenticated";
Label2.Text = result[0].Properties["displayName"][0].ToString();
Label3.Text = result[0].Properties["telephoneNumber"][0].ToString();
else
Lable1.Text = "Unable to Authenticate";
else
Lable1.Text = "UserName :" + userName + " not found";
catch(Exception ex)
Label1.Text = "Error searching: " + ex.ToString();
提前感谢您的帮助,非常感谢!
【问题讨论】:
【参考方案1】:可能是用户名格式问题。在 SDS 中验证 ADAM 用户时,您必须使用 LDAP 简单绑定并使用 ADAM 支持的名称格式。 ADAM 在技术上也允许您使用 Digest auth,但这在 SDS(仅 SDS.Protocols)中不可用,因此不适用于您的代码方法。
您正在使用简单绑定,因为您设置了 AuthenticationTypes.None,因此该部分没问题。那么可能错误的部分是用户名格式。
ADAM 接受用户的完整 DN、他们的 displayName(如果已设置且唯一)和/或 userPrincipalName(如果已设置且唯一)作为“可绑定”用户名,因此请从用户的完整 DN 开始,看看是否可行.如果是这样,您也可以尝试其他用户名值。请注意,您可以在 ADAM 中为 displayName 或 userPrincipalName 放置您想要的任何内容。没有验证。只需确保值是唯一的即可。
如果您真的想针对 ADAM 执行某种类型的绑定身份验证,您将通过使用 .NET 3.5 中 PrincipalContext 的 ValidateCredentials 方法获得更好的性能和扩展性。
此类内容一直在http://www.directoryprogramming.net 的论坛中记录和讨论,并且是我经常光顾的地方,因为它是我的网站。 :) 一位朋友向我介绍了这篇文章,否则我将永远不会看到它。
【讨论】:
欢迎来到 ***,乔!所有 ADAM 和 Active Directory 查询者都将很高兴知道您也在此处关注他们的问题! ;-) 我也有同样的问题。当我从用户的属性中删除 UPN 时,身份验证总是失败。无论如何,在没有 UPN 的情况下进行身份验证吗?以上是关于从 C# 针对 ADAM 对 ADAM 用户进行身份验证 - 无法绑定的主要内容,如果未能解决你的问题,请参考以下文章