我们已经为可以请求多个 LDAP 目录的 SharePoint 网络应用程序编写了一个身份验证提供程序。
必须通过 SSL 请求其中一个 LDAP 服务器。因此,我们将用于签署 LDAP 服务器证书的 CA 证书导入到 SharePoint 服务器的证书存储中。
以下代码片段展示了我们如何对用户进行身份验证。传递的凭据(帐户、密码)属于我们要验证的用户。
var entry = new DirectoryEntry("LDAP://<ldap-server-address>", "cn=account,ou=sub,o=xyz,c=de", "password", AuthenticationTypes.SecureSocketsLayer);
var searcher = new DirectorySearcher(entry);
var found = searcher.FindOne();
处理代码时,调用 searcher.FindOne()
会抛出以下异常。
System.Runtime.InteropServices.COMException (0x80072035): The server is unwilling to process the request
什么情况会导致这个错误?
更新:
I found some information about the error message .问题似乎是证书存储,因为用户只将证书存储在用户的存储中,而不是计算机的存储中。不幸的是,我们已经将它存储在那里。那么这仍然是证书问题吗?
更新/解决方案:
其实问题就解决了。根 CA 证书似乎已正确导入,但 LDAP 服务器响应的错误消息是由我们的客户提供给我们进行测试的过期用户帐户引起的。
您的证书可能不是由完全受信任的 CA 提供的。您是否进入了证书 mmc 的信任关系并将 CA 服务器建立为 LDAP 服务器上的受信任根授权机构?
编辑:另外值得注意的是,报告的服务器名称可能与传递的证书不匹配。您可能想要检查 LDAP 服务器的日志,以确保报告的服务器名称与证书列表相同。
我是一名优秀的程序员,十分优秀!