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

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

1. 场景描述

image.png

  1. 业务系统调用数据同步模块提供的标准SCIM接口,推送数据到数据同步模块。

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

  3. 数据同步模块调用IDaaS接口推送数据到IDaaS系统。

2. 支持的对象

支持同步组织机构,组,账户数据到IDaaS系统。

3. 数据同步配置

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

3.1. 基本信息配置

在基础信息页面,填写同步任务的基本信息。

3.1.1. 同步任务名称:

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

3.1.2. 上游配置:

新建配置,或者选择已有配置。新建配置时,只需要填写上游配置名称。
image.png

3.1.3. 授权信息:

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

3.1.4. 规则配置:

  • IDaaS根节点标识:

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

  • 上游系统根节点标识:

填入上游业务系统的根节点标识,SCIM标准接口同步,不需要填写该项。

  • 同步类型:

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

  • 默认密码:

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

  • 增改模式:

SCIM标准接口同步,不允许打开增改模式。必须为关闭状态,不然调用接口将会报错。
image.png

4. 字段映射

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

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

5. 同步策略

5.1. 同步方式

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

5.1.1. 手动:

手动同步指管理员手动触发同步任务。可在同步任务页面点击立即同步按钮,进行立即同步。该同步方式下,同步任务会根据配置好的信息,从来源默认根节点下,拉取所需要同步的对象(组织机构,组,账户),同步到下游系统中。
(SCIM标准接口同步不支持点击立即同步按钮,进行数据拉取,需要业务方调用connector提供的接口,进行数据主动推送)
image.png

5.1.2. 定时:

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

5.1.3. 实时:

实时同步表示当数据源发生变化时,上游业务系统自动触发同步任务实时变更数据。(SCIM标准接口同步不支持实时同步)

5.2. 失败自动重试

该功能主要应对在数据同步过成中,如出现网络短暂波动而造成的数据同步失败的情况。选择失败重试之后,失败的数据将会立即进行重推。重推数据时,不再从来源拉取数据,使用之前已经拉取到的来源数据进行重推。失败重试可以选择重试1,2,3次。
该功能无法解决由于来源数据错误而导致的数据推送失败的情况。
(SCIM标准接口同步不需要开启该选项)
image.png

6. 调用connector提供的SCIM接口

在完成了同步任务的配置之后,业务系统可以按照以下接口进行调用,把数据推送到IDaaS系统。

6.1. connector SCIM 同步接口

6.1.1. 说明:

connector提供了以下接口,作为同步接口,主要覆盖组织机构、组、账户。
调用API接口时,需要先获取access_token,调用接口时传入access_token有两种方式:

  • URL值后:URL?access_token={access_token}

  • Header里面:Authorization bearer {access_token}(注意 bearer与access_token之间的空格)

client_id和client_secret为同步任务自动生成的密钥。
密钥查看方式:点击同步任务卡片的“复制密钥”,复制出来的密钥形式为:(API Key:XXXX API Secret:XXX),以下为示例值:

API Key:2158438dbd06a23e63d5fc06724cfdeckJLumafTiS0    API Secret:FEqQHVzqYJVmT6mDHeTLram8sChPRWZFZr6DHBNf

image.png

Path:/oauth/token

Method: POST

请求方法: POST

Headers:

参数名称

参数值

是否必须

示例

备注

Content-Type

application/x-www-form-urlencoded

Body:

参数名称

参数类型

是否必须

示例

备注

client_id

text

client_id={API Key}

同步任务自动生成 API Key值

client_secret

text

client_secret={API Secret}

同步任务自动生成 API Secret值

scope

text

scope=read

固定值

grant_type

text

grant_type=client_credentials

固定值

返回数据

名称

类型

是否必须

默认值

备注

其他信息

access_token

string

必须

access_token凭证

token_type

string

必须

凭证类型

固定值 bearer

expires_in

number

必须

有效期

单位为秒

scope

string

必须

授权范围

固定值 read

jti

string

非必须

access_token为jwt格式时,才有此值。

2f5a91a9-e939-401e-8a0b-db0b5fdee42a

请求地址示例:

{idaas_host}/oauth/token?client_id={{client_id}}&client_secret={{client_secret}}&scope=read&grant_type=client_credentials

返回示例 :

{
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXBwX2FwaV9yZXNvdXJjZSIsImVudGVycHJpc2VfbW9iaWxlX3Jlc291cmNlIiwiYmZmX2FwaV9yZXNvdXJjZSJdLCJzY29wZSI6WyJyZWFkIl0sImV4cCI6MTYyMDQ4NDI3MCwiYXV0aG9yaXRpZXMiOlsiUk9MRV9BUFBMSUNBVElPTl9BUEkiLCJST0xFX0VORF9VU0VSIl0sImp0aSI6ImQ0N2U3M2RlLTFiMTctNDgxZS05Yzg4LTNkODdlZGE1ODllZiIsImNsaWVudF9pZCI6IjBmZmI3MWI5MDQwY2IxZWM5OGZlZTQ1ZTllYWVkODQxWjIwQ2t0bmRremQifQ.UxPJWUOA9YWvKHRZ8VWgu1qwKCYKVBYfQfBMpJyvIQk",
    "token_type": "bearer",
    "expires_in": 43199,
    "scope": "read",
    "jti": "d47e73de-1b17-481e-9c88-3d87eda589ef"
}

image.png

6.1.2. 组织机构相关接口

6.1.2.1. 推送组织机构

Path:/api/sync/v1/data_accept/SCIM/organization/id/{同步任务id}
Method: POST

Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

应用获取到的access_token

Body

名称

类型

是否必须

默认值

备注

其他信息

organizationName

string

必须

机构名称

externalId

string

非必须

组织机构的唯一id,该id是SP同步过来的,所以在IDaaS中称为外部id,如果不填IDP将随机生成一个外部id。选填

parentExternalId

string

必须

所属的父级组织机构的唯一id, 该id是SP同步过来的, 所以在IDaaS中称为父级外部id,通过在系统”机构及组”中在组织机构属性中查看参数“外部ID”即可。

type

string

非必须

自建组织单位:SELF_OU,自建部门:DEPARTMENT,默认为DEPARTMENT

sortNumber

string

非必须

排序号

enabled

boolean

非必须

是否启用

true:启用,false:禁用,默认为true。

description

string

必须

描述

用于说明当前OU,不超过500个字符。

extendFields

object

非必须

扩展字段

在IDP数据字典中定义,如果自定义扩展的字段是必填选项,则该属性必填

├─  test1

string

非必须

返回数据

名称

类型

是否必须

默认值

备注

其他信息

success

boolean

必须

是否成功

code

string

必须

成功为200

message

null

必须

错误信息

success为false取值提示给用户

requestId

string

必须

无须关注

data

object

非必须

├─  externalId

string

非必须

返回的外部id

├─  id

string

非必须

uuid

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:externalId:123456重复

请求参数错误

400

InvalidParameter.ExternalId.Exist

例如:外部ID重复,externalId:123456

外部id重复

400

InvalidParameter.Name.Exist

例如:OU名称重复,OrganizationName:研发部

组织机构的名称已存在

403

Forbidden

例如:没有权限操作该父OU

没有权限操作

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/organization/id/{同步任务id}

请求示例:

{
    "organizationName": "成都研发部",
    "externalId": "123456",
    "parentExternalId": "2961201661376138058",
    "type": "DEPARTMENT",
    "sortNumber": "3",
    "enabled":true,
    "description": "负责产品研发",
    "extendFields":{
         "test1":"123"
    }
}

返回示例 :

{
    "status": 200,
    "message": "添加成功",
    "requestId": "6FF9F74F-15BF-4D36-BE17-6DE1FDD8065A",
    "data": {
        "externalId": "8262319981134538379",
        "id": "f0e927df37434ae302e58a77a827896eCRVt7rSg0jr"
    },
    "code": "200",
    "success": true
}

image.png

6.1.2.2. 修改组织机构

Path:/api/sync/v1/data_accept/SCIM/organization/id/{同步任务id}
Method: PUT

Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

应用获取到的access_token

Body

名称

类型

是否必须

默认值

备注

其他信息

organizationName

string

必须

机构名称

externalId

string

必须

组织机构的唯一id,该id是SP同步过来的,所以在IDaaS中称为外部id

parentExternalId

string

非必须

所属的父级组织机构的唯一id, 该id是SP同步过来的, 所以在IDaaS中称为父级外部id,通过在系统”机构及组”中在组织机构属性中查看参数“外部ID”即可。

type

string

非必须

自建组织单位:SELF_OU,自建部门:DEPARTMENT,默认为DEPARTMENT

sortNumber

string

非必须

排序号

enabled

boolean

非必须

是否启用

true:启用,false:禁用,默认为true。

description

string

非必须

描述

用于说明当前OU,不超过500个字符。

extendFields

object

非必须

扩展字段

在IDP数据字典中定义,如果自定义扩展的字段是必填选项,则该属性必填

├─  test1

string

非必须

返回数据

名称

类型

是否必须

默认值

备注

其他信息

success

boolean

必须

是否成功

code

string

必须

成功为200

message

null

必须

错误信息

success为false取值提示给用户

requestId

string

必须

无须关注

data

object

非必须

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:描述信息不能超过500个字符

请求参数错误

400

EntityNotFound

例如:组织机构不存在

未查找到要更新的OU

400

InvalidParameter.Name.Exist

例如:OU名称重复,OrganizationName:研发部

组织机构的名称已存在

400

OperationDenied

例如:OU不能移动到自己子级下

不被允许的操作

403

Forbidden

例如:没有权限操作该父OU

没有权限操作

请求地址示例
{{idaas_host}}/api/sync/v1/data_accept/SCIM/organization/id/{同步任务id}

请求示例 :

{
    "description": "",
    "organizationName": "成都研发部",
    "externalId": "123456",
    "parentExternalId": "2961201661376138058",
    "enabled":false,
    "type": null,
    "sortNumber": "5",
    "extendFields":{
       "test1":"1235123"
    }
}

返回示例 :

{
    "status": 200,
    "message": "修改成功",
    "requestId": "1E8BB9A7-0A10-449F-813C-D9FF59810982",
    "data": null,
    "code": "200",
    "success": true
}

image.png

6.1.2.3. 刪除组织机构

Path:/api/sync/v1/data_accept/SCIM/organization/id/{同步任务id}

Method: DELETE

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

应用获取到的access_token

Body

参数名称

是否必须

示例

备注

externalId

外部id

返回数据

名称

类型

是否必须

默认值

备注

其他信息

success

boolean

必须

是否成功

code

string

必须

成功为200

message

null

必须

错误信息

success为false取值提示给用户

requestId

string

必须

无须关注

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:外部id(externalId)不能为空

请求参数错误

400

EntityNotFound

例如:组织机构不存在

未查找到要更新的OU

400

OperationDenied.OUContainsChildren

例如:该OU存在关联关系,不能删除

未查找到要更新的OU

403

Forbidden

例如:没有权限操作该父OU

没有权限操作

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/organization/id/{同步任务id}

返回示例 :

{
    "status": 200,
    "message": "删除成功",
    "requestId": "232F6C61-4098-4851-9B24-FE9B3C712027",
    "data": null,
    "code": "200",
    "success": true
}

image.png

6.1.2.4. 获取组织机构

Path:/api/sync/v1/data_accept/SCIM/organization/id/{同步任务id}
Method: GET
Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

应用获取到的access_token

Body

参数名称

是否必须

示例

备注

externalId

外部id

返回数据

名称

类型

是否必须

默认值

备注

其他信息

success

boolean

必须

是否成功

code

string

必须

成功为200

message

null

必须

错误信息

success为false取值提示给用户

requestId

string

必须

无须关注

data

对象

组织机构相关信息

├─ refOrgExternalId

string

来源于主数据的外部ID,只有mainData为false时,才可能有该值

├─ organizationName

string

组织机构名称

├─ manager

string

管理者

├─ sortNumber

int

排序号

├─ externalId

string

外部ID

├─ description

string

描述

├─ type

string

类型

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

├─ nodeType

string

组织机构节点类型,前端需要根据此来进行判断对于的操作,默认为自建

ENTERPRISE_ROOT:公司根节点,MASTER_TREE_ROOT:主树根节点,APP_GROUP:应用群组,SLAVE_TREE_ROOT:子树根节点,SELF_CREATED:自建节点,COPY_REF_NODE:复制引用主树,REF_NODE:引用主树

├─ uuid

string

├─ enabled

boolean

是否开启

├─ rootNode

boolean

是否是根组织机构

├─ parentExternalId

string

父级组织机构外部ID

├─ extendFields

对象

扩展字段

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:外部id(externalId)不能为空

请求参数错误

400

EntityNotFound

例如:组织机构不存在

未查找到OU

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/organization/id/{同步任务id}

返回示例 :

{
    "status": 200,
    "message": "查询成功",
    "requestId": "48759A7F-BC80-467A-AA80-AA058C6331A7",
    "data": {
        "refOrgExternalId": null,
        "organizationName": "测试123",
        "manager": [],
        "sortNumber": 0,
        "externalId": "2748476799924177626",
        "description": "",
        "type": "SELF_OU",
        "nodeType": "SELF_CREATED",
        "uuid": "a2144f9071a240323d20e8a3192a512fWyfbJjKQu4r",
        "enabled": true,
        "rootNode": false,
        "parentExternalId": "main",
        "extendFields": {}
    },
    "code": "200",
    "success": true
}

image.png

6.1.2.5. 获取组织机构列表

若传入的查询参数externalId为引用节点组织外部ID,则会返回引用的人事组织节点下的所有组织

Path: /api/sync/v1/data_accept/SCIM/organization/list/id/{同步任务id}
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

参数值

类型

备注

externalId

{externalId}

String

组织单位的外部id(externalId)。选填,返回该部门及其下所有子部门的信息

pageNumber

{pageNumber}

Number

分页开始位置,默认1

pageSize

{pageSize}

Number

分页限制条数,默认20,最大50

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├ refOrgExternalId

string

若传入的查询参数externalId为引用节点组织外部ID,则会返回引用的人事组织节点外部ID

├ organizations

string

返回的组织机构信息

├─externalId

string

组织机构的外部id

├─organizationName

string

组织机构名称

├─externalId

string

组织机构的外部id,和id一样

├─parentExternalId

string

父组织机构外部id

├─ type

string

类型

├─enabled

string

是否可用

├─description

string

描述

├─nodeType

string

组织机构类型

ENTERPRISE_ROOT(“公司根节点”,“Enterprise root”)
MASTER_TREE_ROOT(“主树根节点”, “Master tree root node”)
APP_GROUP(“应用群组”, “App Group Node”) 
SLAVE_TREE_ROOT(“子树根节点”, “Slave tree root node”) 
SELF_CREATED(“自建节点”, “Self Create”) 
REF_NODE(“引用主树”, “Reference main tree”);

├─refOrgExternalId

string

引用人事节点外部ID

当nodeType为引用主树类型时,该ID代表此节点引用的人事组织节点外部ID

└─extendFields

object

扩展字段

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

EntityNotFound

例如:组织机构123456不存在

未查找到externalId对应的OU

403

Forbidden

例如:没有权限操作该父OU

没有权限操作

请求示例 :

获取该公司的所有组织机构: /api/sync/v1/data_accept/SCIM/organization/list/id/5

获取某个OU下所有组织机构的信息: /api/sync/v1/data_accept/SCIM/organization/list/id/5?externalId=5986176890912195413

响应示例:

{
    "status": 200,
    "message": "查询成功",
    "requestId": "1657529221902$09977776-b416-52e5-2ed9-cf4572dd75cc",
    "data": {
        "total": 163,
        "refOrgExternalId": "",
        "organizations": [
            {
                "refOrgExternalId": null,
                "organizationName": "莉莉丝飞书同步IDP",
                "manager": [],
                "sortNumber": 0,
                "externalId": "7379463240492416927",
                "description": "",
                "type": "DEPARTMENT",
                "nodeType": "SELF_CREATED",
                "uuid": "181d7b02707df7f045e37182e843200fi9J2ftg58jr",
                "enabled": true,
                "rootNode": false,
                "parentExternalId": "main",
                "extendFields": {}
            },
            {
                "refOrgExternalId": null,
                "organizationName": "2FA",
                "manager": [],
                "sortNumber": 0,
                "externalId": "4666166874966675502",
                "description": "",
                "type": "DEPARTMENT",
                "nodeType": "SELF_CREATED",
                "uuid": "25a08a0ddbf2595a218bd33c8bf9a84aoLDzcdK5Ogc",
                "enabled": true,
                "rootNode": false,
                "parentExternalId": "main",
                "extendFields": {}
            }
        ]
    },
    "code": "200",
    "success": true
}

6.1.3. 账户相关接口

6.1.3.1. 推送账户

Path:/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}
Method: POST

Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

Body

名称

类型

是否必须

默认值

备注

其他信息

externalId

string

非必须

用户的唯一id

如果不填,将随机生成一个,并在结果中返回

userName

string

必须

IDaaS平台主账户

displayName

string

必须

用户的显示名称

password

string

非必须

IDaaS平台主账户密码

若为空,则将使用系统随机密码。

email

string

非必须

邮箱

和手机号必有一个

phoneNumber

string

非必须


手机号, 只能一个且唯一

和邮箱必有一个

enabled

boolean

非必须


是否启用

true:启用,false:禁用,默认为true。

locked

boolean

非必须


是否锁定

true:已锁定,false:未锁定,默认为false。

firstLogin

boolean

非必须


首次登录,是否需要用户修改密码

默认值为true,需要修改

description

string

非必须


描述信息


userBelongs

object[]

必须


用户所属的组织机构列表

人员组织机构属性需要放到这下面

├─externalId

string

必须

组织机构的外部id

├─mainOu

boolean

必须

是否是主组织机构

├─displayOrder

string

非必须

显示顺序

├─extendFields

object

非必须

人员组织属性参数,Map<key,value>结构,key为人员组织属性的字段值,value为需要赋予的具体值

extendFields

object

非必须

自定义扩展的字段,在IDP数据字典中定义。

填写则代表更新该项信息。更新时,如果自定义扩展的字段是必填选项,则该属性必填

├─  test

string

非必须

该组需要拥有对应的扩展属性


├─  test1

string

非必须

该组需要拥有对应的扩展属性


返回数据

名称

类型

是否必须

默认值

备注

其他信息

success

boolean

必须

是否成功

code

string

必须

成功为200

message

null

必须

错误信息

success为false取值提示给用户

requestId

string

必须

无须关注

data

object

非必须

├─externalId

string

非必须

返回的外部id

├─id

string

非必须

uuid


错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:账户名称不能为空

请求参数错误

400

InvalidParameter.ExternalId.Exist

例如:externalId外部ID重复

外部id重复

400

InvalidParameter.Name.Exist

例如:账户名(username)已经存在

账户名称已经存在

400

InvalidParameter.Name.Exist

例如:账户名(username)已经存在

账户名称已经存在

400

InvalidParameter.DisplayName.Exist

例如:显示名已经存在

显示名已经存在

400

InvalidParameter.Email.Exist

例如:邮箱(email)已被其他账户绑定

邮箱(email)已被其他账户绑定

400

InvalidParameter.PhoneNumber.Exist

例如:手机号(phoneNumber)已被其他账户绑定

手机号(phoneNumber)已被其他账户绑定

400

InvalidParameter.PhoneEmail.AllEmpty

例如:手机号(phoneNumber)和邮箱(email)必须选填一个

手机号(phoneNumber)和邮箱(email)不能全为空

400

EntityNotFound

例如:所属组织机构(belongs):123456不存在

未查找到externalId对应的OU


请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}

请求示例 :

{
    "externalId": "123456",
    "userName": "developer2",
    "displayName": "开发人员3",
    "password": "Jdev@12345",
    "email": "test2@test.com",
    "phoneNumber": "",
    "description": "",
    "userBelongs":[{
      "externalId":"4860408743312212887",
      "mainOu":true,
      "extendFields":{
        "connector":"1"
      },
      "displayOrder":1
    }],
    "extendFields": {
        "test": "123456",
        "test1": "woman"
    }
}


成功示例 :

{
    "status": 200,
    "message": "添加成功",
    "requestId": "AEC3C517-3B90-49F8-B900-F6F3474C3AAE",
    "data": {
        "externalId": "39672213017021884",
        "id": "6cd08b72926a7487118b37009f56571a7tPWM40TdZF"
    },
    "code": "200",
    "success": true
}

image.png

6.1.3.2. 修改账户

Path:/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}

Method: PUT

Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

Body

名称

类型

是否必须

默认值

备注

其他信息

externalId

string

必须

账户外部id

userName

string

非必须

displayName

string

非必须

password

string

非必须

email

string

非必须

phoneNumber

string

非必须

expireTime

string

非必须

description

string

非必须

locked

boolean

非必须




firstLogin

boolean

非必须


首次登录,是否需要用户修改密码

默认值为true,需要修改

userBelongs

object[]

必须


用户所属的组织机构列表

人员组织机构属性需要放到这下面

├─externalId

string

必须

组织机构的外部id

├─mainOu

boolean

必须

是否是主组织机构

├─displayOrder

long

非必须

显示顺序

├─extendFields

object

非必须

人员组织属性参数,Map<key,value>结构,key为人员组织属性的字段值,value为需要赋予的具体值

extendFields

object

非必须

├─  test

string

非必须

├─  test1

string

非必须

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:账户名称不能为空

请求参数错误

400

InvalidParameter.ExternalId.Exist

例如:externalId外部ID重复

外部id重复

400

InvalidParameter.Name.Exist

例如:账户名(username)已经存在

账户名称已经存在

400

InvalidParameter.DisplayName.Exist

例如:显示名已经存在

显示名已经存在

400

InvalidParameter.Email.Exist

例如:邮箱(email)已被其他账户绑定

邮箱(email)已被其他账户绑定

400

InvalidParameter.PhoneNumber.Exist

例如:手机号(phoneNumber)已被其他账户绑定

手机号(phoneNumber)已被其他账户绑定

400

InvalidParameter.PhoneEmail.AllEmpty

例如:手机号(phoneNumber)和邮箱(email)必须选填一个

手机号(phoneNumber)和邮箱(email)不能全为空

400

InvalidParameter.ExternalId.NotExist

例如:通过externalId查询不到账户

未查找到externalId对应的账户

400

EntityNotFound

例如:所属组织机构(belongs):123456不存在

未查找到externalId对应的OU

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}

请求示例 :

{
  "externalId": "123456",
  "userName": "developer2",
  "displayName": "开发人员4",
  "password": "Jdev@12345",
  "email": "test2@test.com",
  "phoneNumber": "",
  "description": "",
  "userBelongs":[{
    "externalId":"4860408743312212887",
    "mainOu":true,
    "extendFields":{
      "connector":"1"
    },
    "displayOrder":1
  }],
  "extendFields": {
    "test": "123456",
    "test1": "woman"
  }
}

返回示例 :

{
    "status": 200,
    "message": "修改成功",
    "requestId": "10DE5F50-F9EF-4FFF-A155-EF812CB7DA03",
    "data": null,
    "code": "200",
    "success": true
}

image.png

6.1.3.3. 删除账户

Path:/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}

Method: DELETE
Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Body

参数名称

是否必须

示例

备注

externalId

外部ID

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:外部id(externalId)不能为空

请求参数错误

400

EntityNotFound

例如:账户不存在

未查找到要删除的账户

403

OperationDenied

例如:管理员 admin 不能删除

删除操作不被允许

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}

返回示例 :

{
    "status": 200,
    "message": "删除成功",
    "requestId": "4DEC8F0A-68BF-4E8A-A17B-6B0417153ECC",
    "data": null,
    "code": "200",
    "success": true
}

image.png

6.1.3.4. 获取账户

Path:/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}
Method: GET
Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

Body

参数名称

是否必须

示例

备注

externalId

外部ID

返回数据

名称

类型

是否必须

默认值

备注

其他信息

success

boolean

必须

是否成功

code

string

必须

成功为200

message

null

必须

错误信息

success为false取值提示给用户

requestId

string

必须

无须关注

data

object

非必须

externalId

string

非必须

用户的唯一id

如果不填,将随机生成一个,并在结果中返回

userName

string

必须

IDaaS平台主账户

displayName

string

必须

用户的显示名称

password

string

非必须

IDaaS平台主账户密码

若为空,则将使用系统随机密码。

email

string

非必须

邮箱

和手机号必有一个

phoneNumber

string

非必须


手机号, 只能一个且唯一

和邮箱必有一个

enabled

boolean

非必须


是否启用

true:启用,false:禁用,默认为true。

locked

boolean

非必须


是否锁定

true:已锁定,false:未锁定,默认为false。

firstLogin

boolean

非必须


首次登录,是否需要用户修改密码

默认值为true,需要修改

description

string

非必须


描述信息


userBelongs

对象组

非必须


账户所属的组织机构列表

选填,没有则是使用belongs中的第一个作为主OU

├─externalId

string

所属的OU

├─mainOu

boolean

是否是主OU

├─extendFields

对象

扩展字段

├─displayOrder

long

人员在组织机构里面的排序号

extendFields

object

非必须

自定义扩展的字段,在IDP数据字典中定义。

填写则代表更新该项信息。更新时,如果自定义扩展的字段是必填选项,则该属性必填

├─  test

string

非必须


├─  test1

string

非必须

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:externalID为空

请求参数错误

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}


请求示例 :

{
    "externalId":"6388145574403509802"
    
    
}

成功示例 :

{
  "status": 200,
  "message": "查询成功",
  "requestId": "630641BF-6A5B-4822-878F-13D3CEA96933",
  "data": {
    "displayName": "scim_test2",
    "externalId": "6388145574403509802",
    "description": "来自应用{企业微信同步数据到idaas}的同步",
    "userBelongs": [
      {
        "externalId": "4860408743312212887",
        "mainOu": true,
        "extendFields": {
          "connector": "1"
        },
        "displayOrder": 1
      }
    ],
    "enabled": true,
    "archived": false,
    "phoneNumber": "13980522912",
    "phoneRegion": "86",
    "extendFields": {
      "test": "12",
      "sex": "0",
      "age": "12"
    },
    "locked": false,
    "email": "zzzz@qq.com",
    "username": "scim_test1",
  },
  "code": "200",
  "success": true
}

image.png

6.1.3.5. 离职账户

Path:/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}/archive

Method: POST
Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Body

参数名称

是否必须

示例

备注

externalId

外部ID

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:外部id(externalId)不能为空

请求参数错误

400

EntityNotFound

例如:账户不存在


403

OperationDenied

例如:管理员 admin 不能离职


请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}/archive

返回示例 :

{
    "status": 200,
    "message": "离职成功",
    "requestId": "C2DB9275-52EA-4D60-BA42-E6438330778E",
    "data": null,
    "code": "200",
    "success": true
}

image.png

6.1.3.6. 返聘账户

Path:/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}/rehire

Method: POST
Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Body

参数名称

是否必须

示例

备注

externalId

账户外部ID

organizationExternalId

需要被返聘回的组织机构外部ID,如果不填,默认返聘回原组织机构

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:外部id(externalId)不能为空

请求参数错误

400

EntityNotFound

例如:账户不存在


请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/account/id/{同步任务id}/rehire

请求示例:

{
    
    "externalId":"6388145574403509802",
    "organizationExternalId":"2748476799924177626"
    
}

返回示例 :

{
    "status": 200,
    "message": "返聘成功",
    "requestId": "9868D889-268B-4507-9FF1-91EC030CD2FB",
    "data": null,
    "code": "200",
    "success": true
}

image.png

6.1.3.7. 获取账户列表

Path:/api/sync/v1/data_accept/SCIM/account/list/id/{同步任务id}
Method: GET
Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

query

参数名称

是否必须

示例

备注

ouExternalId


指定具体组织机构的外部ID, 可选,返回该组织机构下的账户列表,子部门的账户列表无法返回

createStartDate

2022-01-01

指定账户创建开始日期, 格式: yyyy-MM-dd, 如: 2018-01-01, 可选

createEndDate

2022-01-01

指定账户创建结束日期, 格式: yyyy-MM-dd, 如: 2018-01-30, 可选

pageNumber


分页页码,默认为1

pageSize


每页数量,默认为20,最大50

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

│ total

int

总数

├ refOrgExternalId

string

若传入的查询参数ouExternalId为引用节点组织外部ID,则会返回引用的人事组织节点外部ID

└─accounts

object

返回的账户列表

├─externalId

string

用户的外部id

├─username

string

用户名

├─displayName

string

显示名

├─phoneNumber

string

手机号

├─email

string

邮箱

├─locked

string

账号是否锁定,true为锁定,false为未锁定

├─archived

boolean

是否离职,false:普通账户,true:离职账户

├─enabled

string

账号是否可用,true为启用,false禁用

├─extendFields

object

扩展字段

├userBelongs

string []

所属ou的外部id

为组织外部id的集合,必填

├─externalId

String

具体的组织外部id

├─mainOu

boolean

是否主组织

true:是,false:不是

├─displayOrder

long

人员排序

├─extendFields

object

自定义”人员-组织属性”数据字典

填写则代表更新该项信息。更新时,如果数据字典是必填选项,则该属性必填

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

EntityNotFound

例如:组织机构123456不存在

未查找到externalId对应的OU

403

Forbidden

例如:没有权限操作该父OU

没有权限操作

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/account/list/id/5?ouExternalId=4860408743312212887&pageNumber=1&pageSize=2&createStartDate=2022-01-22&createEndDate=2022-01-22

请求示例:

返回示例 :

{
  "status": 200,
  "message": "查询成功",
  "requestId": "1657188718443$553ff981-f2be-01b5-56a9-40cee28703bd",
  "data": {
    "total": 1,
    "refOrgExternalId": null,
    "accounts": [
      {
        "displayName": "cf_aaa",
        "applicationUsers": [],
        "effectiveTime": null,
        "externalId": "6681920058773877059",
        "description": "",
        "updateTime": "2022-01-22 15:25",
        "userBelongs": [
          {
            "externalId": "4860408743312212887",
            "mainOu": false,
            "extendFields": {
              "connector": "1"
            },
            "displayOrder": 1
          }
        ],
        "enabled": true,
        "archived": false,
        "phoneNumber": "13980522956",
        "expireTime": "2116-12-31 23:59",
        "createTime": "2022-01-22 15:25",
        "phoneRegion": "86",
        "extendFields": {},
        "locked": false,
        "email": null,
        "username": "cf_aaa",
      }
    ]
  },
  "code": "200",
  "success": true
}

image.png

6.1.4. 组相关接口

6.1.4.1. 推送组

Path:/api/sync/v1/data_accept/SCIM/group/id/{同步任务id}
Method: POST

Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

Body

名称

类型

是否必须

默认值

备注

其他信息

externalId

string

非必须

账户组id,唯一

选填,不填时,系统会随机生成一个,并在结果中返回

displayName

string

必须

组显示名称。必填

ouExternalId

string

必须

所属组织单位(OU)的外部ID,必填

description

string

非必须

描述信息,选填

addMembers

object []

非必须


需要添加的组成员

已经存在的账户外部ID和账户名

├─accountExternalId

String

非必须


账户外部ID

├─username

boolean

非必须


账户名

deleteMembers

object[]

非必须


需要移除的组成员,

已经存在的账户外部ID和账户名

├─accountExternalId

String

非必须


账户外部ID

├─username

boolean

非必须


账户名

extendFields

object

非必须

自定义扩展的字段,在IDP数据字典中定义。

填写则代表更新该项信息。更新时,如果自定义扩展的字段是必填选项,则该属性必填

├─  test

string

非必须


├─  test1

string

非必须

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├─  externalId

string

返回的外部id

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:组名称不能为空

请求参数错误

400

InvalidParameter.DisplayName.Exist

例如:当前OU下,组名已经存在

显示名已经存在

400

InvalidParameter.ExternalId.Exist

例如:externalId已存在

externalId已存在

400

EntityNotFound

例如:OU不存在

组隶属的OU不存在

403

Forbidden

例如:没有权限操作该组

没有权限操作该组

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/group/id/{同步任务id}


请求示例 :

{
  "externalId": "121-11",
  "displayName": "测试同步组11",
  "ouExternalId": "605016592710192945",
  "addMembers": [
    {
      "accountExternalId":"",
      "username":"test1"
    }
  ],
  "deleteMembers": [
    {
      "accountExternalId":"",
      "username":"test2"
    }
  ],
  "extendFields": {
    "test":"123456"
  }
}

成功示例 :

{
    "status": 200,
    "message": "添加成功",
    "requestId": "3AC5EF75-2373-4C84-A18E-2E7C75D81514",
    "data": {
        "externalId": "121123"
    },
    "code": "200",
    "success": true
}

image.png

6.1.4.2. 修改组

Path:/api/sync/v1/data_accept/SCIM/group/id/{同步任务id}

Method: PUT

Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

Body

名称

类型

是否必须

默认值

备注

其他信息

externalId

string

必须

账户组id,唯一

displayName

string

非必须

组显示名称。必填

description

string

非必须

描述信息,选填

选填,填写时代表更新

addMembers

object []

非必须


需要添加的组成员

已经存在的账户外部ID和账户名

├─accountExternalId

String

非必须


账户外部ID

├─username

boolean

非必须


账户名

deleteMembers

object[]

非必须


需要移除的组成员,

已经存在的账户外部ID和账户名

├─accountExternalId

String

非必须


账户外部ID

├─username

boolean

非必须


账户名

extendFields

object

非必须

自定义扩展的字段,在IDP数据字典中定义。

填写则代表更新该项信息。更新时,如果自定义扩展的字段是必填选项,则该属性必填

├─  test

string

非必须


├─  test1

string

非必须

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:组的externalId参数不能为空

请求参数错误

400

InvalidParameter.DisplayName.Exist

例如:当前OU下,组名已经存在

显示名已经存在

400

InvalidParameter.ExternalId.NotExist

例如:externalId不存在

externalId不存在

403

Forbidden

例如:没有权限操作该组    没有权限操作该组

请求地址示例:/api/sync/v1/data_accept/SCIM/group/id/{同步任务id}

请求示例 :

{
  "externalId": "121",
  "description": "tttt测试",
  "displayName": "测试t121",
  "addMembers": [
    {
      "accountExternalId":"",
      "username":"test1"
    }
  ],
  "deleteMembers": [
    {
      "accountExternalId":"",
      "username":"test2"
    }
  ],
  "extendFields": {
    "test":"ttt测试"
  }
}

返回示例 :

{
    "status": 200,
    "message": "修改成功",
    "requestId": "F8997456-DC8E-4120-B1AF-5055BA199CEC",
    "data": null,
    "code": "200",
    "success": true
}

image.png

6.1.4.3. 删除组

Path:/api/sync/v1/data_accept/SCIM/group/id/{同步任务id}

Method: DELETE
**Headers **

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Body

参数名称

是否必须

示例

备注

externalId

组外部ID

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:组的externalId参数不能为空

请求参数错误

400

EntityNotFound

例如:查询不到组信息

未查询到组信息

400

OperationDenied.GroupContainsChildren

例如:组有关联成员(如有子成员),不能删除

组有关联成员(如有子成员),不能删除

403

Forbidden

例如:没有权限操作该组

没有权限操作该组

请求地址示例:
{{idaas_host}}/api/sync/v1/data_accept/SCIM/group/id/{同步任务id}


请求示例 :

{
    "externalId": "121123"
   
}

返回示例:

{
    "status": 200,
    "message": "删除成功",
    "requestId": "A19B5B53-97E2-448E-A57A-268E5253AC3D",
    "data": null,
    "code": "200",
    "success": true
}

image.png