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 要求、Int32& messageID)
で System.DirectoryServices.Protocols.LdapConnection.SendRequest (DirectoryRequest 要求、TimeSpan requestTimeout)
で System.DirectoryServices .Protocols.LdapConnection.SendRequest(DirectoryRequest 要求)
で System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig (文字列 serverName、ServerProperties& プロパティ)--- 内部例外スタック トレースの終わり ---
System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
で System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
で System.DirectoryServices.AccountManagement.PrincipalContext で。 .ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password)
System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options)
at 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
ても正常に動作します (パラメーターが null の場合、他の 3 つはデフォルトで動作します)。
PrincipalContext
SSLで正しい使用方法を知っている人はいますか?