使用DirectoryEntry进行LDAP身份验证

时间:2010-08-01 16:40:24

标签: c# ldap authentication

我们使用以下DirectoryEntry构造函数来验证AD上的用户:

new DirectoryEntry(path, domainName + "\\" + UserName, Password);

在域控制器更改之前,它可以正常工作。

现在要使它工作,我们必须使用:

new DirectoryEntry(path,  UserName, Password);

任何人都可以解释一下差异以及为什么第二种方法现在正在起作用并且首先不起作用?

注意:我不确定,但我认为从Server 2003提升到Server 2008的域功能级别。它有所不同吗?

2 个答案:

答案 0 :(得分:5)

我不确切知道为什么会这样:-)因此我无法解释为什么其他选项现在有效......

如果您使用的是.NET 3.5,则可以使用System.DirectoryServices.AccountManagement命名空间并轻松验证您的凭据:

// create a "principal context" - e.g. your domain (could be machine, too)
using(PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"))
{
    // validate the credentials
    bool isValid = pc.ValidateCredentials("myuser", "mypassword")
}

这很简单,很可靠,它是你的100%C#托管代码 - 你还能要求什么? : - )

答案 1 :(得分:1)

通常,用于此的格式为

DirectoryEntry("LDAP//:domainName");

domainName可以是以下网址:my.ldapDomain.com

或者名称如:DC = My,DC = ldapDomain,DC = COM

我担心我们无法向您提供有关您的代码之前工作原因的更多信息,因为我们无法在代码中看到变量“path”和“domainName”的内容。

请提供更多信息