我有一种针对 Active Directory 验证用户凭据的方法。我想将此方法与 SSL 一起使用,但我无法让它工作。
主要问题是我有一台位于我们网络之外的服务器(它是否称为 DMZ?)。从那里我想联系我的活动目录,这就是我想使用 SSL 的原因。
在我的本地计算机(不是来自 DMZ)上使用它时,我收到此错误:
System.DirectoryServices.AccountManagement.PrincipalServerDownException:无法联系服务器。---> System.DirectoryServices.Protocols.LdapException:LDAP 服务器不可用。
在 System.DirectoryServices.Protocols.LdapConnection.Connect()
在 System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest request, Int32& messageID)
在 System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
在 System.DirectoryServices .Protocols.LdapConnection.SendRequest(DirectoryRequest request)
at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties&properties)--- 内部异常堆栈跟踪结束 ---在 System.DirectoryServices.AccountManagement.PrincipalContext 的 System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()的
System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties) 。 .ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password) at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options) 在 Authorization.AuthorizeAD。 ValidateCredentials(字符串用户名,字符串密码)
我认为在我从我们的服务器上尝试之前,让它在本地使用 SSL 会很好。
我的方法:
public bool ValidateCredentials(string username, string password) {
using (
var context = new PrincipalContext(ContextType.Domain, ContextName, ContextContainer,
ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing |
ContextOptions.SecureSocketLayer)) {
return context.ValidateCredentials(username, password);
}
}
如前所述,没有ContextOptions.SecureSocketLayer
它可以正常工作(如果参数为空,其他三个默认情况下)
有谁知道我应该如何PrincipalContext
正确使用 SSL?