zoukankan      html  css  js  c++  java
  • OpenDJ入门 | 5分钟快速入门Forgerock DS

    微信截图_20190720181126

    本教程为了让大家快速体验,故不做深入讲解,详细内容请留意后续进阶教程

    介绍

    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)

    • 对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来

    • 属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。
      属性
      树状结构

    准备工作


    安装

    解压

    输入如下命令解压安装包

    unzip DS-eval-6.5.2.zip
    

    1
    解压后如下所示:
    2

    执行安装脚本

    本教程的安装目录为/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
    

    3

    查看安装状态

    进入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
    

    4


    验证

    使用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
    

    5

    修改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
    

    6

    新增一个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
    
    

    7

    删除一个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
    

    9

    进行修改操作,需要进行授权,这里授权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
    

    10

    使用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
    

    11

    读取资源

    通过API去读取刚才创建的用户ID为newuser用户

     curl  --request GET  --user user.6:password  --header "Content-Type: application/json" http://localhost:8080/api/users/newuser?_prettyPrint=true
    

    12

    更新资源

    更新用户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
    
    

    13

    删除资源

    通过指定用户IDnewuser删除用户数据

     curl  --request DELETE  --user user.6:password  --header "Content-Type: application/json"  http://localhost:8080/api/users/newuser?_prettyPrint=true
    
    

    14

    参考

    官方文档:

  • 相关阅读:
    ssh
    步进器&分栏控制器
    一些过期的整理前端代码
    进度条和滑动条
    UISwitcher
    定时器
    创建window
    iOS开发---UIButton 1 //创建一个可以显示图片的按钮。
    iOS开发---UILabel
    今日头条前端编程题
  • 原文地址:https://www.cnblogs.com/evan-liang/p/12233911.html
Copyright © 2011-2022 走看看