1. 概述编辑
1.1 版本
报表服务器版本 | 插件版本 |
---|---|
10.0&11.0 | v1.0.0 |
1.2 应用场景
支持在 Oauth2 认证标准下,进行单点配置,集成FineReport/FineBI平台
支持配置自定义的单点逻辑(参数加解密、数据请求等)
支持独立配置PC端和移动端(H5预览)单点逻辑(PC端和移动端可配置不同的单点登录策略)
1.3 注意事项
针对移动端配置单点逻辑,需提前安装HTML5插件,方可正常使用
v11版本插件安装支持热部署;v10版本插件安装、更新后需要重启报表工程;v11和v10配置修改都无需重启
2. 插件介绍编辑
2.1 插件安装
点击下载插件:类Oauth2单点插件
设计器插件安装方法请参见:设计器插件管理
服务器安装插件方法请参见:服务器插件管理
2.2 页面简介
插件安装成功后,登录数据决策系统,点击「管理系统>单点集成」,即可进入功能界面,如下图所示:
选择PC端访问或者移动端访问,开启单点配置(两者配置页面流程相同,后续以PC端访问为例,进行说明)
有Oauth2和自定义认证两种模式,可供选择,进行配置
3. 认证模式编辑
3.1 自定义认证模式
3.1.1 基本配置
点击自定义认证模式,开启单点功能,如下图所示:(Oauth2认证中,基本配置相同)
该配置项功能说明如下表:
序号 | 配置名称 | 配置效果 | 补充说明 |
---|---|---|---|
1 | 报表服务器地址 | 帆软平台的访问地址,示例: http://localhost:8075/webroot/decision | 用于一些后台无法正确获取到平台地址的转发场景 |
2 | 保留平台登录页 | 是否保留 /decision/login登录页 | 开启:访问/login地址,会打开帆软默认登录地址 关闭:屏蔽/login地址,未登录时,按照配置认证逻辑处理;已登录时,会跳转到 /decision 页面 |
3 | 平台登出地址 | 平台登出地址,可用于单点登出,示例: http://www.baidu.com | 平台登出后会跳转到该地址 |
3.1.2 新建步骤
点击新建步骤,显示三种方式:参数获取,重定向和数据请求。三种方式可以自由排列组合,进行配置,最终目的是获取当前帆软平台中的用户名【fr_login_name】
1、参数获取
点击添加后,需配置参数名和参数名。该方式用于参数的获取,包括从URL query中获取,或者我们预定义的一些常量参数等。
同时,在前置步骤中定义的参数名,在后置步骤中可以获取到对应的参数值。
如下图所示,实现参数传递的效果,等同于固定以用户名demo进行登录。
请求结果配置示例:
{
"status": "1",
"message": "token exist",
"data": {
"accountId": "10087897",
"name": "XXX",
"token": "500xxxxxx"
}
}
针对更复杂结构的返回结果,插件提供了 JSONPATH 的写法,对结果进行解析,参考如下示例:
{
"store": {
"book": [{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
}, {
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}, {
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
}, {
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
具体配置的参数值,可参考JsonPath的写法;如下表
2、重定向
该方式针对客户自身有认证平台,登录帆软决策平台时,需要先跳转到统一的认证平台进行登录的场景。
登录认证平台后,再跳转回决策平台,并携带标识参数,如code等。基于code解析出当前登录的用户名,这种方式实际上是类Oauth2 认证模式。
参数说明:
【重定向地址】:需要跳转到的地址,这时候一般把原来访问的报表连接当做一个参数拼接到URL后面,这时候就会引出一个固定参数 【requestURL】,它可以获取到跳转前访问的链接地址
【Token参数名】:标识客户的认证平台登录后,回调时携带的标识参数的参数名,例如 token/code 之类
3、数据请求
该方式实际上是模拟一次请求的动作,需配置请求类型、请求地址、请求头、请求体,可按照客户提供的接口文档进行配置。
其中请求地址、请求头、请求体的参数值支持公式写法,也可以从前置步骤中获取定义好的参数,参考【参数获取】步骤中的截图
3.2 Oauth2认证模式
当前最常用的授权码认证的方式,其实可以理解为一种约定俗成的自定义认证模式。配置逻辑固定,可按照客户提供的文档进行配置
3.2.1 基本配置
参考3.1.1节。如图所示
3.2.2 其他配置
1、初始参数
配置初始化参数,如client_id/sercret等,认证接口地址指的是:未登录帆软决策平台时,跳转到客户Oauth2.0认证平台的地址
示例: ${"http://ip:port/oauth/login?redirect=" + URLEncode(requestURL)+ "&client_id=" + client_id + "&scope=" + scope}
2、令牌申请
基于登录认证平台后携带的【Token Name】:code,请求客户接口获取accessToken
3、用户信息
基于accessToken,获取登录用户名进行登录
4、初始参数名映射表:
配置项 | 参数名 |
---|---|
Client ID | ${client_id} |
Client Secret | ${client_secret} |
Grant Type | ${grant_type} |
Scope | ${scope} |
State | ${state} |
Token Name | 实际填入的值,示例:填入 code,在下面可使用 ${code} 来获取该参数值 |
4. 示例说明编辑
4.1 根据URL中携带 &user=Anna 进行单点登录
本示例应用了自定义配置中的【参数获取】方式,但此种方式由于是采用用户名的明文进行登录,所以安全性较低
4.1.1 配置
参数名配置为fr_login_name,参数值为Anna(帆软决策平台的用户)。如下图
4.1.2 效果
点击右上角的保存,登录网址:http://localhost:8075/webroot/decision?user=Anna。此时不需要输入账号、密码,直接进入Anna的决策平台界面
如果想要动态获取URL中传递的参数,可将参数值配置为${user}。这样就可以通过访问http://localhost:8075/webroot/decision?user=xxx,xxx为决策平台任一用户名,来实现动态用户名登录
4.2 根据URL中携带参数需接口认证进行单点登录
本示例应用了自定义配置中的【数据请求】方式,基于JWT加密生成密文,如下图所示:
意思是:将用户名Anna,通过密钥ceshi,采用JWT标准,加密后得到密文
4.2.1 配置
在实际的业务场景中,根据客户提供的接口文档进行配置即可。该示例的配置如下图:
具体参数配置见下表:
配置项 | 内容 |
---|---|
请求地址 | POST/${"http://localhost:8075/webroot/decision/sso/test/jwt/decode/json?token=" + token} |
请求头 | 参数名:hk 参数值:hv |
请求体 | json 参数名:bk 参数值:bv 参数名:key 参数值:ceshi |
请求结果 | 参数名:fr_login_name 参数值:data |
4.2.2 效果
使用postman进行模拟,完成配置参数后,发送请求,可以看到结果中,用户名Anna被解析了出来。访问的url为:http://localhost:8075/webroot/decision/sso/test/jwt/decode/json?token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBbm5hIiwiZXhwIjo
xNjY2NjA2Njc1fQ.D3K4xzmTZK070MA7nMMveh8sLH6fB3khJnEfd-CGoS0
token后的一串参数为前文中生成的密文
4.3 Oauth2单点登录认证
4.3.1 配置
在实际的业务场景中,根据客户提供的接口文档进行配置即可。该示例的配置如下图:
初始参数:
令牌申请:
用户信息:
具体参数配置见下表:
大类 | 配置项 | 内容 |
---|---|---|
初始参数 | Client ID | ci |
Client Secret | cs | |
Token Name | code | |
Scope | sc | |
State | st | |
认证接口地址 | ${"http://localhost:8075/webroot/decision/sso/test/oauth/login?redirect=" + URLEncode(requestURL)} | |
令牌申请 | POST/${"http://localhost:8075/webroot/decision/sso/test/oauth/access?code=" + code} | |
请求头 | 无 | |
请求体 | x-www-form-urlencoded | |
请求结果 | 参数名:access 参数值:data.access | |
用户信息 | 请求地址 | POST/http://localhost:8075/webroot/decision/sso/test/oauth/user |
请求头 | 无 | |
form_data | ||
请求结果 | 参数名:fr_login_name 参数值:data.name |
4.3.2 效果
点击右上角的保存,登录网址:http://localhost:8075/webroot/decision,跳转到认证中心地址:http://localhost:8075/webroot/decision/
sso/test/oauth/login?redirect=http%3A%2F%2Flocalhost%3A8075%2Fwebroot%2Fdecision。
输入用户名后,登录到决策系统
5. 常用参数及公式写法编辑
目前支持的公式以及一些固定参数的参数名如下表
公式名称 | 公式说明 | 示例 |
---|---|---|
requestURL | 获取访问链接地址的URL | ${"https://ip:port?redirect=" +requestURL} |
Base64Decode/Base64Encode | base64编码/解码 | ${Base64Decode(accessToken)} |
JwtDecode/JwtEncode | JWT加密/解密 | ${JwtEncode(accessToken, "FineReport2018", 60000)}
${JwtDecode(accessToken, "FineReport2018")}
|
URLDecode/URLEncode | URL编码/解码 | ${URLDecode(accessToken)} ${URLEncode(accessToken)} |
HexDecode/HexEncode | Hex编码/解码 | ${HexDecode(accessToken)} |
AESDecrypt/AESEncrypt | AES加密/解密 | ${AESDecrypt("AES/ECB/NoPadding", HexDecode(yx_encrypt_ticket), "3.14159265358979")}
${AESEncrypt("AES/ECB/NoPadding", HexDecode(yx_encrypt_ticket), "3.14159265358979")}
|
SM2Decrypt/SM2Encrypt | 国密sm2加解密 | ${SM2Decrypt(accessToken, "FineReport2018")} ${SM2Encrypt(accessToken, "FineReport2018")}
|
SM4Decrypt/SM4Encrypt | 国密sm4加解密 | ${SM4Decrypt(accessToken, "FineReport2018")} ${SM4Encrypt(accessToken, "FineReport2018")}
|
SM3Encrypt | 国密sm3加密 | ${SM3Encrypt(accessToken)} |
MD5 | MD5签名 | ${MD5(accessToken)} |
注:FR中内置的公式也是支持的
公式写法不需要区分大小写