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:[email protected] 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 核心代码
核心代码如下:
u 代码说明
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 核心代码
核心代码如下:
u 代码说明
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 核心代码
核心代码如下:
u 代码说明
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属性
u 核心代码
u 代码说明
1. 初始化ModificationItem,定义需要添加属性的个数,本样例中为2个属性;
2. 定义Attribute并将需要添加的属性进行初始化,添加至ModificationItem数组对象中;
3. 添加属性的标签为DirContext.ADD_ATTRIBUTE;
4. 调用modifyAttributes方法进行添加属性信息。
u 测试说明
Main函数调用addDescription4OuInfo("ou="+ouName + "," + root);
运行结果
点击“刷新”按钮刷新LDAP客户端后,显示添加属性如下:
5.4.1.2 修改OU属性
u 核心代码
u 代码说明
1. 初始化ModificationItem,定义需要修改属性的个数,本样例中为1个属性;
2. 定义Attribute并将需要修改的属性进行初始化,添加至ModificationItem数组对象中;
3. 修改属性的标签为DirContext. REPLACE_ATTRIBUTE;
4. 调用modifyAttributes方法进行修改属性信息。
u 测试结果
Main函数调用modifyDescription4OuInfo("ou="+ouName + "," + root);
运行结果
点击“”按钮刷新LDAP客户端后,显示添加属性如下:
5.4.1.3 删除OU属性
u 核心代码
u 代码说明
1. 初始化ModificationItem,定义需要删除属性的个数,本样例中为1个属性;
2. 定义Attribute并将需要删除的属性进行初始化,添加至ModificationItem数组对象中;
3. 删除属性的标签为DirContext. REMOVE_ATTRIBUTE;
4. 调用modifyAttributes方法进行删除属性信息。
u 测试结果
Main函数调用delDescription4OuInfo("ou="+ouName + "," + root);
运行结果
点击“刷新”按钮刷新LDAP客户端后,显示添加属性如下:
5.4.2 CN属性
5.4.2.1 增加CN属性
u 核心代码
u 代码说明
1. 初始化ModificationItem,定义需要添加属性的个数,本样例中为3个属性;
2. 定义Attribute并将需要添加的属性进行初始化,添加至ModificationItem数组对象中;
3. 添加属性的标签为DirContext. ADD_ATTRIBUTE;
4. 调用modifyAttributes方法进行添加属性信息。
u 测试结果
Main函数调用addDescription4CnInfo("cn="+cnName +"," + "ou="+ ouName + "," + root);
运行结果
点击“刷新”按钮刷新LDAP客户端后,显示添加属性如下:
5.4.2.2 修改CN属性
u 核心代码
u 代码说明
1. 初始化ModificationItem,定义需要修改属性的个数,本样例中为1个属性;
2. 定义Attribute并将需要修改的属性进行初始化,添加至ModificationItem数组对象中;
3. 修改属性的标签为DirContext. REPLACE_ATTRIBUTE;
4. 调用modifyAttributes方法进行修改属性信息。
u 测试结果
Main函数调用modifyDescription4CnInfo("cn="+cnName +"," + "ou="+ ouName + "," + root);
运行结果
点击“刷新”按钮刷新LDAP客户端后,显示修改属性如下:
5.4.2.3 删除CN属性
u 核心代码
u 代码说明
1. 初始化ModificationItem,定义需要删除属性的个数,本样例中为1个属性;
2. 定义Attribute并将需要删除的属性进行初始化,添加至ModificationItem数组对象中;
3. 删除属性的标签为DirContext. REMOVE_ATTRIBUTE;
4. 调用modifyAttributes方法进行删除属性信息。
u 测试结果
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 核心代码
u 代码说明
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的安装包以及客户端。