知识库

Loading

0 评论 / 0 点赞 / 874 阅读  最佳实践 最后更新: 2022-09-20 作者: 飞致云 总字数: 2294

1 需求介绍

将 DataEase 嵌入第三方系统(为方便描述,本文将第三方系统统一称为 A 系统)

要求将 DataEase 作为 A 系统中的某个菜单项,菜单点击后在页面嵌套打开 DataEase 页面并操作。效果示意图如下:
image-1663053583337

2 方案概述

DataEase 是支持使用 iframe 嵌套到第三方系统中的,关键问题在于如何统一两个系统的用户认证,即:用户在 A 系统中打开 DataEase 系统时,无需再次登录,DataEase 自动登入 A 系统中的账户。

目前有两种方案,单点登录和模拟登录。

单点登录指:使用支持 OIDC 或 CAS 协议的系统作为统一登录平台,A 系统与 DataEase 全部对接同一个单点平台实现只需一次登录就可访问两个系统,即 单点登录(SingleSignOn,SSO)

模拟登录指:A 系统后台请求 DataEase 的登录接口,将登录成功的 Token 写入 Cookie 中,来模拟用户登录的过程,省去用户自己输入密码登录的过程。

使用单点登录方式是 DataEase 原生支持的用户登录集成方式,仅需修改前端 iframe 嵌套。使用单点登录方式用户可使用同一个密码登录两个平台,DataEase 中不存在的用户登录时会自动创建。单点登录方式使用配置更方便,是比较推荐的方式。

但有时受限于业务系统,有些系统没有对接 SSO 系统,这时则可使用模拟登录方式,需要做一些开发,同样可以实现集成。

3 使用单点登录对接方式介绍

3.1 流程描述

目前 DataEase 支持 OIDC、CAS 协议

通过单点登录方案集成嵌入 DataEase 方案整体流程如下:
image-1663053638579

前置条件

A 系统与 DataEase 均已对接同一个单点登录系统

  1. 用户通过单点登录系统登入 A 系统

  2. 用户点击菜单项,访问 DataEase 系统

  3. DataEase 通过单点登录系统获取到当前登录用户自动登入并重定向至 DataEase 首页

  4. 用户在 A 系统 WEB 页面通过 iframe 嵌套使用 DataEase 系统功能。

3.2 配置指南

  1. 配置 OIDC 或 CAS
    image-1663053678370

  2. 默认登陆方式修改为 OIDC
    image-1663053701238

  3. 单点登录配置好后,在 A 系统中使用 iframe 地址访问 DataEase 地址即可

4 模拟登录方案介绍

4.1 流程描述

image-1663053727988

  1. 用户登录 A 系统

  2. 用户在 A 系统中通过 iframe 访问 A 系统的模拟登录接口

  3. A 系统根据已登录的用户信息请求 DataEase 的用户查询接口,获取到 DataEase 系统中对应的用户 ID

  4. A 系统根据用户 ID 调用 DataEase 的用户密码修改接口,修改用户密码

  5. A 系统调用 DataEase 的模拟登录接口获取 Token

  6. A 系统将 Token 写入 Cookie 中,并重定向至 DataEase 页面(当浏览器 Cookie 中存在 Token 时访问 DataEase 便不再需要认证)

  7. 用户在 A 系统 WEB 页面通过 iframe 嵌套使用 DataEase 系统功能。

4.2 开发指南

此方案需要 A 系统提供一个模拟登录接口,并且在登录前修改 DataEase 中的用户密码以保证模拟登录成功。

由于模拟登陆是使用 Cookie 来实现,所以需要保证 A 系统与 DataEase 处于同一个根域名下。

4.2.1 DataEase 提供的接口

  1. API 认证方式

DataEase 接口调用时需要在请求 Header 中传递 accessKey 和 signature
image-1663053766971

其中 accessKey 为下图中的 Access Key 的值,Access Key 和 Secret Key 获取方式如下图所示。
image-1663053793120

signature 为 Access Key 和 Secrent Key 拼接后使用 AES 加密计算出的结果,计算方式如下
image-1663053864033

提示

图示代码可参考此链接:DataEaseLoginController.java at main · liuboF2c/dataease-login-adpter-demo (github.com)

  1. 用户查询接口

由于修改用户密码接口需要使用用户 ID,我们需要先使用用户查询接口获取用户 ID。
image-1663053878396

其中 operator 的取值可参考源码,比如 “eq” 代表 SQL 中的 “=”
image-1663053890028

field 取值参考数据库中 sys_user 表的字段名,如 username、nick_name 等
image-1663053934585

  1. 修改用户密码接口

通过用户密码修改接口,修改用户密码。此处请求参数中的 userId 为上一步返回值中获取到的 userId。
image-1663053950603

  1. 登录接口

使用登录接口可获取到 Token,将 Token 放入浏览器 Cookie 中后访问 DataEase 便不再需要登录认证
image-1663053970126

登录接口中的 password 和 username 均需使用 RSA 加密,加密秘钥取自 DataEase 源码中 application.properties 文件
image-1663053984789

加密方式如下
image-1663054065031

提示

图示代码可参考此链接:DataEaseLoginController.java at main · liuboF2c/dataease-login-adpter-demo (github.com)

4.2.2 嵌套对接示例代码

基于以上接口,我们就可以实现将 DataEase 嵌入第三方系统。

我写了一个 demo 示例(下称 demo 系统)供大家参考:DataEase 模拟登录对接(github.com)

使用此示例需注意以下事项:

  1. demo 系统必须与 DataEase 处于同一域名下。

你可以通过修改本地 hosts 文件来实现。比如我测试时在 /etc/hosts 中添加了如下映射:

hosts
127.0.0.1 localhost.fit2cloud.com
10.2.3.23 edu.fit2cloud.com
  1. 启动前,需要修改 demo 系统代码,填充 DataEaseLoginController 中的变量值
    image-1663054093826

  2. 页面嵌套参考如下代码,ifreame 中的 src 配置为后端的模拟登陆地址
    image-1663054103108

  3. 在 A 系统登出时,需清除 Cookie,否则 DataEase 中的用户不会退出登录
    image-1663054111827

  4. 退出登录代码
    image-1663054120441

文章目录
其他资源