OpenDJ入门 | 5分钟快速入门Forgerock DS
本教程为了让大家快速体验,故不做深入讲解,详细内容请留意后续进阶教程
介绍
OpenDJ是一个目录服务器,它实现了各种轻量级目录访问协议和相关标准,包括完全符合LDAPv3,但也支持目录服务标记语言(DSMLv2)。OpenDJ 用Java编写,提供多主复制,访问控制和许多扩展。
OpenDJ最初是OpenDS的一个分支,它是一个LDAP / DSML服务器,起源于2005年,由Neil A. Wilson创建的Sun Microsystems内部项目,后来发展成为由Oracle公司维护的开源项目。继甲骨文收购Sun之后,OpenDJ是ForgeRock开发的主干。
OpenDJ与Forgerock Directory Service
很多人会有疑惑,Forgerock官网上并没有OpenDJ,只有Forgerock Directory Service。OpenDJ的前身是Oracle OpenDS,后来负责OpenDS的核心成员离开,去到ForgeRock公司,发布了OpenDJ开源项目,自2016年11月起,ForgeRock关闭了OpenDJ源代码,将OpenDJ重命名为Forgerock Dirctory Service,并开始在商业许可下分发。
目录服务
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中:
- 企业员工信息,如姓名、电话、邮箱等;
- 公用证书和安全密钥;
- 公司的物理设备信息,如服务器,它的IP地址、存放位置、厂商、购买时间等;
- LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,LDAP是从X.500目录访问协议的基础上发展过来的,目前的版本是v3.0。与LDAP一样提供类似的目录服务软件还有ApacheDS、Active Directory、Red Hat Directory Service 、Forgerock Directory Service。
LDAP的特点
- LDAP的结构用树来表示,而不是用表格。正因为这样,就不能用SQL语句了
- LDAP提供了静态数据的快速查询方式
- Client/server模型,Server 用于存储数据,Client提供操作目录信息树的工具
- 这些工具可以将数据库的内容以文本格式(LDAP 数据交换格式,LDIF)呈现在您的面前
- LDAP是一种开放Internet标准,LDAP协议是跨平台的Interent协议
- 目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样
- 目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据,天生适合多读少写的场景。
LDAP基本概念
[外链图片转存失败(img-njBS53ml-1563724999423)(http://www.evanshare.com/upload/2019/7/条目-cc4047a9abd4436ab1ba0e01ba5decda.png)]
目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。
准备工作
- 环境:JDK1.8+
- 操作系统:Centos7(本教程操作系统)
- 内存:1G+
- 存储空间:10G+
- 下载地址:https://backstage.forgerock.com/downloads/browse/ds/latest(选Directory Services,需要翻墙才能下载)
- 了解:LDAP基本知识
- 版本:Forgerock Directory Service6.5
安装
解压
输入如下命令解压安装包
unzip DS-eval-6.5.2.zip

解压后如下所示:

执行安装脚本
本教程的安装目录为/usr/local/tools/opendj
,执行setup命令进行安装
./setup directory-server --rootUserDn "cn=Directory Manager" --rootUserPassword password --monitorUserPassword password --hostname localhost --ldapPort 1389 --httpPort 8080 --adminConnectorPort 4444 --baseDn dc=example,dc=com --sampleData 10000 --acceptLicense
查看安装状态
进入opendj/bin,执行status
命令
./status \
--bindDn "cn=Directory Manager" \
--bindPassword password \
--hostname localhost \
--port 4444 \
--usePkcs12TrustStore /usr/local/tools/opendj/config/keystore \
--trustStorePasswordFile /usr/local/tools/opendj/config/keystore.pin
验证
使用LDAP操作目录
搜索LDAP目录
这里使用项目自带的sample数据,假设您知道用户的全名,Abagail Abadines,并且Abagail的条目位于基本DN dc = example,dc = com之下。 您想查找Abagail的电子邮件和办公地点
./ldapsearch --hostname localhost --port 1389 --baseDn dc=example,dc=com "(cn=Abagail Abadines)" cn mail street l
修改LDAP目录条目
想进行修改操作,必须先在LDAP做身份验证。这里模拟Abagail用户想修改他的个人描述为Hellow World
./ldapmodify --hostname localhost --port 1389 --bindDn uid=user.6,ou=People,dc=example,dc=com --bindPassword password <<EOF
dn: uid=user.6,ou=People,dc=example,dc=com
changetype: modify
replace: description
description: Hello World
EOF
新增一个LDAP目录条目
已经授权的用户,可以进行修改、新增、删除操作。这里新增一个用户ID为newuser
的用户
./ldapmodify --hostname localhost --port 1389 --bindDn "cn=Directory Manager" --bindPassword password <<EOF
dn: uid=newuser,ou=People,dc=example,dc=com
uid: newuser
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
cn: Evan Liang
sn: User
ou: People
mail: evanliang@example.com
userPassword: changeme
EOF
删除一个LDAP目录条目
删除上面创建的用户ID为newuser
的用户,指定唯一索引dn: uid=user.6,ou=People,dc=example,dc=com
./ldapdelete --hostname localhost --port 1389 --bindDn "cn=Directory Manager" --bindPassword password uid=newuser,ou=People,dc=example,dc=com
[外链图片转存失败(img-DBkzMTRV-1563724999433)(http://www.evanshare.com/upload/2019/7/8-dd872a5bf8d341a4ba0ef42da6b69199.png)]
使用Rest API操作目录
创建资源
在设置时配置HTTP端口时,您启用了DS服务器以响应HTTP请求。 但是,您必须进一步更改服务器配置以启用对目录数据的HTTP访问。
由于默认的REST到LDAP映射文件是用于处理示例数据的示例,因此无法保证可以使用您的数据。 因此,默认情况下不启用访问目录数据的API。
这里启动API访问Sample数据
./dsconfig set-http-endpoint-prop --hostname localhost --port 4444 --bindDN "cn=Directory Manager" --bindPassword password --endpoint-name /api --set enabled:true --usePkcs12TrustStore /usr/local/tools/opendj/config/keystore --trustStorePasswordFile /usr/local/tools/opendj/config/keystore.pin --no-prompt
进行修改操作,需要进行授权,这里授权Abagail (user.6) 用户去修改目录数据
./ldapmodify --hostname localhost --port 1389 --bindDn "cn=Directory Manager" --bindPassword password <<EOF
dn: dc=example,dc=com
changetype: modify
add: aci
aci: (target="ldap:///dc=example,dc=com") (targetattr = "*")
(version 3.0;acl "Abagail can update entries"; allow(all)
userdn = "ldap:///uid=user.6,ou=People,dc=example,dc=com";)
EOF
使用API去创建一个用户
curl --request POST --user user.6:password --header "Content-Type: application/json" --data '{
"_id": "newuser",
"_schema":"frapi:opendj:rest2ldap:user:1.0",
"contactInformation": {
"telephoneNumber": "+1 408 555 1212",
"emailAddress": "newuser@example.com"
},
"name": {
"givenName": "New",
"familyName": "User"
},
"displayName": ["New User"],
"manager": {
"_id": "user.6",
"displayName": "Abagail Abadines"
}
}' http://localhost:8080/api/users?_prettyPrint=true
读取资源
通过API去读取刚才创建的用户ID为newuser
用户
curl --request GET --user user.6:password --header "Content-Type: application/json" http://localhost:8080/api/users/newuser?_prettyPrint=true
更新资源
更新用户ID为newuser
的用户信息
curl --request PUT --user user.6:password --header "Content-Type: application/json" --header "If-Match: *" --data '{
"_id": "newuser",
"_schema":"frapi:opendj:rest2ldap:user:1.0",
"contactInformation": {
"telephoneNumber": "+1 234 567 8910",
"emailAddress": "updated.user@example.com"
},
"name": {
"givenName": "Updated",
"familyName": "User"
},
"displayName": ["Updated User"],
"manager": {
"_id" : "user.6",
"displayName" : "Abagail Abadines"
}
}' http://localhost:8080/api/users/newuser?_prettyPrint=true
删除资源
通过指定用户IDnewuser
删除用户数据
curl --request DELETE --user user.6:password --header "Content-Type: application/json" http://localhost:8080/api/users/newuser?_prettyPrint=true
参考
官方文档:
- https://backstage.forgerock.com/docs/ds/6.5/reference/index.html
- https://backstage.forgerock.com/docs/ds/6.5/dev-guide/
- https://backstage.forgerock.com/docs/ds/6.5/install-guide
- https://backstage.forgerock.com/docs/opendj/3.5/server-dev-guide/
- https://backstage.forgerock.com/docs/ds/6.5/getting-started
- https://www.cnblogs.com/wilburxu/p/9174353.html
- https://www.cnblogs.com/yjd_hycf_space/p/7994597.html
OpenDJ入门 | 5分钟快速入门Forgerock DS的更多相关文章
- 一分钟快速入门openstack
一.它是什么,能干什么想认识一个事物,必须先弄明白它是什么,能干什么.首先说一下,openstack是一个搭建云平台的一个解决方案,说他不是个软件,但是我觉得说是一个软件,能够让大家认识更清晰些.op ...
- Vue.js——60分钟快速入门(转)
vue:Vue.js——60分钟快速入门 <!doctype html> <html lang="en"> <head> <meta ch ...
- Vue.js 60 分钟快速入门
Vue.js 60 分钟快速入门 转载 作者:keepfool 链接:http://www.cnblogs.com/keepfool/p/5619070.html Vue.js介绍 Vue.js是当下 ...
- 不会几个框架,都不好意思说搞过前端: Vue.js - 60分钟快速入门
Vue.js——60分钟快速入门 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理 ...
- AngularJS 30分钟快速入门【译】
引用自:http://www.revillweb.com/tutorials/angularjs-in-30-minutes-angularjs-tutorial/,翻译如下: 简介 我三年前开始使用 ...
- 5分钟快速入门 - Less
下面给大家讲解下Less,纯手工,入门级别,相信没学过的人阅读完后就懂了,以下是我要讲的四点: 简单介绍 Less CSS 是一个使用广泛的 CSS 预处理器. 对 CSS 进行扩展,减少很多 CSS ...
- ichartjs一分钟快速入门教程
1.构建项目环境 由于ichartjs是一个js库,所以只要将ichart.js加入你页面的head中就完成了ichartjs的运行环境.代码如下: <script type="tex ...
- Redis 十分钟快速入门
本教程是一个快速入门教程,所以Redis的命令只是简单介绍了几个常用的,如果有其他需求请求官网查看API 使用. 1. Redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的ke ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
随机推荐
- hdu3499---玄学的分层图
枚举固然可以,但是我还是想看看分层图.... 如本题所述 ,从上图到下图就是一个折扣的过程,上部分只有一种办法下去,下部分图没有办法去上面,该模型十分的巧妙啊!!! 下面我来演示一下自己改的样例吧 紫 ...
- $HDU1848\ Fibonacci\ again\ and\ again$ 博弈论
正解:博弈论 解题报告: 传送门! 首先按照套路显然是考虑先预处理出所有数的$SG$函数值然后全局的$SG$就是$SG(n)$^$SG(m)$^$SG(p)$,这儿应该麻油问题$QwQ$? 然后就考虑 ...
- $Noip2015/Luogu2661$ 信息传递 并查集
Luogu $Description$ 给定一个有向图,每个点只有一条出边.求图里的最小环. $Sol$ 使得这个题不难的地方就在于每个点只有一条出边叭. 一边连边一边更新答案.首先当然是初始$f[i ...
- 写代码 Log 也要认真点么?
Log自然是需要的, 尤其是正式的产品; 但如果只是自己或内部用用的小工具, 也需要认真点吗? 实话说, 自己对 log 总是不上心, 总觉得调试好了, 能跑了, 足以. 所以, 被大妈怼了好几次 l ...
- Hive/Impala批量插入数据
问题描述 现有几千条数据,需要插入到对应的Hive/Impala表中.安排给了一个同事做,但是等了好久,反馈还没有插入完成--看到他的做法是:对每条数据进行处理转换为对应的insert语句,但是,实际 ...
- 计算机组成原理(下)第8章 CPU的结构和功能测试
1.单选(1分) 以下关于指令周期的描述正确的是___ A.CPU保存一条指令的时间 B.CPU执行一条指令的时间 C.CPU取出并执行一条指令所需的全部时间 D.CPU从主存取出一条指令的时间 正确 ...
- shell脚本一键配置本地yum源
效果如图: #!/bin/bash #Author:GaoHongYu #QQ: #Time:-- :: #Name:yumgz.sh #Version:V1. CKGZ=$( df -Th | gr ...
- 在A卡下的 Matlab 运行C/C++混编的GPU程序
首先将你的.MEX文件和matlab脚本放在一个文件夹下开始运行 如果出错查看是那个.MEX文件出错 用depends这个软件查看他的依赖dll文件下载对应文件 放到当前文件夹下,运行成功.
- python 矩阵向右旋转90°(分行输入输出)
输入格式 第一行输入两个整数n,m,用空格隔开. 接下来n行,每行输入m个整数,表示输入矩阵.矩阵元素都是int范围内的整数. 输出格式 输出m行,每行n个空格隔开的整数,表示旋转以后的矩阵.注意:每 ...
- AESEncryption Aes 加密
/******************************************************* * * 作者:朱皖苏 * 创建日期:20180521 * 说明:此文件只包含一个类,具 ...