DataEase V2 版本如何与第三方系统进行用户、组织数据的同步对接
场景:当您希望将自有系统中的组织和用户同步到 DataEase 中时,可以参考此方案进行处理,对接流程如下图所示。
说明:中间件部分需自行开发,中间件负责进行相关数据的处理以及逻辑对应关系的存储,DataEase 只提供接口文档中已有的接口,调用 DataEase 的接口需要使用企业版,DataEase 的 API 接口文档入口如下图所示。
当中间件收到接口请求时,需要将待同步的组织或用户信息存储到中间表,中间表用于记录三方系统的组织、用户数据与 DataEase 中的组织、用户数据的对应关系,这样做的好处是无需改动 DataEase 的源码,方便后续的维护升级。
接口说明:
1、获取 tocken
DataEase 的登陆页面使用的也是此接口,可以在浏览器中通过 F12 控制台查看接口请求进行参考。
这个接口的参数是加密后的用户名和密码,可以直接使用加密后的 admin 的用户和密码,也可以使用动态的用户密码进行加密处理,加密使用的是 RSA 算法,可参考以下步骤进行处理:
(1)获取 dekey
关于如何获取 dekey,可以参考下面接口中的逻辑进行获取(本质上是获取数据库中的密钥后进行处理,得到了dekey)。
密钥存储在表 core_rsa 中,可以进入 DataEase 的数据库查询表中的数据,获取密钥(PublicKey,AesKey)。
获取密钥后对密钥进行处理(详细逻辑请克隆 DataEase 开源代码后进行查看,项目地址:https://github.com/dataease/dataease )。
public static String publicKey() {
String publicKey = ”#PublicKey“;
String aesKey = ”#AesKey“;
String pk = ascEncrypt(publicKey, aesKey).replaceAll("[\\s*\t\n\r]", "");
String separator = Base64Utils.encodeToUrlSafeString(PK_SEPARATOR.getBytes(StandardCharsets.UTF_8));
return pk + separator + aesKey;
}
(2)对用户名、密码进行加密
const name = state.loginForm.username.trim()
const pwd = state.loginForm.password
// 对用户名密码进行加密,name 用户名,pwd 密码
const param = { name: rsaEncryp(name), pwd: rsaEncryp(pwd) }
相关代码地址:https://github.com/dataease/dataease/blob/dev-v2/core/core-frontend/src/utils/encryption.ts
// 加密方法 rsaEncryp
export const rsaEncryp = word => {
const separator = Base64.encodeURI(rsaKey) + '='
// dekey 需要获取
const dekey = “#替换为第一步获取到的dekey”
const keyArray = dekey.split(separator)
const k1 = keyArray[0]
const k2 = keyArray[1]
const pk = aesDecrypt(k1, k2)
crypt.setKey(pk)
return crypt.encrypt(word)
}
(3)调用登陆接口进行登陆
接口地址:/de2api/login/localLogin
参数:用户名、密码,即上一步中加密后的用户名、密码
示例:以下是通过 Postman 调用登陆接口的实际测试结果,调用成功后响应体中会返回 token 信息。
2、创建组织
3、创建用户(创建用户前需切换到指定的组织下,新创建的用户会自动创建到当前所在的组织下)