【发布时间】:2013-11-12 09:21:47
【问题描述】:
我正在使用 Active Directory DirectoryServices.AccountManagement API,并尝试使用以下代码连接到服务器:
PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, (server + ":" + port), loginUsername, loginPassword);
我想做的第一件事是检查loginUsername 和loginPassword 是否有效并且在Active Directory 实例中具有足够的权限。为此,我调用以下命令:
bool x = principalContext.ValidateCredentials(null, null);
根据documentation,这将验证构造函数中指定的凭据,因为null 已传递。在调试器中,抛出如下错误,说明凭证为假:
然而,ValidateCredentials 检查的实际结果却奇怪地返回了true,因此代码继续执行。
如何解决?
编辑:
这是另一个详细说明错误的屏幕截图。如屏幕截图所示,我正在调用ValidateCredentials 方法,并为用户名和密码传递null 值,根据文档,这将尝试验证在 PrincipalContext 类的构造函数中传递的凭据。
屏幕截图还显示了通过的用户名和密码都是“测试”的,它们是无效的并且不存在于 Active Directory 中。该方法返回 true,即使显示了许多错误。
【问题讨论】:
-
不确定:你的函数有异常和返回值?
-
明确一点:您传递的凭据无效,您确实不希望它返回
true- 对吗? -
另外,您绝对确定构造函数中的凭据不为空吗?这听起来很像“如果在构造函数中没有指定凭据,并且用户名和密码参数为空,则此方法验证当前主体的默认凭据。”
-
一个抛出异常的方法怎么能同时返回一个值(又不是
out参数)? 编辑:您显示的异常是否在ValidateCredentials方法中实际处理(被try-catch捕获)?跨度> -
正确@MarcGravell。我故意在 PrincipalContext 构造函数中传递无效凭据以对其进行测试。并且 ValidateCredentials 方法返回 true,即使引发了内部错误,表明登录凭据为 false
标签: c# .net windows security active-directory