写了一个通用的认证类,请看代码

[csharp] view plaincopy
  1. private void btnCheck_Click(object sender, EventArgs e)
  2. {
  3. string strLDAPFilter = string.Format(txtFilter.Text, txtUserName.Text.Trim());
  4. //deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
  5. string TestUserID = txtUserName.Text;
  6. string TestUserPwd = txtPwd.Text;
  7. LDAPHelper objldap = new LDAPHelper();
  8. string strLDAPPath = txtLDAP.Text;
  9. string strLDAPAdminName = txtLUserName.Text;
  10. string strLDAPAdminPwd = txtLPwd.Text;
  11. string strMsg = "";
  12. bool blRet = objldap.OpenConnection(strLDAPPath, strLDAPAdminName, strLDAPAdminPwd);
  13. if (blRet)
  14. {
  15. blRet = objldap.CheckUidAndPwd(strLDAPFilter, TestUserID, TestUserPwd, ref strMsg);
  16. if (blRet)
  17. {
  18. strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "成功";
  19. }
  20. else if (!blRet && string.IsNullOrEmpty(strMsg))
  21. {
  22. strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "失败";
  23. }
  24. }
  25. this.txtLog.Text = System.DateTime.Now.ToString() + ":" + strMsg + "\r\n" + "\r\n" + this.txtLog.Text;
  26. MessageBox.Show(strMsg);
  27. }
  28. }
[csharp] view plaincopy
  1. public class LDAPHelper
  2. {
  3. private DirectoryEntry _objDirectoryEntry;
  4. /// <summary>
  5. /// 构造函数
  6. /// </summary>
  7. /// <param name="LADPath">ldap的地址,例如"LDAP://***.***.48.110:389/dc=***,dc=com"</param>
  8. /// <param name="authUserName">连接用户名,例如"cn=root,dc=***,dc=com"</param>
  9. /// <param name="authPWD">连接密码</param>
  10. public bool OpenConnection(string LADPath, string authUserName, string authPWD)
  11. {    //创建一个连接
  12. _objDirectoryEntry = new DirectoryEntry(LADPath, authUserName, authPWD, AuthenticationTypes.None);
  13. if (null == _objDirectoryEntry)
  14. {
  15. return false;
  16. }
  17. else if (_objDirectoryEntry.Properties!=null&&_objDirectoryEntry.Properties.Count > 0)
  18. {
  19. return true;
  20. }
  21. return false;
  22. }
  23. /// <summary>
  24. /// 检测一个用户和密码是否正确
  25. /// </summary>
  26. /// <param name="strLDAPFilter">(|(uid= {0})(cn={0}))</param>
  27. /// <param name="TestUserID">testuserid</param>
  28. /// <param name="TestUserPwd">testuserpassword</param>
  29. /// <param name="ErrorMessage"></param>
  30. /// <returns></returns>
  31. public bool CheckUidAndPwd(string strLDAPFilter, string TestUserID, string TestUserPwd, ref string ErrorMessage)
  32. {
  33. bool blRet = false;
  34. try
  35. {
  36. //创建一个检索
  37. DirectorySearcher deSearch = new DirectorySearcher(_objDirectoryEntry);
  38. //过滤名称是否存在
  39. deSearch.Filter =strLDAPFilter;
  40. deSearch.SearchScope = SearchScope.Subtree;
  41. //find the first instance
  42. SearchResult objSearResult = deSearch.FindOne();
  43. //如果用户密码为空
  44. if (string.IsNullOrEmpty(TestUserPwd))
  45. {
  46. if (null != objSearResult && null != objSearResult.Properties && objSearResult.Properties.Count > 0)
  47. {
  48. blRet = true;
  49. }
  50. }
  51. else if (null != objSearResult && !string.IsNullOrEmpty(objSearResult.Path))
  52. {
  53. //获取用户名路径对应的用户uid
  54. int pos = objSearResult.Path.LastIndexOf('/');
  55. string uid = objSearResult.Path.Remove(0, pos + 1);
  56. DirectoryEntry objUserEntry = new DirectoryEntry(objSearResult.Path, uid, TestUserPwd, AuthenticationTypes.None);
  57. if (null != objUserEntry && objUserEntry.Properties.Count > 0)
  58. {
  59. blRet = true;
  60. }
  61. }
  62. }
  63. catch (Exception ex)
  64. {
  65. if (null != _objDirectoryEntry)
  66. {
  67. _objDirectoryEntry.Close();
  68. }
  69. ErrorMessage = "检测异常:"+ex.StackTrace;
  70. }
  71. return blRet;
  72. }
  73. /// <summary>
  74. /// 关闭连接
  75. /// </summary>
  76. public void closeConnection()
  77. {
  78. if (null != _objDirectoryEntry)
  79. {
  80. _objDirectoryEntry.Close();
  81. }
  82. }
  83. }

调用

[csharp] view plaincopy
  1. private void btnCheck_Click(object sender, EventArgs e)
  2. {
  3. string strLDAPFilter = string.Format(txtFilter.Text, txtUserName.Text.Trim());
  4. //deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
  5. string TestUserID = txtUserName.Text;
  6. string TestUserPwd = txtPwd.Text;
  7. LDAPHelper objldap = new LDAPHelper();
  8. string strLDAPPath = txtLDAP.Text;
  9. string strLDAPAdminName = txtLUserName.Text;
  10. string strLDAPAdminPwd = txtLPwd.Text;
  11. string strMsg = "";
  12. bool blRet = objldap.OpenConnection(strLDAPPath, strLDAPAdminName, strLDAPAdminPwd);
  13. if (blRet)
  14. {
  15. blRet = objldap.CheckUidAndPwd(strLDAPFilter, TestUserID, TestUserPwd, ref strMsg);
  16. if (blRet)
  17. {
  18. strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "成功";
  19. }
  20. else if (!blRet && string.IsNullOrEmpty(strMsg))
  21. {
  22. strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "失败";
  23. }
  24. }
  25. this.txtLog.Text = System.DateTime.Now.ToString() + ":" + strMsg + "\r\n" + "\r\n" + this.txtLog.Text;
  26. MessageBox.Show(strMsg);
  27. }
  28. }

实例下载:http://download.csdn.net/detail/paolei/6740833

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。

[csharp] view plaincopy
  1. bool checkResult = false;
  2. try
  3. {
  4. string username = Request.Params.Get("username");
  5. string userpwd = Request.Params.Get("userpwd");
  6. string strLADPath = "LDAP://OU=事业部,DC=HOLD,DC=Company,DC=COM";
  7. DirectoryEntry objEntry = new DirectoryEntry(strLADPath);
  8. objEntry.AuthenticationType = AuthenticationTypes.None;
  9. DirectorySearcher deSearch = new DirectorySearcher(objEntry);
  10. //过滤名称是否存在
  11. deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
  12. deSearch.SearchScope = SearchScope.Subtree;
  13. //find the first instance
  14. SearchResult results = deSearch.FindOne();
  15. //check username & userpwd
  16. if (null != results)
  17. {
  18. DirectoryEntry objUserEntry = new DirectoryEntry(results.Path, username, userpwd);
  19. if (null != objUserEntry && null != objUserEntry.Properties
  20. && objUserEntry.Properties.Contains("cn"))
  21. {
  22. checkResult = true;
  23. }
  24. }
  25. Response.Write("认证结果:" + checkResult.ToString());
  26. }
  27. catch (System.Exception ex)
  28. {
  29. Response.Write("认证异常"+ex.StackTrace);
  30. Response.Write("认证结果:" + checkResult.ToString());
  31. }
[csharp] view plaincopy
  1. private void btnCheck_Click(object sender, EventArgs e)
  2. {
  3. string strLDAPFilter = string.Format(txtFilter.Text, txtUserName.Text.Trim());
  4. //deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
  5. string TestUserID = txtUserName.Text;
  6. string TestUserPwd = txtPwd.Text;
  7. LDAPHelper objldap = new LDAPHelper();
  8. string strLDAPPath = txtLDAP.Text;
  9. string strLDAPAdminName = txtLUserName.Text;
  10. string strLDAPAdminPwd = txtLPwd.Text;
  11. string strMsg = "";
  12. bool blRet = objldap.OpenConnection(strLDAPPath, strLDAPAdminName, strLDAPAdminPwd);
  13. if (blRet)
  14. {
  15. blRet = objldap.CheckUidAndPwd(strLDAPFilter, TestUserID, TestUserPwd, ref strMsg);
  16. if (blRet)
  17. {
  18. strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "成功";
  19. }
  20. else if (!blRet && string.IsNullOrEmpty(strMsg))
  21. {
  22. strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "失败";
  23. }
  24. }
  25. this.txtLog.Text = System.DateTime.Now.ToString() + ":" + strMsg + "\r\n" + "\r\n" + this.txtLog.Text;
  26. MessageBox.Show(strMsg);
  27. }
  28. }
[csharp] view plaincopy
  1. public class LDAPHelper
  2. {
  3. private DirectoryEntry _objDirectoryEntry;
  4. /// <summary>
  5. /// 构造函数
  6. /// </summary>
  7. /// <param name="LADPath">ldap的地址,例如"LDAP://***.***.48.110:389/dc=***,dc=com"</param>
  8. /// <param name="authUserName">连接用户名,例如"cn=root,dc=***,dc=com"</param>
  9. /// <param name="authPWD">连接密码</param>
  10. public bool OpenConnection(string LADPath, string authUserName, string authPWD)
  11. {    //创建一个连接
  12. _objDirectoryEntry = new DirectoryEntry(LADPath, authUserName, authPWD, AuthenticationTypes.None);
  13. if (null == _objDirectoryEntry)
  14. {
  15. return false;
  16. }
  17. else if (_objDirectoryEntry.Properties!=null&&_objDirectoryEntry.Properties.Count > 0)
  18. {
  19. return true;
  20. }
  21. return false;
  22. }
  23. /// <summary>
  24. /// 检测一个用户和密码是否正确
  25. /// </summary>
  26. /// <param name="strLDAPFilter">(|(uid= {0})(cn={0}))</param>
  27. /// <param name="TestUserID">testuserid</param>
  28. /// <param name="TestUserPwd">testuserpassword</param>
  29. /// <param name="ErrorMessage"></param>
  30. /// <returns></returns>
  31. public bool CheckUidAndPwd(string strLDAPFilter, string TestUserID, string TestUserPwd, ref string ErrorMessage)
  32. {
  33. bool blRet = false;
  34. try
  35. {
  36. //创建一个检索
  37. DirectorySearcher deSearch = new DirectorySearcher(_objDirectoryEntry);
  38. //过滤名称是否存在
  39. deSearch.Filter =strLDAPFilter;
  40. deSearch.SearchScope = SearchScope.Subtree;
  41. //find the first instance
  42. SearchResult objSearResult = deSearch.FindOne();
  43. //如果用户密码为空
  44. if (string.IsNullOrEmpty(TestUserPwd))
  45. {
  46. if (null != objSearResult && null != objSearResult.Properties && objSearResult.Properties.Count > 0)
  47. {
  48. blRet = true;
  49. }
  50. }
  51. else if (null != objSearResult && !string.IsNullOrEmpty(objSearResult.Path))
  52. {
  53. //获取用户名路径对应的用户uid
  54. int pos = objSearResult.Path.LastIndexOf('/');
  55. string uid = objSearResult.Path.Remove(0, pos + 1);
  56. DirectoryEntry objUserEntry = new DirectoryEntry(objSearResult.Path, uid, TestUserPwd, AuthenticationTypes.None);
  57. if (null != objUserEntry && objUserEntry.Properties.Count > 0)
  58. {
  59. blRet = true;
  60. }
  61. }
  62. }
  63. catch (Exception ex)
  64. {
  65. if (null != _objDirectoryEntry)
  66. {
  67. _objDirectoryEntry.Close();
  68. }
  69. ErrorMessage = "检测异常:"+ex.StackTrace;
  70. }
  71. return blRet;
  72. }
  73. /// <summary>
  74. /// 关闭连接
  75. /// </summary>
  76. public void closeConnection()
  77. {
  78. if (null != _objDirectoryEntry)
  79. {
  80. _objDirectoryEntry.Close();
  81. }
  82. }
  83. }

C# LDAP认证登录类参考相关推荐

  1. AWS托管AD + Yearning配置LDAP认证登录

    AWS托管AD配置 具体创建过程不再赘述, 这里使用我之前创建好的一个AD, 主要是记录下来AD的两个DNS地址, 可以从控制台中查看到 EC2实例配置 先使用Amazon Linux 2 AMI启动 ...

  2. LDAP用户登录认证校验 及 LDAP分页查询

    某天,老大说,给我一个需求,支持LDAP用户登录,一听,哇,这是啥 啥 啥.经过刻苦努力Ctrl+C/V,终于搞出来了,上代码! 了解一下,LDAP(Lightweight Directory Acc ...

  3. 蓝鲸社区版5.1接入ldap认证

    简介 蓝鲸社区版5.1 介入公司内部ldap认证 官方文档社区版: 蓝鲸登录接入企业内部登录中已经通过接入google登录的例子进行说明:但是公司内部只有ldap作为内部服务的统一认证,并不提供相关登 ...

  4. gitlab 将管理员权限移交给ldap账户_CDPDC中Atlas集成FreeIPA的LDAP认证

    文档编写目的Cloudera从CM6.3版本开始,引入了Red Hat IdM来做整个集群的认证,Red Hat IdM对应的软件为FreeIPA,在本文中描述如何使用FreeIPA来做CDP-DC集 ...

  5. Jumpserver部署+Ldap认证

    这篇值得看看:Linux操作文档--jumpserver平台系统部署与使用_增发真人的博客-CSDN博客_www.nxgx 博主这里主要为了快,就使用官网的一键部署了: 安装部署 - JumpServ ...

  6. python实战-实现内网CAS统一认证登录

    CAS(Central Authentication Service)集中式认证服务是一种广泛应用的单点登录协议,特别是在校园网和企业内网,它允许用户只需向认证服务器提供一次凭证,即可以访问多个应用系 ...

  7. Ubuntu下的源码浏览器Opengrok搭建 并集成LDAP认证登陆

    -前言 很多做android开发的小伙伴都知道,快速检索代码的利器opengrok,检索代码非常方便,本人之前多次搭建opengrok,只不过最近迫于代码安全性考虑,终于搞定opengrok+tomc ...

  8. metabase v1.38.1 使用ldap认证

    前言 因为公司采用metabase作为自助式报表工具,为了方便开放给公司的人员使用,避免频繁的手工录入,遂接入公司已有的ldap作为统一认证 一.ldap是什么? ldap是一种轻量目录访问协议,数据 ...

  9. Flask ldap认证

    为什么80%的码农都做不了架构师?>>>    # encoding: utf8from ldap3 import Server, Connection, ALL, SUBTREE, ...

最新文章

  1. Angular给HTML节点绑定自定义属性和变量,用于设置一些动态的状态变化非常有用!
  2. 创建交互式shell脚本对话框
  3. python消费datahub_DataHub使用指南-阿里云开发者社区
  4. 从U盘自动安装centos5.3到服务器
  5. 窗口分析函数_11_生成百分比排名
  6. C语言 linux环境基于socket的简易即时通信程序
  7. 设置springboot日志级别_Spring Boot 日志框架实践
  8. 批处理for命令各开关的含义
  9. 古怪题,5.0-4.90 =?
  10. JZOJ4742 单峰
  11. 刚有个做电商的朋友在说,他们想在网上造出品牌销量很容易
  12. 在所有linux版本安装oracle9i
  13. 一大早,分享一个好消息
  14. 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
  15. 呼叫中心服务器怎么设置,呼叫中心服务器类型有哪几种?
  16. opencv图片显示到mfc控件中,按键打开
  17. Excel ActiveX组合框项目选择宏
  18. 如何下载网页中的视频成mp4格式
  19. The server time zone value '?й???????' is unrecognized or represents more than one time zone.
  20. wampserver安装错误 应用程序无法正常启动0xc000007b解决方法

热门文章

  1. 使用Express开发小说API接口服务1.0(二)
  2. BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
  3. ESXi安全引导如何提升vSphere安全性?
  4. Git系列笔记之一:git的简介及基本配置
  5. 北京大学2016年高等代数与解析几何考研试题
  6. IOProcess基础知识
  7. 苦B的程序猿道路数据验证
  8. 安装flash-----纠结
  9. 2005年2月24日(星期四) 中午,晴+煙 - Central Incubator。
  10. 如何计算两个字符串之间的文本相似度?