首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# LdapConnection身份验证问题

C# LdapConnection身份验证问题
EN

Stack Overflow用户
提问于 2013-08-22 15:28:52
回答 1查看 11.4K关注 0票数 5

我们使用类似于下面的代码来建立到LDAP目录的安全连接:

代码语言:javascript
复制
using (LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier(ConfigReader.ADServer, 636)))
{
    con.SessionOptions.SecureSocketLayer = true;
    con.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback(ServerCallback);
    con.Credential = new NetworkCredential(UserDN, UserPwd);
    con.AuthType = AuthType.Basic;
    con.Bind();
}

在测试过程中,我们注意到了以下预期行为:

  • 有效的UserDN和有效的UserPwd将导致Bind()成功
  • 带有有效UserDN的无效UserPwd将导致Bind()错误(所提供的凭据无效)。
  • 带有无效(非空白) UserDN的无效UserPwd将导致Bind()错误(所提供的凭据无效)。

不幸的是,我们还注意到以下意外行为:

  • 有效的UserDN和空白UserPwd将导致Bind()成功
  • 无效的UserDN和空白UserPwd会导致Bind()成功

请说明为什么使用空白密码LDAP连接是成功的。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-28 18:30:14

似乎连接是绑定的,但在发送实际请求之前不进行身份验证。

考虑以下在绑定连接后发送请求.

代码语言:javascript
复制
 using (LdapConnection con = new LdapConnection(new LdapDirectoryIdentifier(ConfigReader.ADServer, 636)))
{
    con.SessionOptions.SecureSocketLayer = true;
    con.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback(ServerCallback);
    con.Credential = new NetworkCredential(UserDN, UserPwd);
    con.AuthType = AuthType.Basic;
    con.Bind();
    **con.SendRequest(new SearchRequest(targetLocation, "(objectClass=*)", System.DirectoryServices.Protocols.SearchScope.Subtree, null));**
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18384797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档