IDaaS通过标准SCIM接口推送数据

最后更新时间:2023年05月10日

1. 场景描述

  1. 从IDaaS查询相关数据,拉取到数据同步模块。

  2. 数据同步模块对原始数据进行映射转换,生成SCIM标准接口需要的目标数据。

  3. 数据同步模块调用第三方业务系统提供的SCIM标准接口推送数据。

2. 支持的对象

支持同步组织机构,账户,组。

3. 数据同步配置

在管理员界面,点击同步任务 -》 添加同步任务 -》下游同步 -》IDAAS标准SCIM。
image.png
image.png

3.1. 基本信息配置

3.1.1. 同步任务名称:

同步任务名称不允许重复。长度不超过32字符。
image.png

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

image.png

3.1.3. 授权信息:

关联应用是为了根据应用进行接口范围和数据范围的管理,保证IDaaS数据的安全性。
image.png
应用API状态:开启:允许调用IDaaS接口。关闭:不允许调用IDaaS接口。
接口范围:设置同步任务允许调用哪些接口。请根据需要,选择开放调用的接口。
数据范围:设置在拉取IDaaS数据时,可以从哪些组织层级查询到数据。

3.1.4. 规则配置:

  • IDaaS根节点标识:

选择需要同步到IDaaS的组织机构根节点,选择后,后续所有数据以该节点为根节点进行同步。如果不选择, 默认同步到IDaaS人事组织根节点。

  • 下游系统根节点标识:

需要将IDaaS数据放置在下游系统哪个机构下,一般为机构外部ID。

  • 同步类型:

选择需要同步的对象类型,如:组织机构,账户,组。

  • 默认密码:

同步账户时,若账户映射的密码字段值为空,则使用该默认密码进行填值。该项非必填。

  • 增改模式:

标准SCIM同步,请不要开启增改模式,会导致同步失败。新增数据时,如需判断是否已存在,请业务系统自行实现该逻辑。

  • 检测字段:

增改模式开启时生效。
image.png

4. 字段映射

字段映射主要作用为把来源的原始数据,根据所配置的字段映射规则,转换成目标所需要的数据。该同步场景下,已经预设了一些常用字段映射规则,如需更改,请自行修改即可。
字段映射方式分为:字段映射和脚本映射。
字段映射:一对一的直接映射,直接把来源字段映射为目标所需要字段。
脚本映射:根据groovy脚本所配置的内容,对来源数据进行处理之后,再映射到目标字段。groovy脚本配置方式请参考文章:
connector groovy脚本使用文档

新增字段映射:
点击添加按钮,选择映射方式,选择字段值,如果字段值在下拉列表中不存在,可以手动输入。
image.png

5. 同步策略

5.1. 同步方式

同步方式分为三种:手动,定时,实时。

5.1.1. 手动:

手动同步指管理员手动触发同步任务。可在同步任务页面点击立即同步按钮,进行立即同步。该同步方式下,同步任务会根据配置好的信息,从IDaaS默认根节点下,拉取所需要同步的对象(组织机构,账户,组),同步到下游系统中。
image.png

5.1.2. 定时:

定时同步指根据同步任务配置的定时任务执行计划,进行数据的同步。也可以进行手动触发。
定时任务又分为周期执行和定时执行两种。
周期执行:勾选“周期执行”并勾选“周二”并选择“间隔02:00”,表示在每个周二每隔2小时执行一次同步任务。
定时执行:勾选“定期执行”并勾选“周二”并选择“02:00:00”,表示在每个周二的2点执行一次同步任务。
image.png

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.1.3.1.

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. 组

url地址如: developer/scim/group

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

参数异常