最近项目上为了增强安全性的访问,原本是 ldap 访问的 ad 域,要升级成为 ldaps ,这里可能要向大家普及下概念如下:
LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。
目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。
目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
LDAP目录服务是由目录数据库和一套访问协议组成的系统。
我们知道跟了解概念之后,接下来,我们要用到的其实是 ldap 的登录功能,也就是所谓的域登录,基本上在各大项目上用的最多的就是这功能。
AD域登录其实就是为了避免多个系统,用户登录不同系统都要用不同的用户名密码来登录,其实就是方便用户的操作。
接下来,我们先来看下,ad域没启用 ssl 之前的代码如下:
domain:ldap.example.com
DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", domain), username, password);
DirectorySearcher search = new DirectorySearcher(entry); //创建DirectoryEntry对象的搜索对象
search.Filter = "(SAMAccountName=" + username + ")"; //过滤条件为登录帐号=user
SearchResult result = search.FindOne(); //查找第一个
if (null == result)
{
//没找到
}
else
{
AD域验证成功
}
那其实代码是相当简洁的,也不复杂,如何要启用ssl 代码如下 :
domain:ldap.example.com:636 (注意这里升级要加上 636 端口)
DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", domain), username, password);
entry.AuthenticationType = AuthenticationTypes.SecureSocketsLayer;
DirectorySearcher search = new DirectorySearcher(entry); //创建DirectoryEntry对象的搜索对象
search.Filter = "(SAMAccountName=" + username + ")"; //过滤条件为登录帐号=user
SearchResult result = search.FindOne(); //查找第一个
if (null == result)
{
//没找到
}
else
{
AD域验证成功
}
通过上边的代码,我们可以看到,这其实是非常简单的,就可以完成升级。
大家避坑的话 就是 string.Format("LDAP://{0}", domain) 这里其实没必要改成 LDAPS,由于之前实验过,所以呢,这里肯定是报错的。
网上其实很多代码,但最简单的升级改造就加多一句代码,就可以完成这个所谓的升级。
以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。
要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。
- THE END -
最后修改:2024年10月9日
非特殊说明,本博所有文章均为博主原创。
共有 0 条评论