孤儿账户数据处理

最后更新:2022-01-27

1. 用户故事

孤儿账户:应用系统中子账户没有关联IDP主账户, 找不到背后的真实用户。 作为IDaaS的管理员,能够查询到对接应用系统中存在的孤儿账户,然后针对孤儿账户可以选择主账户关联和删除操作。保证应用系统的访问安全。

2. 如何确定孤儿账户

以下是在IDaaS系统中如何确定某个业务系统中在IDaaS中的孤儿账户流程

2.1. 拉取HR的账户

机构及组 -> 人事组织 -> 导入 -> 添加拉取任务 处创建一个从HR拉取的一个导入任务(该任务实际上是connector的一个普通同步任务)。如何创建拉取任务,并拉取应用数据可以查看 项目数据初始化场景

2.2. 拉取下游应用账户的数据

机构及组 -> 应用群组 -> [具体应用群组] -> 应用账户拉取 -> 添加拉取任务 处创建从connector上配置的一个孤儿账户拉取同步任务
在创建完成任务后,需要点击任务名称旁边的 图标(查看任务详情及状态) -> 查看任务 跳转到,修改同步任务的属性,改为拉取孤儿账户模式,并填入idp中任务的uuid。 创建下游应用账户拉取任务1
创建下游应用账户拉取任务2
创建下游应用账户拉取任务3
创建下游应用账户拉取任务4

接下来需要在拉取前配置一个孤儿账户匹配的对比规则

不同的应用群组需要配置不同的孤儿账户匹配规则

创建孤儿账户匹配规则1
创建孤儿账户匹配规则2

2.3. 进行数据比对处理

若该任务是一个孤儿账户任务(取决于Connector任务配置上的属性)那么在应用群组的任务拉取的时候,IDaaS可能产生孤儿账户【主账户不存在IDaaS,但子账户有】 也可能会自动补全该应用群组关联应用的主子账户

3. 数据对比处理逻辑

3.1. connector调用IDaaS动接收业务账户接口

IDaaS会提供一个业务账户推送接口: /api/bff/v1.2/developer/scim/slave_account/receive
接口请求方法:POST
请求体:(和SCIM主数据创建几乎一样)

{
    "appGroupTaskUuid": "应用群组任务uuid",
    "externalId": "123467",
    "userName": "user111",
    "displayName": "张三",
    "email": "user111@test.com",
    "phoneNumber": "18100000000",
    "phoneRegion": "+86",
    "enabled": true,
    "locked": true,
    "description": "描述",
    "expireTime": "2021-10-19 15:01",
    "userBelongs": [
        {
            "belong": "ou1111",
            "mainOu": true
        }
    ],
    "organzationsOrderList": [
        {
            "externalId": "ou1111",
            "displayOrder": 1
        }
    ],
    "extendFields": {
        "key1": "value1",
        "key2": "value2"
    }
}


3.2. 孤儿账户匹配规则

这个也是主子账户产生的时候的判断规则,主要有三个字段

表名:orphan_account_match_rule

字段名

类型

含义

application_group_uuid

String

应用群组uuid

master_account_field

String

主账户匹配字段
匹配时,使用主账户表:ud_account表的字段
主账户范围:是应用群组下应用对应下授权的主账户

slave_account_field

String

子账户匹配字段
子账户表字段来源业务账户表 slave_account
字段名称全部参考slave_account表的核心字段

match_template

String

匹配模板,枚举类型
目前仅支持相等(EQ)

template_extra_value

String

补充除简单的可以通过模板来运算时额外需要的值
​如 匹配规则最终是主字段+
固定后缀值(“@test.com”) = 业务系统的字段
则match_template 为 主字段组合MASTER_CONTACT_FIXED_VALUE template_extra_value = “@test.com”


3.3. 业务账户表

表名 slave_account
核心字段如下
说明:此业务账户表是以应用维度来区分唯一性的

字段名

类型

含义

application_uuid

String

应用uuid

external_id

String

外部id

username

String

用户名/登陆名

display_name

String

显示名称

email

String

邮箱

phone_number

String

电话号码

phone_region

String

国家区号

enabled

Boolean

启用/禁用状态

locked

Boolean

锁定状态

description

String

描述

expire_time

Date

过期时间

user_belongs

​Array

用户在所属组织下的信息

– ou_external_id

String

所属组织id

– main_ou

Boolean

是否是主组织

– display_order

String

所属组织id

extend_fields

Map<String,String>

账户的扩展属性

3.4. 拉取时序图


3.5. 孤儿账户匹配处理流程图

注意,生成主子账户时,都取用户名称字段