私は、LDAPとLDAPSを使用してユーザーを認証する次の2つの実装を持っています。記録のために、これらはどちらもSSL接続と非SSL接続の両方で動作します。LdapConnectionとPrincipalContextの比較
Non-SSL PrincipalContext
バージョンにWiresharkのを見たとき、私はまだそれが両方のトラフィックを持っている唯一のものである4つの組み合わせ(Non-SSL LdapConnection
、SSL LdapConnection
、Non-SSL PrincipalContext
、SSL PrincipalContext
)のポート636上のトラフィックを参照してくださいので、私はまた、好奇心が強いですどちらか一方の代わりにポート389と636。これを引き起こす原因は何ですか?
LDAP接続方法:
bool userAuthenticated = false;
var domainName = DomainName;
if (useSSL)
{
domainName = domainName + ":636";
}
try
{
using (var ldap = new LdapConnection(domainName))
{
var networkCredential = new NetworkCredential(username, password, domainName);
ldap.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback((con, cer) => true);
ldap.SessionOptions.SecureSocketLayer = useSSL;
ldap.SessionOptions.ProtocolVersion = 3;
ldap.AuthType = AuthType.Negotiate;
ldap.Bind(networkCredential);
}
// If the bind succeeds, we have a valid user/pass.
userAuthenticated = true;
}
catch (LdapException ldapEx)
{
// Error Code 0x31 signifies invalid credentials, anything else will be caught outside.
if (!ldapEx.ErrorCode.Equals(0x31))
{
throw;
}
}
return userAuthenticated;
PrincipalContext方法:DTI-マット@
bool userAuthenticated = false;
var domainName = DomainName;
if (useSSL)
{
domainName = domainName + ":636";
ContextOptions options = ContextOptions.SimpleBind | ContextOptions.SecureSocketLayer;
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName, null, options))
{
userAuthenticated = pc.ValidateCredentials(username, password, options);
}
}
else
{
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName))
{
userAuthenticated = pc.ValidateCredentials(username, password);
}
}
return userAuthenticated;
@sindilevich答えを使ってみましたか?それについての任意の解決策? – Kiquenet