LDAP业务场景集成

最后更新:2022-07-12

1. 什么是LDAP?

是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。 LDAP的一个常用用途是单点登录,用户可以在多个服务中使用同一个密码,通常用于公司内部网站的登录中(这样他们可以在公司计算机上登录一次,便可以自动在公司内部网上登录)。
IDaaS提供ldap标准协议中的搜索、认证、新增、修改、删除、比较能力,以下统称为LdapServer

以上能力只针对于IDaaS中的组织机构ou、账户ud、组group

2. 提供能力

能力

概述

是否支持

说明

bind

认证

支持

提供U+P,U+OTP,U+P+OTP认证能力,支持simple认证方式

unbind

取消认证/断开连接

支持


search

搜索

支持

支持多种模式(base,one,sub),多种filter

modify

修改实体

支持

add

新增实体

支持

delete

删除实体

支持

compare

比较指定数据是否有指定值

支持

3. 字段说明

3.1. 组织机构

类型: organizationalUnit
RDN: OU

字段

示例

说明

objectClass

top

固定

objectClass

organizationalUnit

固定

organizationName

test1

ou名称

ou

test1

ou名称

type

EXTERNAL_OU

类型:
EXTERNAL_OU:外部同步组织单位
SELF_OU:自建组织单位
DEPARTMENT:自建部门

enabled

1

是否启用 0禁用1启用

externalId

801601

外部ID

sortNumber

0

排序号

createTimestamp

2022/2/8 9:44:58

创建时间

structuralObjectClass

organizationalUnit

固定

modifyTimestamp

2022/3/9 3:44:47

更新时间

entryDN

ou=test1,ou=人事组织,dc=idsmanager,dc=com

dn路径

其他扩展字段按照扩展字段名返回

3.2. 账户

类型:inetOrgPerson
RDN: uid

字段

示例

说明

ou

801601

所属组织机构

uid

test

username

displayName

test

显示名称

sn

test

显示名称

cn

test

显示名称

objectClass

top

固定

objectClass

person

固定

objectClass

organizationalPerson

固定

objectClass

inetOrgPerson

固定

email

test@as.cd

邮箱

mobile

18000000000

手机号

externalId

123456

外部ID

locked

0

是否被锁定 0正常1锁定

enabled

1

是否启用 0禁用1启用

expireTime

2022/2/8 9:44:58

过期时间

modifyTimestamp

2022/2/8 9:44:58

修改时间

entryDN

uid=test,ou=test1,ou=人事组织,dc=idsmanager,dc=com

dn路径

hasSubordinates

FALSE

是否有下级节点,固定FALSE

createTimestamp

2022/2/8 9:44:58

创建时间

structuralObjectClass

inetOrgPerson

固定

其他扩展字段按照扩展字段名返回

3.3. 组

类型: groupOfUniqueNames
RDN: cn

字段

示例

说明

o

123456

外部ID

ou

801601

所属OU

cn

test

显示名称

objectClass

top

固定

objectClass

groupOfUniqueNames

固定

type

SELF_GROUP

类型:
SELF_GROUP: 自建组
DEFAULT_GROUP:默认组
EXTERNAL_GROUP:外部同步账户组

enabled

1

是否启用 0禁用1启用

externalId

123456

外部ID

uniqueMember

uid=test,ou=test1,ou=人事组织,dc=idsmanager,dc=com

组成员,DN形式

memberUid

test

组成员,username形式

modifyTimestamp

2022/2/8 9:44:58

修改时间

entryDN

cn=1,ou=test1,ou=人事组织,dc=idsmanager,dc=com

DN路径

hasSubordinates

FALSE

是否有下级节点,固定FALSE

createTimestamp

2022/2/8 9:44:58

创建时间

structuralObjectClass

groupOfUniqueNames

固定

其他扩展字段按照扩展字段名返回

4. 能力介绍

4.1. bind (认证)

为了安全考虑,不允许匿名访问,支持Simple Authentication(U+P,U+OTP,U+P+OTP)
需要提前在ldap界面授权,才能认证通过

协议

Simple Authenticetion

bind dn

uid={username},dc=idsmanager,dc=com

dc=idsmanager,dc=com
配置文件定义

password

根据配置来定, 可以是idp4中用户密码,或者OTP,或者密码+OTP

配置文件定义

示例

ldapwhoami -h 127.0.0.1 -p 10389 -D "uid=xxx,dc=idsmanager,dc=com" -w "123456" 

密码正确,则返回

dn:uid=admin,dc=idsmanager,dc=com

错误则返回

ldap_bind: Invalid credentials (49)
	additional info: INVALID_CREDENTIALS: Bind failed: Invalid authentication

4.3. add(新增)

支持ldap标准add语法,允许通过ldap添加用户、组织机构、组。

需要有父级组织机构的权限才能执行该操作

支持的类型如下:
组织机构
支持对象类型(objectClass):organization、organizationalUnit
支持的字段列表如下:
rdn: 组织机构名称

字段

是否必须

示例

说明

externalId

801601

外部ID

ou

testou

名称

organizationName


名称

type

SELF_OU

类型:
EXTERNAL_OU:外部同步组织单位
SELF_OU:自建组织单位
DEPARTMENT:自建部门

sortNumber

0

排序号

description

desc

备注

enable

0

是否启用 0禁用1启用

以上为支持的所有基础字段,其他字段将当作数据字典处理

用户:
支持对象类型(objectClass):inetOrgPerson、organizationalPerson、person、posixAccount
支持的字段列表如下:
rdn : username

字段

是否必须

示例

说明

externalId

801601

对象类型

displayName

testud

显示名称

sn

显示名称,同displayName,传一个即可

cn

显示名称,同displayName,传一个即可

password

123456

不传,将生成随机密码,仅支持明文密码(Plain text)

userPassword

不传,将生成随机密码,仅支持明文密码(Plain text)

email

test@test.com

邮箱

mail

邮箱,同mail,传一个即可

mobile

18000000000

手机号

telephoneNumber

手机号,同mobile,传一个即可

homePhone

手机号,同mobile,传一个即可

description

desc

备注

enable

0

是否启用 0禁用1启用

以上为支持的所有基础字段,其他字段将当作数据字典处理

组:
支持对象类型(objectClass):groupOfUniqueNames、posixGroup
支持的字段列表如下:
rdn : 组名称

字段

是否必须

示例

说明

externalId

801601

对象类型

cn

testgroup

名称

memberUid

testud

成员列表,可多个,账户username

uniqueMember

uid=
testud,dc=idsmanager,dc=com

成员列表,可多个,账户的DN或者username

description

desc

备注

以上为支持的所有基础字段,其他字段将当作数据字典处理

示例
新建user_add.ldif文件,文件内容如下:

dn: cn=testud,ou=人事组织,dc=idsmanager,dc=com
objectClass: person
cn: 显示名称

执行以下命令,将在人事组织节点下面创建一个用户:

ldapadd -h 127.0.0.1 -p 10389 -D "uid=admin,dc=idsmanager,dc=com" -w "123456" -f ./user_add.ldif

成功,则返回

adding new entry "cn=testud,ou=人事组织,dc=idsmanager,dc=com"

错误,则返回

adding new entry "cn=testud,ou=人事组织,dc=idsmanager,dc=com"
ldap_add: Server is unwilling to perform (53)
	additional info: UNWILLING_TO_PERFORM: failed for MessageType : ADD_REQUEST
Message ID : 2
    Add Request :
Entry
    dn: cn=testud,ou=人事组织,dc=idsmanager,dc=com
    objectClass: person
    cn: 显示名称
: 账户名称已经存在

4.4. modify(修改)

支持ldap标准add语法,允许通过ldap修改用户、组织机构、组。

需要有对应实体的权限才能执行该操作

支持的类型如下:

不支持修改RDN

组织机构
支持的字段列表如下:

字段

是否必须

示例

说明

ou

testou

名称

organizationName


名称

sortNumber

0

排序号

description

desc

备注

enable

0

是否启用 0禁用1启用

以上为支持的所有基础字段,其他字段将当作数据字典处理

用户:
支持的字段列表如下:

字段

是否必须

示例

说明

displayName

testud

显示名称

sn

显示名称,同displayName,传一个即可

cn

显示名称,同displayName,传一个即可

password

123456

仅支持明文密码(Plain text)

userPassword

仅支持明文密码(Plain text)

email

test@test.com

邮箱

mail

邮箱,同mail,传一个即可

mobile

18000000000

手机号

telephoneNumber

手机号,同mobile,传一个即可

homePhone

手机号,同mobile,传一个即可

description

desc

备注

enable

0

是否启用 0禁用1启用

以上为支持的所有基础字段,其他字段将当作数据字典处理

组:
支持对象类型(objectClass):groupOfUniqueNames、posixGroup
支持的字段列表如下:
rdn : 组名称

字段

是否必须

示例

说明

cn

testgroup

名称

memberUid

testud

成员列表,可多个,账户username

uniqueMember

uid=
testud,dc=idsmanager,dc=com

成员列表,可多个,账户的DN或者username

description

desc

备注

以上为支持的所有基础字段,其他字段将当作数据字典处理

示例
新建user_modify.ldif文件,文件内容如下:

dn: uid=testud,ou=人事组织,dc=idsmanager,dc=com
changetype: modify
replace: mail
mail: test@test.com
-
replace: cn
cn: newname

执行以下命令,将修改testud的邮箱为test@test.com,显示名称为newname

ldapmodify -h 127.0.0.1 -p 10389 -D "uid=admin,dc=idsmanager,dc=com" -w "123456" -f ./user_modify.ldif

成功,则返回

modifying entry "uid=testud,ou=人事组织,dc=idsmanager,dc=com"

错误,则返回

modifying entry "uid=testud,ou=人事组织,dc=idsmanager,dc=com"
ldap_modify: Server is unwilling to perform (53)
	additional info: UNWILLING_TO_PERFORM: failed for MessageType : MODIFY_REQUEST
Message ID : 2
    Modify Request
        Object : 'uid=testud,ou=人事组织,dc=idsmanager,dc=com'
        Modifications : 
            Modification[0]
                Operation :  replace
                Modification : mail: test
            Modification[1]
                Operation :  replace
                Modification : cn: newname
: 邮箱格式不正确

4.5. delete(删除)

支持ldap标准delete语法,允许通过ldap删除用户、组织机构、组。

需要有对应实体的权限才能执行该操作

该操作为逻辑删除,对应IDaaS中的离职操作。

示例:
执行以下命令,将删除testud账户

ldapdelete -h 127.0.0.1 -p 10389 -D "uid=admin,dc=idsmanager,dc=com" -w "123456" "uid=testud,ou=人事组织,dc=idsmanager,dc=com"

错误,则返回

ldap_delete: Server is unwilling to perform (53)
	additional info: UNWILLING_TO_PERFORM: failed for MessageType : DEL_REQUEST
Message ID : 2
    Del request
        Entry : 'uid=testud,ou=人事组织,dc=idsmanager,dc=com'
org.apache.directory.api.ldap.model.message.DeleteRequestImpl@60c04066: 该username:testud 不存在

4.6. compare(比较)

支持ldap标准compare语法,允许通过ldap判断指定的某个属性值是否在某个实体中存在,存在则返回true,否则返回false
示例:
判断testud该账户邮箱是否等于test@test.com

ldapcompare -h 127.0.0.1 -p 10389 -D "uid=admin,dc=idsmanager,dc=com" -w "123456" "uid=testud,ou=人事组织,dc=idsmanager,dc=com" "email:test@test.com"

存在,则返回

Compare Result: Compare True (6)
Matched DN: uid=testud,ou=人事组织,dc=idsmanager,dc=com
TRUE

不存在,则返回

Compare Result: Compare False (5)
Matched DN: uid=testud,ou=人事组织,dc=idsmanager,dc=com
FALSE

5. 部署手册

5.1. 环境说明

jdk1.8及以上

注意,里面采用了AES256算法,需要替换jre的jce_policy,不然无法使用,认证不成功 jce_policy下载地址: 点击下载

使用IT管理员登录IDaaS控制台,在Ldap菜单目录,点击登录的下载链接下载LdapServer安装包
image.png

5.2. 安装包目录说明

 idaas-ldapserver-1.0.0
    │  LICENSE
    │  NOTICE
    │
    ├─bin
    │      ldap.bat			windows启动脚本
    │      ldap.sh			linux启动脚本
    │      cpappend.bat
    │
    ├─instances		
    │  └─default
    │      ├─cache
    │      ├─conf				配置文件目录
    │      │      config.ldif
    │      │      log4j.properties		日志配置
    │      │
    │      ├─log					日志目录
    │      ├─partitions			数据目录
    │      └─run
    └─lib
            ldap-service-4.17.13.jar		部署包  

5.3. 配置ldap

在IDaaS平台,添加相应的ldap服务(认证源-LDAP-中点击“新建LDAP”)
image.png

  • 连接超时时间: LdapServer连接IDaaS服务超时时间(暂未实现)

  • 认证方式: ldap认证时候采取的认证方式

  • 支持账户硬件otp: 是否支持硬件OTP

  • Idaas平台服务器地址: 注意填写ldapserver部署的服务器能访问的IDaaS地址

  • basedn: ldap协议中的base dn

  • 返回用户所属组:勾选后将返回用户加入的组信息,如下图勾选后,返回的组信息
    image.png

点击下载配置文件,将下载的配置文件放在配置文件目录(instances/default/conf)

image.png

5.4. 授权访问

配置完LdapServer后,需要授权给组织机构,有权限的组织机构下的账户才能访问
点击配置列表中的授权:
image.png
在弹出的页面中右侧选择需要授权的组织机构,选择根(人事组织)将授权所有用户访问
image.png

5.5. 运行

win

./ldap.bat  
或者  
./ldap.bat  default  start  
停止  
ctrl+c 

linux

启动  
./ldap.sh start  
查看状态  
./ldap.sh status  
停止  
./ldap.sh stop  

5.6. 使用

端口:
默认端口:10389
SSL端口:10636

5.7. 测试

使用任意ldap客户端工具验证即可,这里以LdapBrowser为例:
打开LDAP Browser,新建Profile,输入一个profilename,点击下一步

其中host,填入ldapserver服务器地址, port默认10389, ssl port为10636
base dn填入配置文件指定的dn,默认dc=idsmanager,dc=com


选择other credentials中的simple认证方式
principal 格式: uid=xxxx,ou=Peoples,dc=idsmanager,dc=com
password: idp4中对应密码
点击完成保存配置.

6. FAQ

6.1. 如何修改端口?

打开配置目录,打开文件(\instances\default\conf\config.ldif)

运行后该文件会自动消息,如未找到该文件,请重新解压部署包,重新部署程序

找到如下配置替换,重启生效

普通端口:
ads-systemPort: 10389
SSL端口:
ads-systemPort: 10636