用户目录(UD)

最后更新:2024-09-09

本文档主要覆盖一个SP应用如何通过SCIM协议与IDP4进行用户目录进行数据同步。本文档主要针对SP需要拉取IDaaS平台数据(此方法不建议,IDaaS不可控)、SP需要推送组织机构、账户、组数据到IDaaS、IDaaS需要推送组织机构、账户、组数据到SP的三类典型应用场景,方便SP与IDaaS实现数据交互闭环。

当前SP推至IDaaS和IDaaS推至SP场景我们都提供覆盖场景广的连接器Connector实现应用和IDaaS数据打通,需要IDaaS与SP相关同步数据都通过Connector连接器实现。

1. 术语定义

参考:IDP中产品术语介绍

2. 场景描述:

IDaaS平台支持 SCIM 协议,用户目录同步机制支持三种方式:

  1. 推的方式:IDaaS平台通过API将IDaaS中的用户目录信息同步到应用服务器(即SP Service Provider),需要业务系统提供API,如下图中第1步所示;

  2. 送的方式:IDaaS系统提供API,应用服务器(即SP Service Provider)调用IDaaS平台API接口将业务用户目录同步到IDaaS中,如下图中第2步所示;

  3. 拉的方式:IDaaS系统提供API,应用服务器(即SP Service Provider)调用IDaaS平台API接口拉取IDaaS平台的用户目录数据,如下图中的第3步所示。

image.png 建议使用第一种方式;
优势:在保证安全的前提下,可以保证账户数据的一致性,实时性;
如果各业务系统(SP)采用第二种方式,IDaaS平台可提供相应技术文档及API接口;
如果各业务系统(SP)采用第三种方式,IDaaS平台可提供相应技术文档及API接口。

3. IDaaS推至SP

3.1. 集成方式

通过统一连接器Connector实现,其中不同的下游SP通过不同的集成方式集成。此处主要介绍标准SCIM方式推送,如何创建任务见IDaaS通过标准SCIM接口推送数据

3.1.1. 同步目标

选择SCIM类型,选择目标子类型为IDP4标准SCIM
目标管理配置如图:
image.png

  • 来源名称:随意填写,注意唯一性即可;

  • 适用环境:默认是开发环境。需要注意的是来源和目标的环境必须是一样的,否则不会执行同步任务

  • 来源主类型:SCIM类型

  • 来源子类型:选择IDP4标准SCIM

  • 组织机构同步地址: SP系统组织机构API地址

  • 账户同步地址: SP系统账户API地址,

  • 组同步地址: SP系统组API地址,

注意,组织机构同步地址,账户同步地址,组同步地址三者必须有一个不能为空

  • 协议类型: sp系统API接口认证类型(BASIC,OAUTH2)

    如果API接口没有认证措施,可以默认BASIC,账密随意填写即可

  • 如选择basic,则需要填写basic协议的账户和密码,如图

image.png

  • 如选择oauth2,则需要填写oauth的url,client_id,client_secret,如图:

image.png

3.2. API定义

3.2.1. 组织机构

url地址如: developer/scim/organization

3.2.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
}

SP需要返回 Response Body示例:

{
  "code": 200,
  "message": ""
}

参数说明:

字段名

错误码

备注

code,int类型

200

SP返回错误码200,即视为成功

message,错误信息,String类型

400

参数异常

3.2.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
}

SP需要返回 Response Body示例:

{
  "code": 200,
  "message": ""
}

参数说明:

字段名

错误码

备注

code,int类型

200

SP返回错误码200,即视为成功

message,错误信息,String类型

400

参数异常

3.2.1.3. 删除组织机构

method: DELETE

content-Type: application/json

参数名

参数值

备注

id

{id}

本组织机构的外部ID,主键,一般对应应用系统的唯一标识

Request Body示例:

/developer/scim/organization?id=4544581305390943066

SP需要返回 Response Body示例:

{
  "code": 200,
  "message": ""
}

参数说明:

字段名

错误码

备注

code,int类型

200

SP返回错误码200,即视为成功

message,错误信息,String类型

400

参数异常

3.2.2. 账户

url地址如: developer/scim/account

3.2.2.1. 添加账户

method: POST

content-Type: application/json

参数名

参数值

备注

userName

{userName}

账户名称,唯一

id

{id}

用户ID,与外部ID(externalId)值一样

displayName

{displayName}

用户的显示名称,唯一

emails

{emails}

邮箱

phoneNumbers

{phoneNumbers}

手机号, 只能一个且唯一

externalId

{externalId}

外部ID,唯一,可作主键

userBelongs

{userBelongs}

用户所属的组织机构列表 ,人员组织机构属性需要放到这下面

├─externalId

{externalId}

组织机构的外部id

├─mainOu

{mainOu}

是否是主组织机构

├─displayOrder

{displayOrder}

显示顺序

├─extendFields

{extendFields}

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

locked

boolean

是否锁定账户,ture锁定账户,false启用账户。锁定账户后将不能登录应用系统

enabled

boolean

是否禁用账户,ture禁用账户,false启用账户。禁用账户后将不能登录应用系统

extendFields

{extendFields}

扩展字段,attributes为系统定义扩展字段

Request Body示例:

{
  "emails": [
    {
      "value": "test@test.com",
      "primary": true
    }
  ],
  "userBelongs":[{
    "externalId":"4860408743312212887",
    "mainOu":true,
    "extendFields":{
      "connector":"1"
    },
    "displayOrder":1
  }],
  "displayName": "test1",
  "extendFields": {
    "testAttr": "1"
  },
  "externalId": "536607420296949165",
  "id": "536607420296949165",
  "locked": true,
  "userName": "test1",
  "enabled": true,
  "phoneNumbers": [
    {
      "value": "180xxxxxxxx"
    }
  ]
}

SP需要返回 Response Body示例:

{
  "code": 200,
  "message": ""
}

参数说明:

字段名

错误码

备注

code,int类型

200

SP返回错误码200,即视为成功

message,错误信息,String类型

400

参数异常

3.2.2.2. 修改账户

method: PUT

content-Type: application/json

参数名

参数值

备注

userName

{userName}

账户名称,唯一

id

{id}

用户ID,与外部ID(externalId)值一样

displayName

{displayName}

用户的显示名称,唯一

emails

{emails}

邮箱

phoneNumbers

{phoneNumbers}

手机号, 只能一个且唯一

externalId

{externalId}

外部ID,唯一,可作主键

belongs

{belongs}

为账户指定组织单位

organzationsOrderList

{organzationsOrderList}

账户在所属机构下的排序号

locked

boolean

是否锁定账户,ture锁定账户,false启用账户。锁定账户后将不能登录应用系统

enabled

boolean

是否禁用账户,ture启用账户,false禁用账户。禁用账户后将不能登录应用系统

extendFields

{extendFields}

扩展字段,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"
    }
  ]
}

SP需要返回 Response Body示例:

{
  "code": 200,
  "message": ""
}

参数说明:

字段名

错误码

备注

code,int类型

200

SP返回错误码200,即视为成功

message,错误信息,String类型

400

参数异常

3.2.2.3. 删除账户

method: DELETE

content-Type: application/json

参数名

参数值

备注

id

{id}

本账户的外部ID,主键,一般对应应用系统的唯一标识

Request Body示例:

/developer/scim/account?id=4544581305390943066

SP需要返回 Response Body示例:

{
  "code": 200,
  "message": ""
}

参数说明:

字段名

错误码

备注

code,int类型

200

SP返回错误码200,即视为成功

message,错误信息,String类型

400

参数异常

4. SP推至IDaaS

4.1 集成方式

针对不同SP推送至IDaaS的方式,我们提供不同的接入指引,只需要按需选择相关接入指引即可实现不同SP同步数据到IDaaS的流程,目前我们支持两种方式,一种通过统一连接器Connector实现,也可以采用调用API的方式同步数据到IDaaS,见IDP4用户目录API

推荐使用Connector 的SCIM 接口进行数据同步,替换掉直接使用IDaaS SCIM接口进行数据同步

4.2 数据同步配置

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

4.2.1 基本信息配置

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

4.2.1.1 同步任务名称:

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

4.2.1.2. 上游配置:

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

4.2.1.3 授权信息:

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

4.2.1.4 规则配置:

  • IDaaS根节点标识:

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

  • 上游系统根节点标识:

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

  • 同步类型:

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

  • 默认密码:

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

  • 增改模式:

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

4.3 字段映射

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

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

4.4 同步策略

4.4.1. 同步方式

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

4.4.1.1. 手动:

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

4.4.1.2. 定时:

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

4.4.1.3. 实时:

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

4.4.2. 失败自动重试

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

4.5. 调用connector提供的SCIM接口

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

4.5.1. connector SCIM 同步接口

4.5.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:/connector/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}/connector/oauth/token

返回示例 :

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

image.png

4.5.1.2. 组织机构相关接口

4.5.1.2.1. 推送组织机构

Path:/connector/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}}/connector/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

4.5.1.2.2. 修改组织机构

Path:/connector/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}}/connector/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

4.5.1.2.3. 刪除组织机构

Path:/connector/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}}/connector/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

4.5.1.2.4. 获取组织机构

Path:/connector/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}}/connector/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

4.5.1.2.5. 获取组织机构列表

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

Path: /connector/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
}

4.5.1.3. 账户相关接口

4.5.1.3.1. 推送账户

Path:/connector/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}}/connector/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

4.5.1.3.2. 修改账户

Path:/connector/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}}/connector/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

4.5.1.3.3. 删除账户

Path:/connector/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}}/connector/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

4.5.1.3.4. 获取账户

Path:/connector/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}}/connector/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

4.5.1.3.5. 离职账户

Path:/connector/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}}/connector/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

4.5.1.3.6. 返聘账户

Path:/connector/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}}/connector/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

4.5.1.3.7. 获取账户列表

Path:/connector/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}}/connector/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

4.5.1.4. 组相关接口

4.5.1.4.1. 推送组

Path:/connector/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}}/connector/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

4.5.1.4.2. 修改组

Path:/connector/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

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

请求地址示例:/connector/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

4.5.1.4.3. 删除组

Path:/connector/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}}/connector/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

5. SP从IDaaS拉取

此方案主要针对业务系统需要单独拉取IDaaS组织机构和账户数据提供。

5.1. 集成方式

集成方式参照IDP4用户目录API集成步骤,请查看用户目录UD-IDP4

5.2. API文档

5.2.1. 组织机构

5.2.1.1. 查询组织机构

Path:/api/bff/v1.2/developer/scim/organization/detail
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

必须

Query

参数名

是否必须

类型

备注

externalId

必须

String

外部id,组织机构的唯一id

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├externalId

string

组织机构的外部id

├organizationName

string

组织机构名称

├parentExternalId

string

父组织机构外部id

├type

string

类型

├enabled

boolean

是否可用

├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

InvalidParameter

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

请求参数错误

400

EntityNotFound

例如:组织机构不存在

未查找到要更新的OU

403

Forbidden

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

没有权限操作

请求地址示例:/api/bff/v1.2/developer/scim/organization/detail?externalId=1694618271068407094

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "B5D4A6D1-9C51-4AC3-A413-4A27EE1C1474",
  "data": {
    "organizationName": "ceshi导入0009",
    "externalId": "9999233222",
    "parentExternalId": "764712910283009725",
    "type": "SELF_OU",
    "rootNode": false,
    "sortNumber": 0,
    "enabled": true,
    "description": null,
    "extendFields": {
      "4": "asd"
    }
  }
}

5.2.1.2. 获取组织机构列表

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

Path: /api/bff/v1.2/developer/scim/organization/list
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

externalId

非必须

String

外部id,组织机构的唯一id

start

非必须

Number

分页开始位置,默认0

limit

非必须

Number

分页限制条数,默认20

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

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

组织机构名称

├─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/bff/v1.2/developer/scim/organization/list

获取某个OU下所有组织机构的信息:/api/bff/v1.2/developer/scim/organization/list?externalId=5986176890912195413

响应示例:

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "3CCA4939-170C-46AA-BE11-F3DE924FC0E9",
  "data": {
    "organizations": [
      {
        "organizationName": "成都研发部",
        "externalId": "2858068028015036528",
        "parentExternalId": "129733886490329012",
        "type": "DEPARTMENT",
        "rootNode": false,
        "sortNumber": 0,
        "enabled": true,
        "description": "",
        "extendFields": {}
      },
      {
        "organizationName": "成都分公司",
        "externalId": "129733886490329012",
        "parentExternalId": "6721629573848908864",
        "type": "SELF_OU",
        "rootNode": false,
        "sortNumber": 0,
        "enabled": true,
        "description": "",
        "extendFields": {}
      },
      {
        "organizationName": "测试研发部3-3",
        "externalId": "test3-3",
        "parentExternalId": "test3",
        "type": "DEPARTMENT",
        "rootNode": false,
        "sortNumber": 3,
        "enabled": true,
        "description": "通过SCIM同步组织机构",
        "extendFields": {
          "test1": "1235123"
        }
      },
      {
        "organizationName": "研发部3-4",
        "externalId": "test3-4",
        "parentExternalId": "test3",
        "type": "DEPARTMENT",
        "rootNode": false,
        "sortNumber": 3,
        "enabled": true,
        "description": "研发分部",
        "extendFields": {
          "test1": "123"
        }
      }
    ],
    "total": 4,
    "refOrgExternalId": ""
  }
}

5.2.1.3. 获取根节点组织机构信息

Path:/api/bff/v1.2/developer/scim/organization/root
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├externalId

string

组织机构的外部id,主键

├organizationName

string

组织机构名称

├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

InvalidParameter

例如:cannot get current enterpriseUuid(获取不到当前租户信息)

请求参数错误

400

EntityNotFound

例如:cannot get rootOU

未查找根OU

403

Forbidden

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

没有权限操作

请求地址示例: /api/bff/v1.2/developer/scim/organization/root

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "C757F8D6-E96A-4399-823C-E55AED4D59C3",
  "data": {
    "organizationName": "OuName",
    "externalId": "6721629573848908864",
    "parentExternalId": null,
    "type": "SELF_OU",
    "rootNode": true,
    "sortNumber": 0,
    "enabled": true,
    "description": "",
    "extendFields": {}
  }
}

5.2.1.4. 获取组织机构的直属子级

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

Path:/api/bff/v1.2/developer/scim/organization/children
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

externalId

必须

String

外部id,组织机构的唯一id

start

非必须

Number

分页开始位置,默认0

limit

非必须

Number

分页限制条数,默认20

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

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

组织机构名称

├─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/bff/v1.2/developer/scim/organization/children?externalId=1

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "26AD790D-FB7D-4ED9-B07E-82448C929F88",
  "data": {
    "organizations": [
      {
        "organizationName": "销售部",
        "externalId": "130015784",
        "parentExternalId": "1",
        "type": "DEPARTMENT",
        "rootNode": false,
        "sortNumber": 130015784,
        "enabled": true,
        "description": null,
        "extendFields": {
        }
      },
      {
        "organizationName": "研发部",
        "externalId": "129387071",
        "parentExternalId": "1",
        "type": "DEPARTMENT",
        "rootNode": false,
        "sortNumber": 129387071,
        "enabled": true,
        "description": null,
        "extendFields": {
        }
      },
      {
        "organizationName": "测试部",
        "externalId": "129083981",
        "parentExternalId": "1",
        "type": "DEPARTMENT",
        "rootNode": false,
        "sortNumber": 129083981,
        "enabled": true,
        "description": null,
        "extendFields": {
        }
      }
    ],
    "total": 3,
    "refOrgExternalId": ""
  }
}

5.2.1.5. 获取组织机构在根组织机构下的详情

Path:/api/bff/v1.2/developer/scim/organization/ou_tree/detail
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

externalId

必须

String

外部id,组织机构的唯一id

ouTreeId

必须

String

根组织机构的外部id(externalId)。

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├organizationName

string

组织机构名称

├externalId

string

组织机构的外部id,主键

├parentExternalId

string

父组织机构外部id

├type

string

类型

├enabled

boolean

是否可用

├description

string

描述

├extendFields

object

扩展字段

├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

├mainTree

boolean

查询参数ouTreeId组织是否是人事组织节点

├inRefTree

boolean

查询的组织是否在应用群组树下被引用

└refTreeInfo

object

应用群组下引用树节点详情

当该OU在应用群组被引用时(inRefTree=true)返回该节点在引用树中的详情

├parentRefNodeId

string

引用节点的ID

├parentRefNodeParentId

string

引用节点的上级ID

├parentRefNodePath

string

引用节点的完整路径

└virtualPath

string

当前OU在引用树的路径

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

EntityNotFound

例如:组织机构123456不存在

未查找到externalId对应的OU

403

Forbidden

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

没有权限操作

请求地址示例: /api/bff/v1.2/developer/scim/organization/ou_tree/detail?externalId=4976673832566876807&ouTreeId=6754318132683840690

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "1638524635493$33f22ddb-ada2-fc94-53b6-6b48ba1cbb57",
  "data": {
    "organizationName": "部门12",
    "externalId": "4976673832566876807",
    "parentExternalId": "5874903584085219353",
    "type": "DEPARTMENT",
    "rootNode": false,
    "sortNumber": 0,
    "enabled": true,
    "description": "",
    "extendFields": {},
    "uuid": "0e5650d3a1a6368a5bb884c23a9a3ad7v8stn6k6xEF",
    "manager": [],
    "nodeType": "SELF_CREATED",
    "refOrgExternalId": null,
    "mainTree": false,
    "inRefTree": true,
    "refTreeInfo": [
      {
        "parentRefNodeId": "2782426129122542668",
        "parentRefNodeParentId": "6754318132683840690",
        "parentRefNodePath": "wceshi / 应用群组 / 钉钉 / 部门1",
        "virtualPath": "wceshi / 应用群组 / 钉钉 / 部门1 / 部门12"
      }
    ]
  }
}

5.2.1.6. 通过外部id批量获取机构列表

Path:/api/bff/v1.2/developer/scim/organization/list_by_externalids
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

externalIds

非必须

Array

组织单位的外部id列表(externalIds),查询上限为20条。

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├externalId

string

组织机构的外部id,主键

├organizationName

string

组织机构名称

├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/bff/v1.2/developer/scim/organization/list_by_externalids?externalIds=main,5151221213604955599&access_token=4616b26c-5a90-4b96-a789-73082615978e

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "1653016959220$fe930cc3-a245-2db4-60ef-cd0f17022da0",
  "data": [
    {
      "organizationName": "信息中心",
      "externalId": "5151221213604955599",
      "parentExternalId": "main",
      "type": "DEPARTMENT",
      "rootNode": false,
      "sortNumber": 0,
      "enabled": true,
      "description": "",
      "extendFields": {},
      "uuid": "84ade7e0fac2f09860f0b12be0966327okxZfEsycxK",
      "manager": [],
      "nodeType": "SELF_CREATED",
      "refOrgExternalId": null
    },
    {
      "organizationName": "人事组织",
      "externalId": "main",
      "parentExternalId": "8249652021431815479",
      "type": "SELF_OU",
      "rootNode": false,
      "sortNumber": 1,
      "enabled": true,
      "description": "主数据根节点",
      "extendFields": {},
      "uuid": "a1ec4b823932038336d9e1055faf88fbWNWK14yKMcb",
      "manager": [],
      "nodeType": "MASTER_TREE_ROOT",
      "refOrgExternalId": null
    }
  ]
}

5.2.2. 账户

5.2.2.1. 获取账户信息

Path:/api/bff/v1.2/developer/scim/account/detail
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

externalId

必须

String

外部id,账户的唯一id

archived

非必须

boolean

是否离职,true:查询离职账户,false:查询普通账户,默认false。可选

applicationUuid

非必须

String

应用uuid信息,若传递,则返回IDaaS主账户在该应用下的子账户信息,可选

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├externalId

string

用户的外部id

├username

string

用户名

├displayName

string

显示名

├phoneNumber

string

手机号

├email

string

邮箱

├locked

string

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

├archived

boolean

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

├enabled

string

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

├belongs

string

描述账户所属组织机构列表

├extendFields

object

扩展字段

├applicationUsers

object[]

应用子账户列表

├─ username

string

子账户名

├─ xxx…

string

子账户扩展属性’字段值’

​注意,“xxx” 不是固定值,“xxx”代表子账户扩展属性定义的数据字典’字段值’,是动态的,请在应用群组下-> 具体群组-> 数据字典查看,”…” 代表有多个

├userBelongs

string []

所属ou的外部id

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

├─externalId

String

具体的组织外部id

├─mainOu

boolean

是否主组织

true:是,false:不是

├─extendFields

object

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

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

├─displayOrder

int

账户在所属组织机构下的排序号

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

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

请求参数错误

400

InvalidParameter.ExternalId.NotExist

例如:externalId不存在

未查找到该账户

请求地址示例: /api/bff/v1.2/developer/scim/account/detail?externalId=123456&applicationUuid=0e5650d3a1a6368a5bb884c23a9a3ad7v8stn6k6xEF

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "1654135480474$06464a81-94cf-eb7c-8938-d5cb6d742217",
  "data": {
    "externalId": "8867130358788280975",
    "username": "test11",
    "displayName": "test11",
    "phoneNumber": "180xxxxxxxx",
    "phoneRegion": "86",
    "email": null,
    "locked": false,
    "enabled": true,
    "archived": false,
    "description": "",
    "extendFields": {
      "age": ""
    },
    "userBelongs": [
      {
        "externalId": "8094330624995480237",
        "displayOrder":0,
        "extendFields": {},
        "mainOu": true
      }
    ],
    "applicationUsers": []
  }
}

5.2.2.2. 获取账户列表(旧)

若传入的查询参数ouUuid或者ouExternalId为引用节点组织外部ID,则会返回引用的人事组织节点账户列表数据

Path: /api/bff/v1.2/developer/scim/account/enterprise/list_all
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

ouUuid

非必须

String

指定具体组织机构的UUID, 可选

ouExternalId

非必须

String

指定具体组织机构的外部ID, 可选,ouUuid和ouExternalId只能存在一个

username

非必须

String

通过账户名称进行过滤, 可选

createStartDate

非必须

String

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

createEndDate

非必须

String

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

start

非必须

Number

分页开始位置,默认0

limit

非必须

Number

分页限制条数,默认20

archived

非必须

boolean

是否离职,true:查询离职账户,false:查询普通账户,默认false。可选

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

│ total

int

总数

├ refOrgExternalId

string

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

├ refOrgUuid

string

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

└─systemAccountLists

object

返回的账户列表

├─externalId

string

用户的外部id,主键

├─username

string

用户名

├─displayName

string

显示名

├─phoneNumber

string

手机号

├─email

string

邮箱

├─locked

string

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

├─archived

boolean

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

├─enabled

string

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

├─belongs

string

描述账户所属组织机构列表

├─extendFields

object

扩展字段

└─organzationsOrderList

object

账户在所属组织机构下的排序号

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

EntityNotFound

例如:组织机构123456不存在

未查找到externalId对应的OU

403

Forbidden

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

没有权限操作

请求地址示例: /api/bff/v1.2/developer/scim/account/enterprise/list_all?ouUuid=87e6a7827a3852db002b4f9236b4e08cEkEe5m1hWlF&access_token=4616b26c-5a90-4b96-a789-73082615978e

响应示例 :

 {
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "5709C39A-D53A-4D74-8765-7D763907877B",
  "data": {
    "total": 3,
    "systemAccountLists": [
      {
        "externalId": "3543180585310896590",
        "username": "developer2",
        "displayName": "开发人员3",
        "phoneNumber": "",
        "email": "test2@test.com",
        "enabled": true,
        "locked": false,
        "description": "来自应用{test-developer}的同步",
        "extendFields": {
          "test": "123456",
          "test1": "woman"
        },
        "belongs": [
          "test2",
          "test1"
        ]
      },
      {
        "externalId": "test-2",
        "username": "test-2",
        "displayName": "test-3",
        "phoneNumber": "18890900900",
        "email": "test2@test2.com",
        "enabled": false,
        "locked": false,
        "description": "123ttt",
        "extendFields": {
          "test": "t",
          "test1": "woman123"
        },
        "belongs": [
          "test2"
        ]
      },
      {
        "externalId": "test-1",
        "username": "test-1",
        "displayName": "test-1",
        "phoneNumber": "",
        "email": "tangyuehan@idsmanager.com",
        "enabled": false,
        "locked": false,
        "description": "来自应用{test-developer}的同步",
        "extendFields": {},
        "belongs": [
          "test2",
          "test1"
        ]
      }
    ],
    "refOrgExternalId": "",
    "refOrgUuid": ""
  }
}

5.2.2.3. 获取账户列表(新)

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

Path: /api/bff/v1.2/developer/scim/account/list
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

ouExternalId

非必须

String

指定具体组织机构的外部ID, 可选

createStartDate

非必须

String

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

createEndDate

非必须

String

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

start

非必须

Number

分页开始位置,默认0

limit

非必须

Number

分页限制条数,默认20

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

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禁用

├─belongs

string

描述账户所属组织机构列表

├─extendFields

object

扩展字段

├userBelongs

string []

所属ou的外部id

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

├─externalId

String

具体的组织外部id

├─mainOu

boolean

是否主组织

true:是,false:不是

├─extendFields

object

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

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

├─displayOrder

int

账户在所属组织机构下的排序号

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

EntityNotFound

例如:组织机构123456不存在

未查找到externalId对应的OU

403

Forbidden

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

没有权限操作

请求地址示例: /api/bff/v1.2/developer/scim/account/list?ouExternalId=3410295325503010222&access_token=4616b26c-5a90-4b96-a789-73082615978e

响应示例 :

{
    "success": true,
    "code": "200",
    "message": null,
    "requestId": "1676371660617$149dc1b4-a1c5-ad3d-7882-7540c7a0af81",
    "data": {
        "accounts": [
            {
                "externalId": "6287885825738008167",
                "username": "***in",
                "displayName": "***理员",
                "phoneNumber": null,
                "phoneRegion": "86",
                "email": null,
                "locked": false,
                "enabled": true,
                "archived": false,
                "description": null,
                "extendFields": {},
                "effectiveTime": null,
                "expireTime": null,
                "createTime": "2022-08-15 15:25:41",
                "updateTime": "2023-02-09 10:31:59",
                "avatarUuid": null,
                "userBelongs": [
                    {
                        "externalId": "3410295325503010222",
                        "displayOrder": 0,
                        "extendFields": {},
                        "mainOu": true
                    }
                ],
                "applicationUsers": []
            }
        ],
        "total": 1,
        "refOrgExternalId": null
    }
}

5.2.2.4. 获取账户在根组织机构下的详情

Path: /api/bff/v1.2/developer/scim/account/ou_tree/detail
Method: GET

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

externalId

必须

String

外部id,账户的唯一id

ouTreeId

必须

String

根组织单位的外部id(externalId)。

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├externalId

string

用户的外部id,主键

├username

string

用户名

├displayName

string

显示名

├phoneNumber

string

手机号

├email

string

邮箱

├locked

string

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

├enabled

string

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

├userBelongs

string []

所属ou的外部id

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

├─externalId

String

具体的组织外部id

├─mainOu

boolean

是否主组织

true:是,false:不是

├─extendFields

object

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

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

├─displayOrder

int

账户在所属组织机构下的排序号

├extendFields

object

扩展字段

├refOrgExternalId

string

引用人事节点外部ID

当nodeType为引用主树类型时,该ID代表当前节点引用的人事节点ID

├mainTree

boolean

查询的ouTreeId组织是否是人事组织节点

├inRefTree

boolean

查询的账户是否在应用群组树下被引用

└refTreeInfo

object

应用群组下引用树节点详情

账户所属父级组织被引用时返回该节点在引用树中的详情

├parentRefNodeId

string

引用节点的ID

├parentRefNodeParentId

string

引用节点的上级ID

├parentRefNodePath

string

引用节点的完整路径

├virtualPath

string

当前账户的路径

└parentNodeId

string

当前账户上级OU的ID

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

EntityNotFound

例如:组织机构123456不存在

未查找到externalId对应的OU

403

Forbidden

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

没有权限操作

请求地址示例: /api/bff/v1.2/developer/scim/account/ou_tree/detail?externalId=3623477547857298846&ouTreeId=6754318132683840690

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "1676371845284$ef0d823b-6c50-024a-47ee-4aeaba79623d",
  "data": {
    "externalId": "6287885825738008167",
    "username": "***in",
    "displayName": "***理员",
    "phoneNumber": null,
    "phoneRegion": "86",
    "email": null,
    "locked": false,
    "enabled": true,
    "archived": false,
    "description": null,
    "extendFields": {},
    "effectiveTime": null,
    "expireTime": null,
    "createTime": "2022-08-15 15:25:41",
    "updateTime": "2023-02-09 10:31:59",
    "avatarUuid": null,
    "userBelongs": [
      {
        "externalId": "main",
        "displayOrder": 0,
        "extendFields": {},
        "mainOu": false,
      }
    ],
    "applicationUsers": [],
    "mainTree": true,
    "inRefTree": false,
    "refTreeInfo": []
  }
}

5.2.2.5. 通过外部id等条件批量获取用户信息列表

Path: /api/bff/v1.2/developer/scim/account/load_by_externalIds
Method: GET/POST

Headers

参数名称

参数值

是否必须

示例

备注

Authorization

Bearer {access_token}

Query

参数名

是否必须

类型

备注

externalIds

非必须

Array

账户的外部id集合(externalIds),查询上限为50条。

email

非必须

String

邮箱(不支持模糊查询)。

phone

非必须

String

手机号(不支持模糊查询)。

displayName

非必须

String

显示名(支持使用前缀模糊查询)。

hasIneffective

非必须

boolean

是否查询未生效数据,默认false

start

非必须

Number

分页开始位置,默认0

limit

非必须

Number

分页限制条数,默认20

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

└─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禁用

├─belongs

string

描述账户所属组织机构列表

├─extendFields

object

扩展字段

├userBelongs

string []

所属ou的外部id

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

├─externalId

String

具体的组织外部id

├─mainOu

boolean

是否主组织

true:是,false:不是

├─extendFields

object

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

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

├─displayOrder

int

账户在所属组织机构下的排序号

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

EntityNotFound

例如:组织机构123456不存在

未查找到externalId对应的OU

403

Forbidden

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

没有权限操作

请求地址示例: /api/bff/v1.2/developer/scim/account/load_by_externalIds?externalIds=7278996792421980908,6786131135298859160&phone=18398600000&displayName=test_zg_122&email=test_zg_122@gmail.com&access_token=4616b26c-5a90-4b96-a789-73082615978e

响应示例 :

 {
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "1693473726490$52ec38eb-1105-115b-9842-60638fc666cf",
  "data": {
    "accounts": [
      {
        "externalId": "7278996792421980908",
        "username": "test***",
        "displayName": "***",
        "phoneNumber": null,
        "phoneRegion": "86",
        "email": null,
        "locked": false,
        "enabled": true,
        "archived": false,
        "description": "",
        "extendFields": {},
        "effectiveTime": null,
        "expireTime": "2116-12-31 23:59:59",
        "createTime": "2023-08-24 18:03:46",
        "updateTime": "2023-08-24 18:03:46",
        "avatarUuid": null,
        "belongs": [],
        "organzationsOrderList": [
          {
            "externalId": "4564325328869962519",
            "displayOrder": 0
          }
        ],
        "userBelongs": [
          {
            "belong": "4564325328869962519",
            "externalId": "4564325328869962519",
            "displayOrder": 0,
            "extendFields": {},
            "mainOu": true,
            "belongOuUuid": null
          }
        ],
        "applicationUsers": []
      },
      {
        "externalId": "6786131135298859160",
        "username": "test***",
        "displayName": "***",
        "phoneNumber": null,
        "phoneRegion": "86",
        "email": null,
        "locked": false,
        "enabled": true,
        "archived": false,
        "description": "",
        "extendFields": {},
        "effectiveTime": null,
        "expireTime": "2116-12-31 23:59:59",
        "createTime": "2023-03-01 14:10:11",
        "updateTime": "2023-08-24 10:41:10",
        "avatarUuid": null,
        "belongs": [],
        "organzationsOrderList": [
          {
            "externalId": "4564325328869962519",
            "displayOrder": 0
          }
        ],
        "userBelongs": [ {
            "belong": "4564325328869962519",
            "externalId": "4564325328869962519",
            "displayOrder": 0,
            "extendFields": {},
            "mainOu": true,
            "belongOuUuid": null
          }
        ],
        "applicationUsers": []
      }
    ],
    "total": 2,
    "refOrgExternalId": null
  }
}

5.2.3. 组

5.2.3.1. 获取组织机构下的组列表

Path:/api/bff/v1.2/developer/scim/group/list
Method: GET
Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

Body

名称

类型

是否必须

备注

其他信息

ouExternalId

string

必须

所属组织机构(OU)的外部ID

start

Number

非必须

分页开始位置,默认0

limit

Number

非必须

分页限制条数,默认20

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├─total

int

总数

├─list

object[]

├──externalId

String ​

账户组id,主键

├──displayName

String ​

组显示名称

├──description

String ​

描述信息

├──extendFields

object

自定义扩展的字段

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:组名称不能为空

请求参数错误

400

EntityNotFound

例如:OU不存在

组隶属的OU不存在

403

Forbidden

例如:没有权限操作该组

没有权限操作该组

请求地址示例:{{idaas_host}}/api/bff/v1.2/developer/scim/group/list?ouExternalId=5613281506756426797&limit=2&start=0

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "1671696298074$2c60e4e5-ec1a-5237-c84c-0943f6e2c557",
  "data": {
    "total": 4,
    "list": [
      {
        "externalId": "3908431160027359986",
        "displayName": "组1",
        "description": "",
        "extendFields": {}
      },
      {
        "externalId": "5613281506756426797",
        "displayName": "成都组",
        "description": "",
        "extendFields": {
          "212": "12"
        }
      }
    ]
  }
}

img.png

5.2.3.2. 获取组成员

Path:/api/bff/v1.2/developer/scim/group/group_members
Method: GET
Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

Authorization

Bearer {access_token}

Body

名称

类型

是否必须

备注

其他信息

externalId

string

必须

外部id,组的唯一id

start

Number

非必须

分页开始位置,默认0

limit

Number

非必须

分页限制条数,默认20

返回数据

名称

类型

备注

其他信息

success

boolean

是否成功

code

string

成功为200

message

null

错误信息

success为false取值提示给用户

requestId

string

无须关注

data

object

├─total

int

总数

├─list

object[]

├──accountExternalId

String ​

账户外部ID

├──username

String ​

账户名

├──displayName

String ​

用户的显示名称

错误码

HttpCode(请求状态码)

code(错误码)

message(错误信息)

备注

200

200

null

请求成功

400

InvalidParameter

例如:外部id(externalId)无效

请求参数错误

400

EntityNotFound

例如:组不存在

组隶属的OU不存在

403

Forbidden

例如:没有权限操作该组

没有权限操作该组

请求地址示例: {{idaas_host}}/api/bff/v1.2/developer/scim/group/group_members?externalId=5613281506756426797&limit=2&start=0

响应示例 :

{
  "success": true,
  "code": "200",
  "message": null,
  "requestId": "1670922993003$fc25eb21-0a9a-3805-fbf4-bb54ef61938f",
  "data": {
    "total": 11,
    "list": [
      {
        "accountExternalId": "2142057301007169643",
        "username": "zhangdh1111",
        "displayName": "zhangdh1111"
      },
      {
        "accountExternalId": "111111111111195",
        "username": "developer295",
        "displayName": "开发人员395"
      }
    ]
  }
}

img.png