SP同步数据到IDP场景

最后更新:2022-01-26

1. 简介

connector 在4.16版本中,新增SCIM 接口来源插件,以接口的形式提供数据同步能力,让SP系统可以主动调用接口,同步数据到IDaaS中。增加connector的数据同步方式,更加灵活。

为了实现connector 全面接管IDaaS的数据同步能力,在使用IDaaS 4.15 及以上版本和connector 4.16及以上版本时,推荐使用Connector 的SCIM 接口进行数据同步,替换掉直接使用IDaaS SCIM接口进行数据同步。

2. 使用步骤

2.1. 配置connector 同步任务

2.1.1. 创建应用

要实现数据推送,创建一个应用是必不可少的,我们会创建同步任务时选择使用的应用。
登录管理员>添加应用>选择jwt模板(或者直接使用已经创建的其他应用)
并开启应用的API
image.png image.png

2.1.2. 应用授权

创建好应用后,在应用详情中的数据范围设置该应用允许的数据范围和接口范围 比如下图中,分别授权的所有人事组织节点的权限 和账户组织机构的获取接口权限

image.png

image.png

2.1.3. 同步任务配置

在IDaaS中,机构及组的组织树中,选中“人事组织”或其下的任意节点后,在“导入”里点击“添加拉取任务”,进行拉取任务的表单填写
image.png
image.png

  • 任务名称:按需填写任务名称。

  • 数据拉取来源:下拉展示可选择的来源,下拉列表从connector中获取。选择Connector SCIM数据同步接口来源。

  • 映射模板:下拉展示可选择的映射模板,下拉列表从connector中获取。选择SP-IDP4(通过接口形式)。

  • 来源根节点标识:不必填,不填时为空。对应connector同步任务创建时的“来源根节点标识”一项。

  • IDaaS目标节点外部ID:不必填,不填时默认使用IDaaS人事组织根节点的外部id:main。对应connector同步任务创建时的“目标根节点标识”一项。

  • 关联应用:选取相关的应用。此选择,会影响同步时用户在应用群组内子账户和应用群组内数据字典的同步值。

2.1.3.1. 、注意事项

IDaaS配置好同步任务,会调用connector服务创建相应的同步任务。
由于同步任务参数较多,会有一些同步参数使用的默认配置,需要针对不同的来源/目标,进行相应的调整。
默认配置如下

同步范围:组织机构、账户
增改模式:关闭
检测字段:外部ID
数据接收方式:主动拉取
数据拉取模式:分页拉取模式
线程模式:不使用线程池
是否开启定时任务:否 

(1)IDP4推送数据到企业微信
(2)IDP4推送数据到AD
(3)IDP4推送数据到钉钉V2(专属钉)

2.2. connector SCIM 同步接口

2.2.1. 说明:

connector提供了以下接口,作为同步接口,主要覆盖组织机构、组、账户。

注意:以下所有的接口调用,都需要通过在同步任务1.7中配置的密钥所生成的access_token进行调用。

调用API接口时,需要先获取access_token,调用接口时传入access_token有两种方式:

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

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

若connector与IDP部署一起,注意以下接口path都需要加上对应的资源名。
如connector访问地址为:http://xx.xx.89.70/connector/#/overview ,则以下接口中{{idaas_host}} 值应为:http://xx.xx.89.70/connector

若同步任务配置中开启了增改模式,以下获取详情相关查询接口将不生效。


client_id和client_secret即为同步任务配置的密钥。查看密钥请在密钥管理处查看,密钥名称与同步任务名称一致。
image.png

Path:/oauth/token

Method: POST

请求方法: POST

Headers:

参数名称

参数值

是否必须

示例

备注

Content-Type

application/x-www-form-urlencoded


Query:

参数名称

参数类型

是否必须

示例

备注

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

2.2.2. 组织机构相关接口

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

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

2.2.2.3. 刪除组织机构

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

Method: DELETE

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

应用获取到的access_token


Query

参数名称

是否必须

示例

备注

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/1?externalId

返回示例 :

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

image.png

2.2.2.4. 获取组织机构

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

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

应用获取到的access_token


Query

参数名称

是否必须

示例

备注

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/1?externalId=123

返回示例 :

{
    "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

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

返回数据

名称

类型

备注

其他信息

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
}

2.2.3. 账户相关接口

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

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

2.2.3.3. 删除账户

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

Method: DELETE
Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}


Query

参数名称

是否必须

示例

备注

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/1?externalId=123

返回示例 :

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

image.png

2.2.3.4. 获取账户

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

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}


Query

参数名称

是否必须

示例

备注

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}

请求示例 :

/api/sync/v1/data_accept/SCIM/account/id/1?externalId=123


成功示例 :

{
    "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

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

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

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

返回数据

名称

类型

备注

其他信息

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
}

2.2.4. 组相关接口

2.2.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,如果同时传了accountExternalId和username,以accountExternalId为准

├─username

boolean

非必须


账户名,如果同时传了accountExternalId和username,以accountExternalId为准

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"
    }
  ],
  "extendFields": {
    "test":"123456"
  }
}


成功示例 :

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


image.png

2.2.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,如果同时传了accountExternalId和username,以accountExternalId为准

├─username

boolean

非必须


账户名,如果同时传了accountExternalId和username,以accountExternalId为准

deleteMembers

object[]

非必须


需要移除的组成员,

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

├─accountExternalId

String

非必须


账户外部ID,如果同时传了accountExternalId和username,以accountExternalId为准

├─username

boolean

非必须


账户名,如果同时传了accountExternalId和username,以accountExternalId为准

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

2.2.4.3. 删除组

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

Method: DELETE
**Headers **

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}


Query

参数名称

是否必须

示例

备注

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}

请求示例 :

/api/sync/v1/data_accept/SCIM/group/id/1?externalId=123


返回示例:

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

image.png