在 C# 中使用 ADSI 进行 LDAP 绑定错误代码

Posted

技术标签:

【中文标题】在 C# 中使用 ADSI 进行 LDAP 绑定错误代码【英文标题】:LDAP bind error codes using ADSI in C# 【发布时间】:2010-05-05 15:28:41 【问题描述】:

我正在使用 ADSI 提供程序从 C# 客户端绑定到 ADAM 实例。当绑定失败时,我会返回一个表明失败的通用错误条件。如果我查看流量的网络跟踪,我可以看到 ADAM 实例本身将扩展错误信息发送回我的客户端,指示此身份验证失败的原因,但似乎 ADSI 提供程序丢弃了此扩展信息,只是向我提供了事实绑定失败。

例如,在失败的绑定中,会抛出一个带有 ErrorCode 属性的 COMException,该属性将始终包含值 8007052E。如果我查看网络跟踪,LDAP 发回失败的原因有多种,其中可能包括密码过期、帐户禁用、密码无效、用户不存在等错误。

有什么方法可以使用 ADSI 或 COMException 对象来获取此扩展错误信息?如果没有,是否有人使用过的其他 .NET 提供程序能够获取此信息?

【问题讨论】:

【参考方案1】:

由于我没有任何答案,我会用我的解决方法自己回答。

我没有尝试依赖特定的返回代码并为 LDAP 调用返回数据,而是设置了一个服务帐户,如果绑定失败,它可以对帐户进行额外调查。例如,如果 user1 的绑定失败,我与服务帐户绑定,查询 user1 帐户并读取帐户属性以进一步确定绑定失败的原因,然后将该信息返回给最终用户。

【讨论】:

以上是关于在 C# 中使用 ADSI 进行 LDAP 绑定错误代码的主要内容,如果未能解决你的问题,请参考以下文章

存储 LDAP 连接并在会话中绑定

配置 Spring Security 以在没有匿名和没有绑定 DN 的情况下针对 LDAP 进行身份验证

Java - LDAP:为啥我们需要硬编码的管理员用户凭据来进行 LDAP 绑定

绑定到外部验证服务LDAP

Java - LDAP:为什么我们需要用于LDAP绑定的硬编码管理员用户凭据

使用asp.net c#查找Ldap中的所有用户