IDaaS通过标准SCIM接口推送数据¶
最后更新时间:2024年09月27日
1. 场景描述¶
从IDaaS查询相关数据,拉取到数据同步模块。
数据同步模块对原始数据进行映射转换,生成SCIM标准接口需要的目标数据。
数据同步模块调用第三方业务系统提供的SCIM标准接口推送数据。
2. 支持的对象¶
3. 数据同步配置¶
在管理员界面,点击同步任务 -》 添加同步任务 -》下游同步 -》IDAAS标准SCIM。
3.1. 基本信息配置¶
3.1.1. 同步任务名称:¶
3.1.2. 下游配置:¶
新建配置,或者选择已有配置。
新建配置:
下游配置名称:不允许重复。长度不超过32字符。
组织机构同步地址:业务系统提供的SCIM组织机构同步地址,如:http://127.0.0.1/scim/organization,实现方式请参考第六点:api说明
账户同步地址:业务系统提供的SCIM账户同步地址,如:http://127.0.0.1/scim/account,实现方式请参考第六点:api说明
组同步地址:业务系统提供的SCIM组同步地址,如:http://127.0.0.1/scim/group,实现方式请参考第六点:api说明
协议类型:
BASIC:Http basic协议标准,需要业务根据basic协议,提供认证服务。
账户名:BASIC协议提供的管理员账户名
密码:BASIC协议提供的管理员密码
OAUTH2:标准oauth2协议,需要业务系统根据标准oauth2协议,提供认证服务。
oauthUrl:oauth2协议token请求地址
client_id:获取oauth2协议token所需的clientId
client_secret:获取oauth2协议token所需的clientSecret
3.1.3. 授权信息:¶
关联应用是为了根据应用进行接口范围和数据范围的管理,保证IDaaS数据的安全性。
应用API状态:开启:允许调用IDaaS接口。关闭:不允许调用IDaaS接口。
接口范围:设置同步任务允许调用哪些接口。请根据需要,选择开放调用的接口。
数据范围:设置在拉取IDaaS数据时,可以从哪些组织层级查询到数据。
3.1.4. 规则配置:¶
IDaaS根节点标识:
选择需要同步到IDaaS的组织机构根节点,选择后,后续所有数据以该节点为根节点进行同步。如果不选择, 默认同步到IDaaS人事组织根节点。
下游系统根节点标识:
需要将IDaaS数据放置在下游系统哪个机构下,一般为机构外部ID。
同步类型:
选择需要同步的对象类型,如:组织机构,账户,组,权限。
默认密码:
同步账户时,若账户映射的密码字段值为空,则使用该默认密码进行填值。该项非必填。
增改模式:
标准SCIM同步,请不要开启增改模式,会导致同步失败。新增数据时,如需判断是否已存在,请业务系统自行实现该逻辑。
检测字段:
4. 字段映射¶
字段映射主要作用为把来源的原始数据,根据所配置的字段映射规则,转换成目标所需要的数据。该同步场景下,已经预设了一些常用字段映射规则,如需更改,请自行修改即可。
字段映射方式分为:字段映射和脚本映射。
字段映射:一对一的直接映射,直接把来源字段映射为目标所需要字段。
脚本映射:根据groovy脚本所配置的内容,对来源数据进行处理之后,再映射到目标字段。groovy脚本配置方式请参考文章:
connector groovy脚本使用文档
5. 同步策略¶
5.1. 同步方式¶
5.1.1. 手动:¶
手动同步指管理员手动触发同步任务。可在同步任务页面点击立即同步按钮,进行立即同步。该同步方式下,同步任务会根据配置好的信息,从IDaaS默认根节点下,拉取所需要同步的对象(组织机构,账户,组),同步到下游系统中。
5.1.2. 定时:¶
定时同步指根据同步任务配置的定时任务执行计划,进行数据的同步。也可以进行手动触发。
定时任务又分为周期执行和定时执行两种。
周期执行:勾选“周期执行”并勾选“周二”并选择“间隔02:00”,表示在每个周二每隔2小时执行一次同步任务。
定时执行:勾选“定期执行”并勾选“周二”并选择“02:00:00”,表示在每个周二的2点执行一次同步任务。
5.1.3. 实时:¶
实时同步表示当IDaaS数据发生变化时,IDaaS系统自动触发同步任务实时变更数据。
5.2. 失败自动重试¶
该功能主要应对在数据同步过成中,如出现网络短暂波动而造成的数据同步失败的情况。选择失败重试之后,失败的数据将会立即进行重推。重推数据时,不再从来源拉取数据,使用之前已经拉取到的来源数据进行重推。失败重试可以选择重试1,2,3次。
注意:该功能无法解决由于来源数据错误而导致的数据推送失败的情况。
6. 六、API说明¶
6.1. 组织机构¶
url地址如: developer/scim/organization
6.1.1. 添加组织机构¶
method: POST
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
organization |
{organization} |
组织机构的名称 |
parentUuid |
{parentUuid} |
所属父级组织机构的uuid或外部ID |
rootNode |
{rootNode} |
是否是根节点 |
organizationUuid |
{organizationUuid} |
本组织机构的uuid或外部ID |
manager |
{manager} |
组织机构的管理者,value是管理者账户的外部ID,displayName是用户名,管理者可为空 |
type |
{type} |
SELF_OU(自建组织机构)或DEPARTMENT(“自建部门”) |
levelNumber |
{levelNumber} |
部门排序号 |
extendFields |
{extendFields} |
扩展字典,attributes为系统定义扩展字段 |
Request Body示例:
{
"organization": "test1",
"parentUuid": "main",
"organizationUuid": "0801601",
"manager": [],
"extendFields": {
"testAttr": "123"
},
"levelNumber": "1",
"type": "EXTERNAL_OU",
"enabled": true,
"rootNode": false
}
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.1.2. 修改组织机构¶
method: PUT
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
organization |
{organization} |
组织机构的名称 |
parentUuid |
{parentUuid} |
所属父级组织机构的uuid或外部ID |
rootNode |
{rootNode} |
是否是根节点 |
organizationUuid |
{organizationUuid} |
本组织机构的uuid或外部ID |
manager |
{manager} |
组织机构的管理者,value是管理者账户的外部ID,displayName是用户名,管理者可为空 |
type |
{type} |
SELF_OU(自建组织机构)或DEPARTMENT(“自建部门”) |
levelNumber |
{levelNumber} |
部门排序号 |
extendFields |
{extendFields} |
扩展字典,attributes为系统定义扩展字段 |
Request Body示例:
{
"organization": "test1",
"parentUuid": "main",
"organizationUuid": "0801601",
"manager": [],
"extendFields": {
"testAttr": "123"
},
"levelNumber": "1",
"type": "EXTERNAL_OU",
"enabled": true,
"rootNode": false
}
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.1.3. 删除组织机构¶
method: DELETE
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
id |
{id} |
本组织机构的外部ID,对应应用系统的唯一标识 |
Request Body示例:
/developer/scim/organization?id=4544581305390943066
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.2. 账户¶
url地址如: developer/scim/account
6.2.1. 添加账户¶
method: POST
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
userName |
{userName} |
账户名称,唯一 |
id |
{id} |
用户ID,与外部ID值一样 |
displayName |
{displayName} |
用户的显示名称,唯一 |
emails |
{emails} |
邮箱 |
phoneNumbers |
{phoneNumbers} |
手机号, 只能一个且唯一 |
externalId |
{externalId} |
外部ID,唯一,不为空 |
belongs |
{belongs} |
为账户指定组织单位 |
organzationsOrderList |
{organzationsOrderList} |
账户在所属机构下的排序号 |
locked |
boolean |
是否锁定账户,ture锁定账户,false启用账户。锁定账户后将不能登录应用系统 |
enabled |
boolean |
是否禁用账户,ture禁用账户,false启用账户。禁用账户后将不能登录应用系统 |
extendField |
{extendField} |
扩展字段,attributes为系统定义扩展字段 |
Request Body示例:
{
"emails": [
{
"value": "test@test.com",
"primary": true
}
],
"belongs": [
{
"belongOuUuid": "testUuid"
}
],
"displayName": "test1",
"extendFields": {
"testAttr": "1"
},
"externalId": "536607420296949165",
"id": "536607420296949165",
"locked": true,
"userName": "test1",
"enabled": true,
"phoneNumbers": [
{
"value": "180xxxxxxxx"
}
]
}
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.2.2. 修改账户¶
method: PUT
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
userName |
{userName} |
账户名称,唯一 |
id |
{id} |
用户ID,与外部ID值一样 |
displayName |
{displayName} |
用户的显示名称,唯一 |
emails |
{emails} |
邮箱 |
phoneNumbers |
{phoneNumbers} |
手机号, 只能一个且唯一 |
externalId |
{externalId} |
外部ID,唯一,不为空 |
belongs |
{belongs} |
为账户指定组织单位 |
organzationsOrderList |
{organzationsOrderList} |
账户在所属机构下的排序号 |
locked |
boolean |
是否锁定账户,ture锁定账户,false启用账户。锁定账户后将不能登录应用系统 |
enabled |
boolean |
是否禁用账户,ture禁用账户,false启用账户。禁用账户后将不能登录应用系统 |
extendField |
{extendField} |
扩展字段,attributes为系统定义扩展字段 |
Request Body示例:
{
"emails": [
{
"value": "test@test.com",
"primary": true
}
],
"belongs": [
{
"belongOuUuid": "testUuid"
}
],
"displayName": "test1",
"extendFields": {
"testAttr": "1"
},
"externalId": "536607420296949165",
"id": "536607420296949165",
"locked": true,
"userName": "test1",
"enabled": true,
"phoneNumbers": [
{
"value": "180xxxxxxxx"
}
]
}
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.2.3. 删除账户¶
method: DELETE
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
id |
{id} |
本账户的外部ID,对应应用系统的唯一标识 |
Request Body示例:
/developer/scim/account?id=4544581305390943066
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.3. 组¶
6.3.1. 添加组¶
method: POST
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
id |
{id} |
组的id |
displayName |
{displayName} |
组的名称 |
ouUuid |
{ouUuid} |
所属父级组织机构的uuid或外部ID |
display |
{displayName} |
用户的显示名称,唯一 |
members |
{members} |
组里的成员,value是成员的外部ID,唯一,display是用户名,成员可为空 |
belongs |
{belongs} |
为账户组指定组织单位 |
extendField |
{extendField} |
扩展字段,attributes为系统定义扩展字段 |
Request Body示例:
{
"id":"",
"displayName":"我的新建组",
"ouUuid":"856585455256525655",
"belongs":[
{
"ouDirectory":"九州/北京",
"belongOuUuid":"db7ded581e854a8d9782795963122eb1jBu4QSp6hXn",
"rootNode":false
}
],
"members":[
{
"value":"163ac7bbd3bc4714affa5c518d53a348Q3BtQC0FAFn",
"display":"abc@idsmanager.com"
}
] ,
"extendField": {
"description": "",
"expireTime": "2117-01-01",
"attributes":{
"ReportManagerID":"123456",
"mana":"woman"
}
}
}
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.3.2. 修改组¶
method: PUT
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
id |
{id} |
组的id |
displayName |
{displayName} |
组的名称 |
ouUuid |
{ouUuid} |
所属父级组织机构的uuid或外部ID |
display |
{displayName} |
用户的显示名称,唯一 |
members |
{members} |
组里的成员,value是成员的外部ID,唯一,display是用户名,成员可为空 |
belongs |
{belongs} |
为账户组指定组织单位 |
extendField |
{extendField} |
扩展字段,attributes为系统定义扩展字段 |
Request Body示例:
{
"id":"",
"displayName":"我的新建组",
"ouUuid":"856585455256525655",
"belongs":[
{
"ouDirectory":"九州/北京",
"belongOuUuid":"db7ded581e854a8d9782795963122eb1jBu4QSp6hXn",
"rootNode":false
}
],
"members":[
{
"value":"163ac7bbd3bc4714affa5c518d53a348Q3BtQC0FAFn",
"display":"abc@idsmanager.com"
}
] ,
"extendField": {
"description": "",
"expireTime": "2117-01-01",
"attributes":{
"ReportManagerID":"123456",
"mana":"woman"
}
}
}
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.3.3. 删除组¶
method: DELETE
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
id |
{id} |
本组的外部ID,对应应用系统的唯一标识 |
Request Body示例:
/developer/scim/group?id=4544581305390943066
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |
6.4. 权限¶
url地址如: developer/scim/ps
6.4.1. 修改权限¶
method: PUT
content-Type: application/json
参数名 |
参数值 |
备注 |
---|---|---|
psId |
{psId} |
权限唯一id |
list |
{list} |
权限变更列表 |
:operation |
{operation} |
操作类型 add(“新增”)、delete(“删除”) |
:privilegeExternalId |
{privilegeExternalId} |
资源外部ID(唯一) |
:privilegeType |
{privilegeType} |
资源类型(资源类型:PS_PERMISSION(“权限”),APPLICATION_INFORMATION(“应用”),PS_ROLE(“角色”)) |
:entityExternalId |
{entityExternalId} |
实体外部ID(唯一) |
:entityType |
{entityType} |
实体类型:UD_ACCOUNT(“账户”),ATTRIBUTE_CLASS(“分类”),ORGANIZATION_UNIT(“组织机构”),UD_GROUP(“组”),PS_ROLE(“角色”) |
:privilegeName |
{privilegeName} |
资源名称 |
:entityName |
{entityName} |
实体名称 |
:psDataModuleUuid |
{psDataModuleUuid} |
数据权限模型(uuid) |
:psDataModuleValue |
{psDataModuleValue} |
数据权限模型(值) |
:psDataModuleName |
{psDataModuleName} |
数据权限模型(名称) |
:pSDataOperationValue |
{pSDataOperationValue} |
数据权限模型-操作 |
Request Body示例:
{
"psId":"jPSzY6BVGl",
"list":[
{
"entityExternalId":"3559591872267545982",
"entityType":"UD_ACCOUNT",
"entityName":"test233",
"privilegeExternalId":"fa71245467dd8fd3fcae3a92ee40f7d8AWENz6HNYum",
"privilegeType":"PS_PERMISSION",
"privilegeName":"创建订单",
"operation":"add",
"psDataModuleUuid":"bc14e53c6d5b4375077b16d326c9fd8bCSbyGlggCJo",
"psDataModuleValue":"product_moud",
"psDataModuleName":"pSDataOperationValue",
"pSDataOperationValue":"product_add"
}
]
}
下游业务系统需要返回 Response Body示例:
{ "code": 200, "message": "" }
参数说明:
字段名 |
错误码 |
备注 |
---|---|---|
code,int类型 |
200 |
SP返回错误码200,即视为成功 |
message,错误信息,String类型 |
400 |
参数异常 |