Windows 下搭建LDAP服务器.docx
《Windows 下搭建LDAP服务器.docx》由会员分享,可在线阅读,更多相关《Windows 下搭建LDAP服务器.docx(11页珍藏版)》请在冰点文库上搜索。
Windows下搭建LDAP服务器
Windows下搭建LDAP服务器
五一闲来没事,加上项目正在进行UAT。
抽空研究了一下LDAP相关知识。
随手做一个记录。
为了方便阅读还是先介绍一下什么是LDAP?
前言、LightweightDirectoryAccessProtocol:
TheLightweightDirectoryAccessProtocol,orLDAP,isanapplicationprotocolforqueryingandmodifyingdirectoryservicesrunningoverTCP/IP.(viawikipedia)。
LDAP全称是一个轻量级的目录访问协议,它是建立在TCP/IP基础之上的用来查询和修改目录服务的。
这是照着wiki翻译的,但是有人要问了什么是directoryService(目录服务)?
按照wiki的说法的话讲:
在软件行业,目录就如同一个字典,他使得通过某一名称去查找绑定在该名称上的值得方式成为一种可能。
有点类似Java中Map的概念。
adirectoryserviceissimplythesoftwaresystemthatstores,organizesandprovidesaccesstoinformationinadirectory.一个目录服务就是一个简单的软件系统,在这个目录上提供了存取和组织信息的功能。
LDAP目录中可以存储各种类型的数据:
电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表,等等。
OK,进入正题。
Google搜索windowsldap服务器,终于找到了一个比较好的流行的:
OpenLDAP(点击下载)。
一、OpenLDAP安装和配置
安装还是比较简单的,一直next就好。
这里记得把上面2个都选上,将LDAP注册为系统的一个服务,默认安装位置:
C:
\ProgramFiles\OpenLDAP,
进入安装目录,编辑slapd.conf文件:
找到
ucdata-path./ucdata
include./schema/core.schema
在下面加入:
(注意你的系统路径,可能随安装位置不同而稍有差异)
include./schema/core.schema(这里是和原来有的,如果加入的话就重复包含了,不能正常启动了。
应该除这句外都加入)include./schema/corba.schema
include./schema/dyngroup.schema
include./schema/java.schema
include./schema/misc.schema
include./schema/cosine.schema
include./schema/nis.schema
include./schema/inetorgperson.schema
include./schema/openldap.schema
这个搞定以后,在同一文件后面的(大概65-66行,修改)
suffix”o=anotherbug,c=com“(直接拷贝过去引号会变成中文的。
注意引号用英文的,会影响启动)
rootdn”cn=manager,o=anotherbug,c=com“
还有第70行的位置:
rootpwsecret,这里要修改为加密后的密码。
具体操作:
打开命令行,定位到安装目录下,输入:
slappasswd-h{MD5}–s“替换为你想要设置的密码,无引号”
将生成的MD5密文:
{MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==填入原来secret位置。
OK至此配置已经搞定,可以测试一下服务了。
打开命令行转到安装目录下输入:
sldapd-d1注意命令是(slapd-d1)
至此LDAP服务器已经搭建并可以跑起来了.下面要来测试怎么倒入.ldif格式的数据了。
二、建立条目(Entry),导入ldif后缀名文件
ldif:
LDAPDataInterchangeFormat,基于文本。
有两种类型的LDIF文件:
第一种是描述Directory条目数据的,第二种是描述更新条目的。
我们主要看怎么描述条目的。
打开编辑器(如Editplus,UltraEdit等),新建test.ldif内容如下:
dn:
o=anotherbug,c=com
objectClass:
dcObject
objectClass:
organization
o:
anotherbug
dc:
com
dn:
uid=mousepoato,o=anotherbug,c=com
uid:
mousepoato
objectClass:
inetOrgPerson
mail:
paradise.lsj@
userPassword:
admin
labeledURI:
sn:
Li
cn:
test
注意ldif文件对格式的要求非常严格,属性要以冒号和空格与值隔开,并且其他地方不允许有空格。
否则当你导入ldif文件时,会提示出现“ldap_add:
Invalidsyntax(21)”等诸多错误,另外在我机器上测试,ldif对中文支持也还不好,比如我将最后的cn:
test改为cn:
鼠标土豆,导入就会报错。
写完保存到安装目录下。
在命令行输入:
ldapadd-c-x-D“cn=manager,o=anotherbug,c=com”-w“刚才替换secret出的密码明文”-ftest.ldif
运行命令后结果如下:
注意我们在ldapadd后面加上了”–c“参数,他会一直运行不会因错误而终止,比如对系统已经存在的entry命令会提示但不会中止。
三、LDAP查看工具
可能大家看了这么多感觉还是很抽象,我们需要一个GUI看看LDAP到底是个什么东东。
这里推荐两个浏览工具
1、LdapBrowser
这是个Java开发的LDAPBrowser/Editor工具,不但跨平台(Windows,Unix-like),而且功能非常完整,速度又快。
运行起来的界面时这个样子的。
2、SoftrraLDAPAdministrator2009
这是一个比较强大和专业的客户端,涵盖了大多数企业的LDAP服务类型。
一直下一步安装成功后,它的配置也是比较简单的:
新建一个profile,命名为Local_LDAP
配置连接信息
这是完整配置好后的效果
四、通过JNDIapi操作LDAP例子
Javax里面提供的JNDI为我们封装好了对LDAP的directoryservice进行存取查询的函数,可以方便实用。
贴上我用JUnit4写一个对LADP服务器进行测试的代码供参考:
privatestaticLoggerlog=Logger.getLogger(TestLdapOper.class);
DirContextcontext=null;
TestLdaptldap=null;
@Before
publicvoidinit()throwsNamingException{
tldap=newTestLdap();
context=tldap.getContext();//获取context
}
@Test
@Ignore
publicvoidtestInsert()throwsNamingException{
tldap.addEntry(context,“uid=IBM,o=anotherbug,c=com”);
}
@SuppressWarnings(“unchecked”)
@Test
publicvoidtestGetAttributes()throwsNamingException{
ListattNameList=newArrayList();
attNameList.add(“o”);
attNameList.add(“dc”);
attNameList.add(“objectClass”);
Mapmap=JNDIUitl.getAttributes(context,“o=anotherbug,c=com”,attNameList);
IteratorkeyValuePairs=map.entrySet().iterator();
for(inti=0;iMap.Entryentry=(Map.Entry)keyValuePairs.next();
Objectkey=entry.getKey();
Objectvalue=entry.getValue();
log.info(key+“==key”);
log.info(value+“–value”);
}
}
@SuppressWarnings(“unchecked”)
@Test
publicvoidtestGetAttriValues()throwsNamingException{
assertEquals(“”,JNDIUitl.getAttributeValues(context,“o=anotherbug,c=com”,“dc”).get(0)+“”);
Listlst=newArrayList();
lst=JNDIUitl.getAttributeValues(context,“o=anotherbug,c=com”,“objectClass”);
assertEquals(“organization”,lst.get
(1)+“”);
for(inti=0;ilog.info(lst.get(i));
log.info(ReflectionToStringBuilder.toString(lst.get(i)).toString());
}
}
@SuppressWarnings(“unchecked”)
@Test
publicvoidtestSearchContext()throwsNamingException{
Listlist=JNDIUitl.searchContextSub(context,“o=anotherbug,c=com”,“(objectClass=*)”);
for(inti=0;ilog.info(list.get(i));
}
}
@After
publicvoiddestroy()throwsNamingException{
context.close();
}
补充
另外一款LDAP软件LDAPAdminToolProfessional
官方地址:
C#到LDAP验证的代码
在我的空间文件夹里放着呢(本站的SkyDrive)
guangzhi►SkyDrive►计算机类文件夹
http:
//cid-