使用DirectoryEntry进行LDAP身份验证

Buz*_*uzz 2 c# authentication ldap

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

new DirectoryEntry(path, domainName + "\\" + UserName, Password);
Run Code Online (Sandbox Code Playgroud)

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

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

new DirectoryEntry(path,  UserName, Password);
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释差异,为什么第二种方法现在工作,第一种方法不起作用?

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

mar*_*c_s 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")
}
Run Code Online (Sandbox Code Playgroud)

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