笔者最近遇到一个和 AI 问数系统集成帆软报表的场景,需要跟客户讲明白集成原理,就稍微研究了下。帆软的“用户名加密单点登录(SSO)”可以抓住一个核心:用一把特殊的锁,把当前登录的用户名安全地送到帆软去。下面从两个常见疑问出发,拆解整个集成思路。

01 | 两边都要有同名用户

很多人会问:AI问数系统也需要有对应的用户吗?答案是肯定的,而且是两边都要有。

AI问数系统侧必须有登录用户。比如在 AI问数系统里用 admin 账号登录,系统先要知道当前操作的人是谁,才能把这个名字拿去加密。如果连是谁在看页面都不知道,集成无从谈起。

帆软(FineReport)侧也必须有同名用户。当 AI问数系统把加密后的密文(ssoToken)通过网址传给帆软后,帆软解密出来发现是 admin,此时帆软后台必须也存在一个叫 admin 的账号。帆软会去自己的用户库里核对,确认确有其人再放行。如果帆软里没有这个用户,就会报错拒绝登录。

flowchart LR A["AI问数系统
登录用户 admin"] --> B["帆软后台
同名用户 admin"] B --> C{"用户名是否一致"} C -- 一致 --> D["放行并展示报表"] C -- 不存在 --> E["报错拒绝登录"]

02 | 用户名加密的集成思路

整个集成过程,像是一场“写信、加密、开箱”的三步走。

① 准备工作:拿钥匙

帆软侧由管理员在后台开启加密插件,生成一个 RSA 公钥(Public Key),并把这个公钥交给你。AI问数系统侧则把这个公钥配在系统后台的密钥管理里。

② 用户登录:确定是谁

用户打开 AI问数系统,输入账号密码登录,例如登录用户是 admin。系统后台的程序此时拿到了这个用户名。

③ 加密与拼接 URL

当用户点击某个报表时,AI问数系统的后端代码开始工作:先用代码读取那串 RSA 公钥,把用户名 admin 加密成一长串乱码(密文);再把乱码进行 URL 编码,防止特殊符号破坏网址结构;最后把编码后的密文拼接到帆软报表地址后面,形如:

http://<帆软IP>/webroot/decision/form?viewlet=xxx.frm&ssoToken=加密后的长串乱码

sequenceDiagram participant U as 用户浏览器 participant A as AI问数系统后端 participant F as 帆软服务 U->>A: 登录并点击报表 A->>A: 用 RSA 公钥加密用户名 admin A->>A: 对密文做 URL 编码 A-->>U: 返回拼接好 ssoToken 的帆软地址 U->>F: 携带 ssoToken 请求报表 F->>F: 用私钥解密 ssoToken 还原 admin F-->>U: 校验通过,直接展示报表

④ 帆软收信并放行

浏览器跳转或在网页的


原文地址: http://www.cveoy.top/t/topic/qHHJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录