LDAP入门学习

来源:互联网 发布:r2v矢量化软件 编辑:程序博客网 时间:2024/06/06 20:12

LDAP入门学习

1        背景概述

LDAP是一个轻量级目录访问协议,笔者由于参加公司项目,在项目需求中涉及到对于LDAP的操作。本文是笔者对LDAP学习知识的记录与总结与大家分享,希望能为大家提供帮助。

2        预期读者

1.       数通畅联全体成员

2.       IT相关行业工作者

3        LDAP简介

3.1    概念介绍

LDAP的全称为Lightweight Directory Access Protocol(轻量级目录访问协议), 基于X.500标准, 支持 TCP/IP。

LDAP目录为数据库,通过LDAP服务器(相当于DBMS)处理查询和更新, 以树状的层次结构来存储数据,相对关系型数据库, LDAP主要是优化数据读取的性能,适用于比较少改变、跨平台的信息。

3.2    命名规则

dn :一条记录的位置(每一个条目的唯一的标识名)

dc :一条记录所属区域(哪一棵树,根节点)

ou :一条记录所属组织(树下的分叉,部门名)

cn/uid:一条记录的名字/ID(叶子节点的名字,员工名)

注意:通常对LDAP的添加、删除、更改、检索都是以条目为基本对象的。

监听端口:

TCP/IP port: 389

SSL port: 636

3.3    位置定义

dn:cn=redgreenapple,ou=north,ou=south,ou=east,dc=apple,dc=tree


4        环境搭建

4.1    介质安装

1.       点击进入如下页面点击“Yes”按钮,开始安装;


2.       点击“Next”按钮,进入安装页面;


3.       点击“Install”按钮,进入安装目录页面;



4.       设置LDAP安装目录后,点击“Next”按钮,进入安装目录页面;


5.       设置LDAP安装内容,点击“Next”按钮,进入下一级页面;


6.       设置主机IP,本例为“ZCY-PC”,以及端口“389,636”以及密码“secret”,点击“Next”按钮,进入下一级页面;


7.       点击“Next”进入进度条安装页面;




8.       安装完成界面,点击“Close”关闭安装界面,进行服务器配置。


4.2    配置调整

1.       安装完成后,在系统服务中,找到 OpenLDAP Service,先停止服务,再把启动类型修改成手动,便于自己的测试。

安装目录:D:\work\agileai\09_study\ldap\OpenLDAP

2.       编辑文件:slapd.conf—注意备份




替换为:

suffix            "dc=micmiu,dc=com"

rootdn          "cn=Manager,dc=micmiu,dc=com"

4.3    启动服务

1.       打开控制台,切换到openLDAP安装目录下,启动openLDAP,命令:slapd -d1




2.       日志信息:slapd starting 表示服务已经启动了。

3.       在openLDAP的安装目录下(D:\work\agileai\09_study\ldap\OpenLDAP)新建文件mydemo.ldif,填写内容如下:


dn:dc=micmiu,dc=com

objectclass:domain

objectclass:top

o:MichaelBlog

dc:micmiu

 

dn:ou=Developer,dc=micmiu,dc=com

objectclass:organizationalUnit

ou:Developer

description:Containerfordeveloperentries

 

dn:ou=Tester,dc=micmiu,dc=com

objectclass:organizationalUnit

ou:Tester

description:Containerfortestentries

 

dn:uid=Michael,ou=Developer,dc=micmiu,dc=com

uid:Michael

objectClass:inetOrgPerson

mail:sjsky_007@gmail.com

userPassword:111111

labeledURI:http://www.micmiu.com

sn:Sun

cn:MichaelSun

 

dn:uid=Miumiu,ou=Tester,dc=micmiu,dc=com

uid:Miumiu

objectClass:inetOrgPerson

userPassword:111111

labeledURI:http://www.micmiu.com

sn:Wu

cn:MiumiuWu

注意:格式要严格,每行的开头和末尾不能有空格

4.       然后在控制台中切换到openLDAP安装目录下执行ldapadd命令:ldapadd -x -D "cn=Manager,dc=micmiu,dc=com" -w secret -f./mydemo.ldif


参数说明:

-x 使用简单验证方式

-D 指定管理员DN(与slapd.conf中配置的一致)

-W 大写W表示回车后根据提示输入密码,可以使用小写的-w password 直接输入密码

-f 需要导入数据LDIF的文件名

-h 目录服务器的IP地址

添加成功会显示如下信息:


5.       验证添加的信息,在控制台中,输入查询命令:ldapsearch -x -b "dc=micmiu,dc=com""(objectclass=*)"

结果如下:

4.4    启动客户端

1.       LdapBrowser282.zip解压后直接双击:lbe.bat文件即可运行。


2.       点击图中的 Fetch DNs 按钮会自动获取相关的DN信息的。


3.       去除Anonymous bind的勾选填写用户“cn=Manager”以及密码“secret”。点击保存后



5        操作LDAP

5.1    创建连接

5.1.1  核心代码

参数说明

Context.INITIAL_CONTEXT_FACTORY:LDAP工厂

Context.PROVIDER_URL:LDAP服务器连接

Context.SECURITY_AUTHENTICATION:LDAP访问安全级别

Context.SECURITY_PRINCIPAL:连接的用户名,DN

Context.SECURITY_CREDENTIALS:密码

5.1.2  测试结果

启动OpenLDAP服务;


打开客户端进行链接测试,保证服务无问题;


调用main中init方法认证连接服务器,结果如下:


5.2    写入方法

5.2.1  OU节点

5.2.1.1 核心代码

核心代码如下:


代码说明

1.       创建BasicAttributes对象,以及初始化objectClass;

2.       设置objectClass的类型为organizationalUnit;

3.       添加organizationalUnit中必要的属性ou以及description;

4.       调用createSubcontext方法创建OU节点。

5.2.1.2 测试结果

Main函数调用addOu(root,ouName),入参为:

String root = "dc=micmiu,dc=com";

String ouName = "hi";

 

运行结果


刷新LDAP客户端显示添加信息如下:


5.2.2  CN节点

5.2.2.1 核心代码

核心代码如下:


代码说明

1.       创建BasicAttributes对象,以及初始化objectClass;

2.       设置objectClass的类型为inetOrgPerson;

3.       添加inetOrgPerson中的属性cn,sn等;

4.       调用createSubcontext创建cn节点。

5.2.2.2 测试结果

Main函数调用addCnOrUid(root,ouName,cnName),入参为:

String root = "dc=micmiu,dc=com";

String ouName = "hi";

String cnName = "zhangsan";

 

运行结果


点击“刷新”按钮刷新LDAP客户端显示添加信息如下:


5.3    读取方法

5.3.1  全部节点

5.3.1.1 核心代码

核心代码如下:


代码说明

1.       初始化NamingEnumeration对象,获取入参下的对象信息;

2.       遍历NamingEnumeration对象,获取对象中的属性信息分别进行打印;

3.       获取NamingEnumeration对象下子节点的信息,原理与上方相同;

4.       遍历子节点信息进行打印;

5.3.1.2 测试结果

Main函数调用searchInformation(),入参为:

String root = "dc=micmiu,dc=com";

"(objectclass=*)"

 

运行结果


5.3.2  指定节点

5.3.2.1 核心代码

与获取全部节点方法相同,传递参数不同

5.3.2.2 测试结果

Main函数调用searchInformation(),入参为:

"ou=hi,"+root,"","(objectclass=*)"

 

运行结果


5.4    修改方法

5.4.1  OU属性

5.4.1.1 增加OU属性

核心代码


代码说明

1.       初始化ModificationItem,定义需要添加属性的个数,本样例中为2个属性;

2.       定义Attribute并将需要添加的属性进行初始化,添加至ModificationItem数组对象中;

3.       添加属性的标签为DirContext.ADD_ATTRIBUTE;

4.       调用modifyAttributes方法进行添加属性信息。

测试说明

Main函数调用addDescription4OuInfo("ou="+ouName + "," + root);

运行结果


点击“刷新”按钮刷新LDAP客户端后,显示添加属性如下:


5.4.1.2 修改OU属性

核心代码


代码说明

1.       初始化ModificationItem,定义需要修改属性的个数,本样例中为1个属性;

2.       定义Attribute并将需要修改的属性进行初始化,添加至ModificationItem数组对象中;

3.       修改属性的标签为DirContext. REPLACE_ATTRIBUTE;

4.       调用modifyAttributes方法进行修改属性信息。

测试结果

Main函数调用modifyDescription4OuInfo("ou="+ouName + "," + root);

运行结果


点击“”按钮刷新LDAP客户端后,显示添加属性如下:


5.4.1.3 删除OU属性

核心代码


代码说明

1.       初始化ModificationItem,定义需要删除属性的个数,本样例中为1个属性;

2.       定义Attribute并将需要删除的属性进行初始化,添加至ModificationItem数组对象中;

3.       删除属性的标签为DirContext. REMOVE_ATTRIBUTE;

4.       调用modifyAttributes方法进行删除属性信息。

测试结果

Main函数调用delDescription4OuInfo("ou="+ouName + "," + root);

运行结果


点击“刷新”按钮刷新LDAP客户端后,显示添加属性如下:


5.4.2  CN属性

5.4.2.1 增加CN属性

核心代码


代码说明

1.       初始化ModificationItem,定义需要添加属性的个数,本样例中为3个属性;

2.       定义Attribute并将需要添加的属性进行初始化,添加至ModificationItem数组对象中;

3.       添加属性的标签为DirContext. ADD_ATTRIBUTE;

4.       调用modifyAttributes方法进行添加属性信息。

测试结果

Main函数调用addDescription4CnInfo("cn="+cnName +"," + "ou="+ ouName + "," + root);

运行结果


点击“刷新”按钮刷新LDAP客户端后,显示添加属性如下:


5.4.2.2 修改CN属性

核心代码


代码说明

1.       初始化ModificationItem,定义需要修改属性的个数,本样例中为1个属性;

2.       定义Attribute并将需要修改的属性进行初始化,添加至ModificationItem数组对象中;

3.       修改属性的标签为DirContext. REPLACE_ATTRIBUTE;

4.       调用modifyAttributes方法进行修改属性信息。

测试结果

Main函数调用modifyDescription4CnInfo("cn="+cnName +"," + "ou="+ ouName + "," + root);

运行结果


点击“刷新”按钮刷新LDAP客户端后,显示修改属性如下:


5.4.2.3 删除CN属性

核心代码


代码说明

1.       初始化ModificationItem,定义需要删除属性的个数,本样例中为1个属性;

2.       定义Attribute并将需要删除的属性进行初始化,添加至ModificationItem数组对象中;

3.       删除属性的标签为DirContext. REMOVE_ATTRIBUTE;

4.       调用modifyAttributes方法进行删除属性信息。

测试结果

Main函数调用delDescription4CnInfo("cn="+cnName +"," + "ou="+ ouName + "," + root);

运行结果


点击“”按钮刷新LDAP客户端后,显示全部属性如下:


5.5    删除方法

5.5.1  删除CN

5.5.1.1 核心代码


5.5.1.2 测试结果

Main函数调用deleteCnOrUid("cn="+cnName +"," + "ou="+ ouName +"," + root);

运行结果


点击“刷新”按钮刷新LDAP客户端后,显示如下:


5.5.2  删除OU

5.5.2.1 核心代码


5.5.2.2 测试结果

Main函数调用deleteOu("ou="+ouName + "," + root);

运行结果


点击“刷新”按钮刷新LDAP客户端后,显示如下:


5.5.3  全部删除

5.5.3.1 核心代码


代码说明

1.       通过传入ou以及root删除ou节点以及ou下子节点,读取ou下子节点信息放入NamingEnumeration对象中;

2.       遍历NamingEnumeration对象,拼接参数后调用删除cn节点方法,进行删除

3.       循环删除至ou下子节点全部被删除;

4.       删除ou节点信息。

5.5.3.2 测试结果

Main函数调用deleteOu8Cn("ou="+ouName , root);

运行结果


打开LDAP客户端查看属性信息如下:



点击“”按钮刷新LDAP客户端后,显示如下:


6        附件说明

附件为LdapHelper(下载链接链接: https://pan.baidu.com/s/1qYr4Vb2 密码: 2aps),包含相关的样例代码方法,LDAP的安装包以及客户端。



原创粉丝点击