【问题标题】:PrincipalContext ValidateCredentials throws errorsPrincipalContext ValidateCredentials 抛出错误
【发布时间】:2015-08-11 05:23:52
【问题描述】:

我正在尝试使用以下代码对 LDAP 用户进行身份验证。

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, ldap, "username", "password"))
{
    bool success = context.ValidateCredentials(useralias, password);
}

当我将 ldap 用作“LDAP://z.y.org:389/”时,我在 PrincipalContext 初始化时收到“无法联系服务器”的错误消息。

如果我将 ldap 用作“z.y.org:389/”,则如果我使用正确的凭据,则步骤成功,成功为“真”,但我可以在“IntelliTrace”中看到两个异常,说明“LDAP 服务器不可用”时ValidateCredentails 被执行。如果我为这个方法提供了错误的凭据,如果得到错误但仍然得到相同的异常记录在“IntelliTrace”中。

非常感谢任何解决问题或调试正在发生的事情的指针。

【问题讨论】:

  • 您的代码是否在同一台服务器上运行?如果不是,您正在通过不安全的端口进行身份验证。如果您没有安装SSL,请安装,否则,您需要将端口切换到636
  • 我很好奇你是否找到了这个错误的原因。我目前遇到了同样的问题,ValidateCredentials 将“工作”(正确返回 true 或 false),但我确实得到了 LDAP 服务器不可用异常,该异常在调用中被捕获并丢弃。

标签: c# active-directory ldap directoryservices account-management


【解决方案1】:

如果要进行身份验证,可以使用 PrincipalContext 使用以下步骤:

using(var context = new PrincipalContext(ContextType.Domain, "mydomain", "mydomain\serviceAcct", "serviceAcctPass")) 
{
     //Username and password for authentication.
     return context.ValidateCredentials(username, password);      
}

"serviceAcct" = 域用户中具有目录查找权限的帐户。 "serviceAcctPass" = 该服务帐户的密码。正如我所说,对于测试,您可以尝试使用自己的用户/传递上下文。

另外,请确保提供的用户名具有“域\用户名”或“用户名@域”格式。

【讨论】:

  • 谢谢。我使用的帐户具有目录查找权限。如果我使用域\帐户或仅帐户,结果是相同的。 ValidateCredentails 根据提供的凭据返回正确的值,但它会引发仅在 IntelliTrace 中捕获的错误。如果我在没有调试的情况下运行,则没有错误。
猜你喜欢
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
相关资源
最近更新 更多