c# – LdapConnection与PrincipalContext

c# – LdapConnection与PrincipalContext,第1张

概述我有以下两种使用LDAP和LDAPS验证用户的实现,我想知道哪个更好/更正确.对于记录,这两个都适用于SSL和非SSL连接. 我也很好奇,因为在非SSL PrincipalContext版本上使用Wireshark观看时,我仍然看到端口636上的流量.在四种组合中(非SSL LdapConnection,SSL LdapConnection,非SSL PrincipalContext,SSL Pr 我有以下两种使用LDAP和LDAPS验证用户的实现,我想知道哪个更好/更正确.对于记录,这两个都适用于SSL和非SSL连接.

我也很好奇,因为在非SSL PrincipalContext版本上使用Wireshark观看时,我仍然看到端口636上的流量.在四种组合中(非SSL LdapConnection,SSL LdapConnection,非SSL PrincipalContext,SSL PrincipalContext),它是只有一个在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方法:

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,options);  }}else{  using (PrincipalContext pc = new PrincipalContext(ContextType.Domain,domainname))  {    userAuthenticated = pc.ValIDateCredentials(username,password);  }}return userAuthenticated;
解决方法 @ DTI-Matt,在上面的示例中,您使用始终返回true的VerifyServerCertificate回调.这基本上违反了通过SSL连接到LDAP的目的,因为没有执行真正的证书检查.

虽然您可以使用X509Chain和/或X509Certificate2类实现真正的证书检查,但似乎PrincipalContext会为您处理检查.

总而言之,LdapConnection和PrincipalContext都提供了非常类似的功能,通过普通或SSL连接连接到LDAP服务器.您必须为LdapConnection提供更多手写代码才能正常工作.另一方面,PrincipalContext为您提供相同的功能,只需较少的代码即可手动编写.

请注意,非SSL PrincipalContext与端口636(您的默认LDAP over SSL端口)的连接可能是由于此类尝试尽可能安全地连接的事实.

总结

以上是内存溢出为你收集整理的c# – LdapConnection与PrincipalContext全部内容,希望文章能够帮你解决c# – LdapConnection与PrincipalContext所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存