历史版本10 :类Oauth2单点登录插件 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本插件版本
10.0&11.0v1.0.0

1.2 应用场景

  • 支持在 Oauth2 认证标准下,进行单点配置,集成FineReport/FineBI平台

  • 支持配置自定义的单点逻辑(参数加解密、数据请求等)

  • 支持独立配置PC端和移动端(H5预览)单点逻辑(PC端和移动端可配置不同的单点登录策略)

1.3 注意事项

  • 针对移动端配置单点逻辑,需提前安装HTML5插件,方可正常使用

  • v11版本插件安装支持热部署;v10版本插件安装、更新后需要重启报表工程;v11和v10配置修改都无需重启

2. 插件介绍编辑

2.1 插件安装

点击下载插件:类Oauth2单点插件

设计器插件安装方法请参见:设计器插件管理

服务器安装插件方法请参见:服务器插件管理

2.2 页面简介

插件安装成功后,登录数据决策系统,点击「管理系统>单点集成」,即可进入功能界面,如下图所示:

简介页面.PNG

选择PC端访问或者移动端访问,开启单点配置(两者配置页面流程相同,后续以PC端访问为例,进行说明)
开启配置.PNG

有Oauth2和自定义认证两种模式,可供选择,进行配置

两种模式.PNG

3. 认证模式编辑

3.1 自定义认证模式

3.1.1 基本配置

点击自定义认证模式,开启单点功能,如下图所示:(Oauth2认证中,基本配置相同)

开启单点.PNG

该配置项功能说明如下表:

序号
配置名称
配置效果
补充说明
1报表服务器地址

帆软平台的访问地址,示例:

http://localhost:8075/webroot/decision

用于一些后台无法正确获取到平台地址的转发场景
2保留平台登录页

是否保留 /decision/login登录页

开启:访问/login地址,会打开帆软默认登录地址

关闭:屏蔽/login地址,未登录时,按照配置认证逻辑处理;已登录时,会跳转到 /decision 页面

3

平台登出地址

平台登出地址,可用于单点登出,示例:

http://www.baidu.com

平台登出后会跳转到该地址

3.1.2 新建步骤

点击新建步骤,显示三种方式:参数获取,重定向和数据请求。三种方式可以自由排列组合,进行配置,最终目的是获取当前帆软平台中的用户名【fr_login_name

新建步骤.jpg

1、参数获取

点击添加后,需配置参数名和参数名。该方式用于参数的获取,包括从URL query中获取,或者我们预定义的一些常量参数等。

同时,在前置步骤中定义的参数名,在后置步骤中可以获取到对应的参数值。

如下图所示,实现参数传递的效果,等同于固定以用户名demo进行登录。

参数获取.PNG

请求结果配置示例:

{
  "status": "1",
  "message": "token exist",
  "data": {
    "accountId": "10087897",
    "name": "XXX",
    "token": "500xxxxxx"
  }
}

客户的配置文档中会给出结果形式,如果是上述形式,想获取参数accountId。则配置如下图,通过key(此处为data)和.拼接成参数名

11111111111111.png

针对更复杂结构的返回结果,插件提供了 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的写法;如下表

122222222.png


2、重定向

该方式针对客户自身有认证平台,登录帆软决策平台时,需要先跳转到统一的认证平台进行登录的场景。

登录认证平台后,再跳转回决策平台,并携带标识参数,如code等。基于code解析出当前登录的用户名,这种方式实际上是类Oauth2 认证模式。

重定向.PNG

参数说明:                  

重定向地址】:需要跳转到的地址,这时候一般把原来访问的报表连接当做一个参数拼接到URL后面,这时候就会引出一个固定参数 【requestURL】,它可以获取到跳转前访问的链接地址

Token参数名】:标识客户的认证平台登录后,回调时携带的标识参数的参数名,例如 token/code 之类

3、数据请求

该方式实际上是模拟一次请求的动作,需配置请求类型、请求地址、请求头、请求体,可按照客户提供的接口文档进行配置。

其中请求地址、请求头、请求体的参数值支持公式写法,也可以从前置步骤中获取定义好的参数,参考【参数获取】步骤中的截图

数据请求.PNG

3.2 Oauth2认证模式

当前最常用的授权码认证的方式,其实可以理解为一种约定俗成的自定义认证模式。配置逻辑固定,可按照客户提供的文档进行配置

3.2.1 基本配置

参考3.1.1节。如图所示

基本配置(oauth2).PNG

3.2.2 其他配置

1、初始参数

配置初始化参数,如client_id/sercret等,认证接口地址指的是:未登录帆软决策平台时,跳转到客户Oauth2.0认证平台的地址
示例: ${"http://ip:port/oauth/login?redirect=" + URLEncode(requestURL)+ "&client_id=" + client_id + "&scope=" + scope}

初始参数.PNG

2、令牌申请

基于登录认证平台后携带的【Token Name】:code,请求客户接口获取accessToken

令牌申请.PNG

3、用户信息

基于accessToken,获取登录用户名进行登录

用户信息.PNG

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(帆软决策平台的用户)。如下图

示例1.PNG

4.1.2 效果

点击右上角的保存,登录网址:http://localhost:8075/webroot/decision?user=Anna。此时不需要输入账号、密码,直接进入Anna的决策平台界面

示例1效果.PNG

如果想要动态获取URL中传递的参数,可将参数值配置为${user}。这样就可以通过访问http://localhost:8075/webroot/decision?user=xxx,xxx为决策平台任一用户名,来实现动态用户名登录

示例1动态用户名.PNG

4.2 根据URL中携带参数需接口认证进行单点登录

本示例应用了自定义配置中的【数据请求】方式,基于JWT加密生成密文,如下图所示:

意思是:将用户名Anna,通过密钥ceshi,采用JWT标准,加密后得到密文

4.2.1 配置

在实际的业务场景中,根据客户提供的接口文档进行配置即可。该示例的配置如下图:

示例2配置.PNG

具体参数配置见下表:

配置项内容
请求地址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后的一串参数为前文中生成的密文

示例2结果1.jpg

4.3 Oauth2单点登录认证

4.3.1 配置

在实际的业务场景中,根据客户提供的接口文档进行配置即可。该示例的配置如下图:

初始参数:

初始参数.PNG

令牌申请:

令牌申请.PNG

用户信息:

用户信息.PNG

具体参数配置见下表:

大类配置项内容
初始参数




Client ID         ci
Client Secretcs
Token Namecode
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。

登录网址.PNG

输入用户名后,登录到决策系统

登录页.PNG

5. 常用参数及公式写法编辑

目前支持的公式以及一些固定参数的参数名如下表

公式名称 公式说明示例
requestURL获取访问链接地址的URL${"https://ip:port?redirect=" +requestURL}
Base64Decode/Base64Encodebase64编码/解码${Base64Decode(accessToken)}
JwtDecode/JwtEncodeJWT加密/解密

${JwtEncode(accessToken, "FineReport2018", 60000)}

  • param1: 加密字符串 

  • param2: 秘钥key 

  • param3: 超时时间(默认1小时)

${JwtDecode(accessToken, "FineReport2018")}

  • param1: 解密字符串 

  • param2: 秘钥key

URLDecode/URLEncodeURL编码/解码

${URLDecode(accessToken)}       

${URLEncode(accessToken)}

HexDecode/HexEncodeHex编码/解码${HexDecode(accessToken)}
AESDecrypt/AESEncryptAES加密/解密

${AESDecrypt("AES/ECB/NoPadding", HexDecode(yx_encrypt_ticket), "3.14159265358979")}

  • param1: 解密模式

  • param2: 解密字符串

  • param3: 密钥(16位)

${AESEncrypt("AES/ECB/NoPadding", HexDecode(yx_encrypt_ticket), "3.14159265358979")}

  • param1: 解密模式

  • param2: 加密字符串

  • param3: 密钥(16位)

SM2Decrypt/SM2Encrypt国密sm2加解密

${SM2Decrypt(accessToken, "FineReport2018")}

${SM2Encrypt(accessToken, "FineReport2018")}

  • param1: 加解密字符串

  • param2: 密钥

SM4Decrypt/SM4Encrypt国密sm4加解密

${SM4Decrypt(accessToken, "FineReport2018")}

${SM4Encrypt(accessToken, "FineReport2018")}

  • param1: 加解密字符串

  • param2: 密钥

SM3Encrypt国密sm3加密

${SM3Encrypt(accessToken)}

MD5MD5签名${MD5(accessToken)}


  注:FR中内置的公式也是支持的

         公式写法不需要区分大小写