DataEase V2 嵌入式模拟登录集成方案


飞致云 发布于 2024-09-05 / 220 阅读 / 0 评论 /
1 使用场景举例 将 DataEase 嵌入第三方系统(为方便描述,本文将第三方系统统一称为 A 系统) 场景一:将 DataEase 作为 A 系统中的某个菜单项或子模块,菜单点击后在页面嵌套打开 DataEase 页面并操作。 场景二:将 DataEase 制作好的仪表板/大屏的预览链接嵌入 A

1 使用场景举例

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

场景一:将 DataEase 作为 A 系统中的某个菜单项或子模块,菜单点击后在页面嵌套打开 DataEase 页面并操作。

场景二:将 DataEase 制作好的仪表板/大屏的预览链接嵌入 A 系统,点击可免登陆访问并对访问用户实现权限控制。

2 方案概述

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

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

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

模拟登录指:A 系统后台请求 DataEase 的登录接口,将登录成功的 Token 写入 LocalStorage 中,来模拟用户登录的过程,省去用户自己输入密码登录的过程。模拟登录又分同域和跨域两种方式,文章中会详细介绍。

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

但有时受限于实际情况,比如没有搭建 SSO 系统,这时则可使用模拟登录方式,需要做一些开发,同样可以实现集成。

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

3.1 流程描述

目前 DataEase 支持 OIDC、CAS 协议

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

前置条件

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

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

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

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

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

3.2 配置指南

3.2.1 配置单点登陆

DataEase 支持多种单点登录协议的对接,包括 CAS、OIDC、LDAP 等。

参考文档:认证设置

对接 CAS 参考知识库:DataEase V2 对接 CAS 实现单点登陆

对接 OIDC 参考知识库:DataEase V2 对接 OIDC 单点登录

对接 LDAP 参考知识库:【安装部署】DataEase 集成对接 OpenLDAP 实现用户统一管理

3.2.2 默认登陆方式修改

配置单点登录后需配置默认登陆方式,参考文档:支持配置默认登录方式

对接单点登录协议后,可实现与业务系统的免登录跳转。登陆对接单点协议的业务系统后可点击跳转或打开 DataEase 的页面,跳转后可自动在 DataEase 中创建对应的用户账号,且自动为用户分配默认的组织和角色权限,默认的组织和角色支持配置,参考文档:基础设置

若不希望自动创建第三方用户,也可通过批量导入的方式,预先创建好对应的用户,可参考文档进行导入:批量导入用户

3.2.3 嵌入 

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

4 模拟登录方案介绍

DataEase 的认证 token 是放在 LocalStorage 里面的,调用 /de2api/login/localLogin 接口可以拿到 Token 信息。关键问题在于怎么将 DataEase 的认证信息放到 LocalStorage 里面去。根据处理方案的不同,分为同域模拟登陆和跨域模拟登陆。

同域模拟登陆是指 A 系统与 DataEase 在同一域名下。比如DataEase访问地址为:a.fit2cloud.com/dataease,A系统的访问地址为:a.fit2cloud.com/aSystem,它们使用的域名都是 a.fit2cloud.com。这种情况下,A 系统可以将 user.token 信息存放在 a.fit2cloud.com 域名的 Local storage 下,DataEase 也可以获取 a.fit2cloud.com 域名下的 Local storage,以此实现模拟登录认证。

跨域模拟登陆是指 A 系统与 DataEase 不在同一域名下。这种情况下,A 系统携带 Token 信息访问 DataEase 系统(只是通过特定的路径),Nginx 通过特定路径拦截到请求重定向至自定义的 HTML 页面,然后通过 HTML 页面中的 JS 代码将 Token 信息写入到 LocalStorage 中去,然后再跳转到 DataEase 正常的访问路径,至此完成模拟登录。

4.1 同域模拟登陆

4.1.1 流程描述

1. 用户登录 A 系统

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

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

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

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

6. A 系统将 Token 信息写入当前域名的 LocalStorage 下,然后再跳转到 DataEase 正常的访问路径

4.1.2 开发指南

此方案需要 A 系统提供一个模拟登录接口,模拟登陆接口中获取用户 Token(如果需要使用动态的用户进行登陆认证,则需要调用获取用户接口和修改用户密码接口来保证模拟登录成功),前端将获取到的token写入当前域名的LocalStorage下,,然后再跳转到 DataEase 正常的访问路径,至此完成模拟登录。

参考示例代码:dataease-login-adpter-demo

4.2 跨域模拟登陆

4.2.1 流程描述

1. 用户登录 A 系统

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

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

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

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

6. A 系统携带 Token 信息访问 DataEase 系统(只是通过特定的路径)

7. Nginx 通过特定路径拦截到请求重定向至自定义的 HTML 页面,然后通过 HTML 页面中的 JS 代码将 Token 信息写入到 LocalStorage 中去,然后再跳转到 DataEase 正常的访问路径

4.2.2 开发指南

此方案需要 A 系统提供一个模拟登录接口,模拟登陆接口中获取用户 Token,并返回重定向地址,重定向地址携带 Token 信息重定向到特定路径(如果需要使用动态的用户进行登陆认证,则需要调用获取用户接口和修改用户密码接口来保证模拟登录成功)。

Nginx 通过特定路径拦截到请求重定向至自定义的 HTML 页面,然后通过 HTML 页面中的 JS 代码将 Token 信息写入到 LocalStorage 中去,然后再跳转到 DataEase 正常的访问路径,至此完成模拟登录。

参考示例代码:dataease-login-adpter-demo

4.2.3 Nginx 配置

Nginx 还需要配置一个静态网页,用于设值 LocalStorage 用。Nginx 配置参考如下:

location / {
    proxy_pass <DataEase服务器地址>
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
 
location /sso {
    # 请将此配置 [./src/main/resources/templates] 修改为 login-template.html 存放路径
    # login-template.html 取自示例代码的 src/main/resources/templates/ 目录
    # 将其与 nginx 放置于同一服务器,然后在 nginx 配置文件中将此配置项填写为 login-template.html 的所在目录;
    alias   ./src/main/resources/templates
    index   login-template.html;
}



是否对你有帮助?