C# LDAP认证登录类参考
写了一个通用的认证类,请看代码
- private void btnCheck_Click(object sender, EventArgs e)
- {
- string strLDAPFilter = string.Format(txtFilter.Text, txtUserName.Text.Trim());
- //deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
- string TestUserID = txtUserName.Text;
- string TestUserPwd = txtPwd.Text;
- LDAPHelper objldap = new LDAPHelper();
- string strLDAPPath = txtLDAP.Text;
- string strLDAPAdminName = txtLUserName.Text;
- string strLDAPAdminPwd = txtLPwd.Text;
- string strMsg = "";
- bool blRet = objldap.OpenConnection(strLDAPPath, strLDAPAdminName, strLDAPAdminPwd);
- if (blRet)
- {
- blRet = objldap.CheckUidAndPwd(strLDAPFilter, TestUserID, TestUserPwd, ref strMsg);
- if (blRet)
- {
- strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "成功";
- }
- else if (!blRet && string.IsNullOrEmpty(strMsg))
- {
- strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "失败";
- }
- }
- this.txtLog.Text = System.DateTime.Now.ToString() + ":" + strMsg + "\r\n" + "\r\n" + this.txtLog.Text;
- MessageBox.Show(strMsg);
- }
- }
- public class LDAPHelper
- {
- private DirectoryEntry _objDirectoryEntry;
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="LADPath">ldap的地址,例如"LDAP://***.***.48.110:389/dc=***,dc=com"</param>
- /// <param name="authUserName">连接用户名,例如"cn=root,dc=***,dc=com"</param>
- /// <param name="authPWD">连接密码</param>
- public bool OpenConnection(string LADPath, string authUserName, string authPWD)
- { //创建一个连接
- _objDirectoryEntry = new DirectoryEntry(LADPath, authUserName, authPWD, AuthenticationTypes.None);
- if (null == _objDirectoryEntry)
- {
- return false;
- }
- else if (_objDirectoryEntry.Properties!=null&&_objDirectoryEntry.Properties.Count > 0)
- {
- return true;
- }
- return false;
- }
- /// <summary>
- /// 检测一个用户和密码是否正确
- /// </summary>
- /// <param name="strLDAPFilter">(|(uid= {0})(cn={0}))</param>
- /// <param name="TestUserID">testuserid</param>
- /// <param name="TestUserPwd">testuserpassword</param>
- /// <param name="ErrorMessage"></param>
- /// <returns></returns>
- public bool CheckUidAndPwd(string strLDAPFilter, string TestUserID, string TestUserPwd, ref string ErrorMessage)
- {
- bool blRet = false;
- try
- {
- //创建一个检索
- DirectorySearcher deSearch = new DirectorySearcher(_objDirectoryEntry);
- //过滤名称是否存在
- deSearch.Filter =strLDAPFilter;
- deSearch.SearchScope = SearchScope.Subtree;
- //find the first instance
- SearchResult objSearResult = deSearch.FindOne();
- //如果用户密码为空
- if (string.IsNullOrEmpty(TestUserPwd))
- {
- if (null != objSearResult && null != objSearResult.Properties && objSearResult.Properties.Count > 0)
- {
- blRet = true;
- }
- }
- else if (null != objSearResult && !string.IsNullOrEmpty(objSearResult.Path))
- {
- //获取用户名路径对应的用户uid
- int pos = objSearResult.Path.LastIndexOf('/');
- string uid = objSearResult.Path.Remove(0, pos + 1);
- DirectoryEntry objUserEntry = new DirectoryEntry(objSearResult.Path, uid, TestUserPwd, AuthenticationTypes.None);
- if (null != objUserEntry && objUserEntry.Properties.Count > 0)
- {
- blRet = true;
- }
- }
- }
- catch (Exception ex)
- {
- if (null != _objDirectoryEntry)
- {
- _objDirectoryEntry.Close();
- }
- ErrorMessage = "检测异常:"+ex.StackTrace;
- }
- return blRet;
- }
- /// <summary>
- /// 关闭连接
- /// </summary>
- public void closeConnection()
- {
- if (null != _objDirectoryEntry)
- {
- _objDirectoryEntry.Close();
- }
- }
- }
调用
- private void btnCheck_Click(object sender, EventArgs e)
- {
- string strLDAPFilter = string.Format(txtFilter.Text, txtUserName.Text.Trim());
- //deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
- string TestUserID = txtUserName.Text;
- string TestUserPwd = txtPwd.Text;
- LDAPHelper objldap = new LDAPHelper();
- string strLDAPPath = txtLDAP.Text;
- string strLDAPAdminName = txtLUserName.Text;
- string strLDAPAdminPwd = txtLPwd.Text;
- string strMsg = "";
- bool blRet = objldap.OpenConnection(strLDAPPath, strLDAPAdminName, strLDAPAdminPwd);
- if (blRet)
- {
- blRet = objldap.CheckUidAndPwd(strLDAPFilter, TestUserID, TestUserPwd, ref strMsg);
- if (blRet)
- {
- strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "成功";
- }
- else if (!blRet && string.IsNullOrEmpty(strMsg))
- {
- strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "失败";
- }
- }
- this.txtLog.Text = System.DateTime.Now.ToString() + ":" + strMsg + "\r\n" + "\r\n" + this.txtLog.Text;
- MessageBox.Show(strMsg);
- }
- }
实例下载: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网页中找到。
- bool checkResult = false;
- try
- {
- string username = Request.Params.Get("username");
- string userpwd = Request.Params.Get("userpwd");
- string strLADPath = "LDAP://OU=事业部,DC=HOLD,DC=Company,DC=COM";
- DirectoryEntry objEntry = new DirectoryEntry(strLADPath);
- objEntry.AuthenticationType = AuthenticationTypes.None;
- DirectorySearcher deSearch = new DirectorySearcher(objEntry);
- //过滤名称是否存在
- deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
- deSearch.SearchScope = SearchScope.Subtree;
- //find the first instance
- SearchResult results = deSearch.FindOne();
- //check username & userpwd
- if (null != results)
- {
- DirectoryEntry objUserEntry = new DirectoryEntry(results.Path, username, userpwd);
- if (null != objUserEntry && null != objUserEntry.Properties
- && objUserEntry.Properties.Contains("cn"))
- {
- checkResult = true;
- }
- }
- Response.Write("认证结果:" + checkResult.ToString());
- }
- catch (System.Exception ex)
- {
- Response.Write("认证异常"+ex.StackTrace);
- Response.Write("认证结果:" + checkResult.ToString());
- }
- private void btnCheck_Click(object sender, EventArgs e)
- {
- string strLDAPFilter = string.Format(txtFilter.Text, txtUserName.Text.Trim());
- //deSearch.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
- string TestUserID = txtUserName.Text;
- string TestUserPwd = txtPwd.Text;
- LDAPHelper objldap = new LDAPHelper();
- string strLDAPPath = txtLDAP.Text;
- string strLDAPAdminName = txtLUserName.Text;
- string strLDAPAdminPwd = txtLPwd.Text;
- string strMsg = "";
- bool blRet = objldap.OpenConnection(strLDAPPath, strLDAPAdminName, strLDAPAdminPwd);
- if (blRet)
- {
- blRet = objldap.CheckUidAndPwd(strLDAPFilter, TestUserID, TestUserPwd, ref strMsg);
- if (blRet)
- {
- strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "成功";
- }
- else if (!blRet && string.IsNullOrEmpty(strMsg))
- {
- strMsg = "检测用户名" + TestUserID + "和密码" + TestUserPwd + "失败";
- }
- }
- this.txtLog.Text = System.DateTime.Now.ToString() + ":" + strMsg + "\r\n" + "\r\n" + this.txtLog.Text;
- MessageBox.Show(strMsg);
- }
- }
- public class LDAPHelper
- {
- private DirectoryEntry _objDirectoryEntry;
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="LADPath">ldap的地址,例如"LDAP://***.***.48.110:389/dc=***,dc=com"</param>
- /// <param name="authUserName">连接用户名,例如"cn=root,dc=***,dc=com"</param>
- /// <param name="authPWD">连接密码</param>
- public bool OpenConnection(string LADPath, string authUserName, string authPWD)
- { //创建一个连接
- _objDirectoryEntry = new DirectoryEntry(LADPath, authUserName, authPWD, AuthenticationTypes.None);
- if (null == _objDirectoryEntry)
- {
- return false;
- }
- else if (_objDirectoryEntry.Properties!=null&&_objDirectoryEntry.Properties.Count > 0)
- {
- return true;
- }
- return false;
- }
- /// <summary>
- /// 检测一个用户和密码是否正确
- /// </summary>
- /// <param name="strLDAPFilter">(|(uid= {0})(cn={0}))</param>
- /// <param name="TestUserID">testuserid</param>
- /// <param name="TestUserPwd">testuserpassword</param>
- /// <param name="ErrorMessage"></param>
- /// <returns></returns>
- public bool CheckUidAndPwd(string strLDAPFilter, string TestUserID, string TestUserPwd, ref string ErrorMessage)
- {
- bool blRet = false;
- try
- {
- //创建一个检索
- DirectorySearcher deSearch = new DirectorySearcher(_objDirectoryEntry);
- //过滤名称是否存在
- deSearch.Filter =strLDAPFilter;
- deSearch.SearchScope = SearchScope.Subtree;
- //find the first instance
- SearchResult objSearResult = deSearch.FindOne();
- //如果用户密码为空
- if (string.IsNullOrEmpty(TestUserPwd))
- {
- if (null != objSearResult && null != objSearResult.Properties && objSearResult.Properties.Count > 0)
- {
- blRet = true;
- }
- }
- else if (null != objSearResult && !string.IsNullOrEmpty(objSearResult.Path))
- {
- //获取用户名路径对应的用户uid
- int pos = objSearResult.Path.LastIndexOf('/');
- string uid = objSearResult.Path.Remove(0, pos + 1);
- DirectoryEntry objUserEntry = new DirectoryEntry(objSearResult.Path, uid, TestUserPwd, AuthenticationTypes.None);
- if (null != objUserEntry && objUserEntry.Properties.Count > 0)
- {
- blRet = true;
- }
- }
- }
- catch (Exception ex)
- {
- if (null != _objDirectoryEntry)
- {
- _objDirectoryEntry.Close();
- }
- ErrorMessage = "检测异常:"+ex.StackTrace;
- }
- return blRet;
- }
- /// <summary>
- /// 关闭连接
- /// </summary>
- public void closeConnection()
- {
- if (null != _objDirectoryEntry)
- {
- _objDirectoryEntry.Close();
- }
- }
- }
C# LDAP认证登录类参考相关推荐
- AWS托管AD + Yearning配置LDAP认证登录
AWS托管AD配置 具体创建过程不再赘述, 这里使用我之前创建好的一个AD, 主要是记录下来AD的两个DNS地址, 可以从控制台中查看到 EC2实例配置 先使用Amazon Linux 2 AMI启动 ...
- LDAP用户登录认证校验 及 LDAP分页查询
某天,老大说,给我一个需求,支持LDAP用户登录,一听,哇,这是啥 啥 啥.经过刻苦努力Ctrl+C/V,终于搞出来了,上代码! 了解一下,LDAP(Lightweight Directory Acc ...
- 蓝鲸社区版5.1接入ldap认证
简介 蓝鲸社区版5.1 介入公司内部ldap认证 官方文档社区版: 蓝鲸登录接入企业内部登录中已经通过接入google登录的例子进行说明:但是公司内部只有ldap作为内部服务的统一认证,并不提供相关登 ...
- gitlab 将管理员权限移交给ldap账户_CDPDC中Atlas集成FreeIPA的LDAP认证
文档编写目的Cloudera从CM6.3版本开始,引入了Red Hat IdM来做整个集群的认证,Red Hat IdM对应的软件为FreeIPA,在本文中描述如何使用FreeIPA来做CDP-DC集 ...
- Jumpserver部署+Ldap认证
这篇值得看看:Linux操作文档--jumpserver平台系统部署与使用_增发真人的博客-CSDN博客_www.nxgx 博主这里主要为了快,就使用官网的一键部署了: 安装部署 - JumpServ ...
- python实战-实现内网CAS统一认证登录
CAS(Central Authentication Service)集中式认证服务是一种广泛应用的单点登录协议,特别是在校园网和企业内网,它允许用户只需向认证服务器提供一次凭证,即可以访问多个应用系 ...
- Ubuntu下的源码浏览器Opengrok搭建 并集成LDAP认证登陆
-前言 很多做android开发的小伙伴都知道,快速检索代码的利器opengrok,检索代码非常方便,本人之前多次搭建opengrok,只不过最近迫于代码安全性考虑,终于搞定opengrok+tomc ...
- metabase v1.38.1 使用ldap认证
前言 因为公司采用metabase作为自助式报表工具,为了方便开放给公司的人员使用,避免频繁的手工录入,遂接入公司已有的ldap作为统一认证 一.ldap是什么? ldap是一种轻量目录访问协议,数据 ...
- Flask ldap认证
为什么80%的码农都做不了架构师?>>> # encoding: utf8from ldap3 import Server, Connection, ALL, SUBTREE, ...
最新文章
- Angular给HTML节点绑定自定义属性和变量,用于设置一些动态的状态变化非常有用!
- 创建交互式shell脚本对话框
- python消费datahub_DataHub使用指南-阿里云开发者社区
- 从U盘自动安装centos5.3到服务器
- 窗口分析函数_11_生成百分比排名
- C语言 linux环境基于socket的简易即时通信程序
- 设置springboot日志级别_Spring Boot 日志框架实践
- 批处理for命令各开关的含义
- 古怪题,5.0-4.90 =?
- JZOJ4742 单峰
- 刚有个做电商的朋友在说,他们想在网上造出品牌销量很容易
- 在所有linux版本安装oracle9i
- 一大早,分享一个好消息
- 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
- 呼叫中心服务器怎么设置,呼叫中心服务器类型有哪几种?
- opencv图片显示到mfc控件中,按键打开
- Excel ActiveX组合框项目选择宏
- 如何下载网页中的视频成mp4格式
- The server time zone value '?й???????' is unrecognized or represents more than one time zone.
- wampserver安装错误 应用程序无法正常启动0xc000007b解决方法