代码改变世界

理解帆软报表 SSO 的集成

2026-10-12 07:02  AlfredZhao  阅读(119)  评论(0)    收藏  举报

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

01 | 两边都要有同名用户

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

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

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

flowchart LR A["AI问数系统<br/>登录用户 admin"] --> B["帆软后台<br/>同名用户 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: 校验通过,直接展示报表

④ 帆软收信并放行

浏览器跳转或在网页的 <iframe> 中加载这个网址。帆软收到请求后,用它自己藏好的私钥解密 ssoToken,还原出 admin。帆软确认用户合法,直接展现报表,全程不需要用户在帆软输入密码。

03 | 帆软的用户名加密是通用方案吗?

这套“用户名加密 + ssoToken 传参”的思路,是帆软单点登录里比较常见的一种做法,但它并不是唯一方案,也不是开箱即用的默认能力,需要满足两个前提:

  • 帆软侧要启用对应的加密插件:由管理员在帆软后台开启,并生成 RSA 公钥交给对接方。没有这一步,帆软不会去解密 ssoToken。
  • 对接方要按约定加密:拿到公钥后,用 RSA 对用户名加密,再按帆软约定的参数名(如 ssoToken)拼进 URL。

所以它更像是一种“约定好的通用机制”,而不是所有帆软部署都默认打开的开关。是否可用、参数名叫什么、用哪种加密方式,取决于帆软后台实际启用的插件和配置。

简单配置指引

如果你还不清楚怎么配,可以按下面几步在帆软后台确认:

  1. 确认插件:登录帆软决策平台,进入插件管理,确认已安装并启用用户名加密单点登录相关插件。
  2. 生成密钥:在插件配置里生成 RSA 公钥与私钥,私钥留在帆软侧,公钥提供给对接方。
  3. 配置对接方:把公钥配置到 AI问数系统的密钥管理里,用于加密用户名。
  4. 联调验证:用一个帆软侧已存在的同名账号发起跳转,确认能免密进入报表;若报错,优先检查两边用户名是否一致、公钥是否匹配。

具体菜单位置和参数名会随帆软版本与插件不同而变化,以你实际后台看到的配置项为准。

04 | 一句话总结

AI问数系统知道你是谁,用帆软给的公钥把名字加密,塞进网址传给帆软,帆软解密放行。

关注我,和AI一起成长~