我正在构建一个通过Active Directory对用户进行身份验证的应用程序。没有什么专业,没有添加或编辑用户,只是验证凭据。我发现了很多帖子 - 有些使用System.DirectoryServices.AccountManagement(.NET 3.5及以上版本)或使用LDAP DirectoryEntry ...
我试图找出是否必须指定AD服务器网址?当我测试时,我不需要指定任何东西?
AD服务器何时自动检测到?我什么时候需要指定URL?
我可以拨打电话来获取自动检测到的AD服务器网址吗?
答案 0 :(得分:1)
在未指定域或路径的情况下创建域PrincipalContext
或DirectoryContext
时,将使用当前上下文。即代码正在执行的帐户。如果代码在不在域中的帐户下执行,则将引发异常。这适用于在Windows窗体应用程序或服务中运行的天气。
要验证针对域的凭据,您只需执行以下操作:
public bool ValidateCredentials(string username, string password)
{
using (var principalcontext = new PrincipalContext(ContextType.Domain))
{
return principalContext.ValidateCredentials(username, password);
}
}
但是,出于多种原因,这不是最好的方法。例如,即使用户由于密码过期等而无法登录,ValidateCredentials
也可以返回true。其次,有一种更简单的方法可以为桌面应用程序使用活动目录单点登录:
var currentUser = UserPrincipal.Current;
这将返回当前用户的主体,无需重新进行身份验证,Windows已经这样做,因此您已经知道用户有效。