反馈已提交

网络繁忙

类Oauth2单点登录插件

  • 文档创建者:Jianye.Wang
  • 历史版本:26
  • 最近更新:Carly 于 2024-01-16
  • 1. 概述

    1.1 版本

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

    1.2 应用场景

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

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

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

    1.3 注意事项

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

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

    • v10版本下1.0.3及之前版本的插件更新会出现白屏问题,需要重启一次

    2. 插件介绍

    2.1 插件安装

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

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

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

    2.2 页面简介

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

    简介页面.PNG

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

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

    两种模式.PNG

    3. 认证模式

    无论哪种认证模式,其目的均为获取登录系统的用户名。所以在插件配置的最后一步,请求结果的配置中,参数名需要固定写成【fr_login_name】,参数值根据前置的配置确定

    3.1 自定义认证模式

    3.1.1 基本配置

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

    配置项功能说明如下表:

    序号
    配置名称
    配置效果
    补充说明
    1动态获取报表域名

    实现平台报表域名动态/固定获取

    动态(开启):requesturl参数域名部分会动态获取

    固定(关闭):requesturl参数域名部分固定读取【报表服务器地址】


    常见使用场景:

    1. nginx转发丢失协议,https跳转到http:
      可关闭动态获取域名,将平台地址配置为 https 路径

    2. 工程存在多域名映射,例如A和B,希望通过 https://A/webroot/decision 打开的链接,跳转认证中心登录后仍跳转到https://A/webroot/decision,B同理:
      可开启动态获取域名,在跳转认证中心时通过 requesturl参数来获取当前链接地址

    2报表服务器地址

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

    http://localhost:8075/webroot/decision

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

    是否保留 /decision/login登录页

    开启:访问/decision/login地址,会展示帆软默认登录页

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

    4

    平台登出地址

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

    http://www.baidu.com

    平台登出后会跳转到该地址
    5登录失败处理逻辑切换登录失败后处理逻辑

    展示报错:单点步骤失败后,页面显示报错日志

    展示默认登录页:单点步骤失败后,跳转到帆软默认登录页,用户可手动输入账号密码进行再次登录(注:若关闭了保留平台登录页,单点失败后不会展示默认登录页,可能会导致页面循环重定向)

    3.1.2 新建步骤

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

    自定义配置.png

    1、参数获取

    常见使用场景说明:

    场景
    参数名参数值说明
    预定义参数值paramAdemo定义一个参数paramA,值为demo
    获取参数值paramB${paramA}

    定义一个参数paramB,值为参数 paramA 的值;

    以下此类写法统称为公式写法,其写法与要求均一致

    paramA 的来源一般包括两种: 

    1. 本步骤之前的步骤中有定义过参数 paramA 

    2. 访问链接中有携带 paramA 的URL参数(如:http://localhost:8123/webroot/decision?paramA=demo)

    计算参数值paramB${left(paramA, 3) + "_test"}

    定义一个参数paramB,值为公式计算的结果;

    公式的写法逻辑与FR中相同,FR中的内置公式均可用,注意需将公式内容用 ${} 包裹起来;

    补充的常用加解密公式示例见第五章

    示例中的参数值为:取参数 paramA 的左边三位字符,并拼接 _test 字符串;例如 paramA 值为 demo,最终计算结果为 dem_test

    传递实际登录用户名fr_login_name上述任一写法若将参数名定义为 fr_login_name ,则实际执行登录的用户名为参数值实际计算结果

    如下图所示,通过配置两步参数获取,可以实现参数传递的效果,等同于固定以用户名demo进行登录。

    参数获取.PNG

    2、重定向

    常见使用场景:客户侧有统一认证平台,希望使用统一认证平台替代帆软默认登录页登录,统一认证平台登录后携带标识参数,如code、token等,跳转回帆软地址。

    重定向.PNG

    参数说明:

    重定向地址】:重定向的目标地址,此时通常会把原始访问链接地址(平台、报表链接等)当做URL参数拼接进去,作为登录后的回调。此时会引出一个固定参数 requesturl ,该参数可用于获取原始访问链接地址,支持公式写法

    Token参数名】:标识客户统一认证平台登录后,回调时携带的标识参数的参数名,例如code/token等。带有登录用户名的信息,后续基于该参数名进行解析,通过配置【fr_login_name】,获取登录用户名

    配置示例:

    重定向地址Token参数名配置说明
    ${"http://ip:port/protal?redirect="+urlencode(requesturl)}code

    当访问帆软平台、报表链接等所有需要进行登录认证链接时(不包括不需要登录认证即可访问的链接,例如模板认证放行的链接),如果URL链接中未携带code,则执行重定向动作;

    urlencode(requesturl) ,其中 

    1. urlencode 为插件拓展公式,表示对指定值进行url编码

    2. requesturl 为原始访问地址链接

    例如访问地址为 :http://localhost:8075/webroot/decision/view/report?viewlet=WorkBook6.cpt&aaa=123则重定向地址为:http://ip:port/protal?redirect=http%3A%2F%2Flocalhost%3A8075%2Fwebroot%2Fdecision%2Fview%2Freport%3Fviewlet%3DWorkBook6.cpt%26aaa%3D123

    3、数据请求

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

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

    数据请求.PNG


    请求结果写法示例:

    参数名接口请求结果示例参数值配置说明
    userId

    {

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

    data.accountId

    接口返回结果为简单json数据格式时,可通过 . 拼接 key的格式, 获取到对应的字段值


    该写法表示将 userId 参数,赋值为10087897

    userId

    {

    "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

    }

    }

    }

    $..book[2].author

    接口返回结果为复杂json数据格式时,可使用 jpath 语句来获取执行值


    该写法表示将userId 参数,赋值为第二个book节点的author值

    fr_login_name
    上述任一写法若将参数名定义为 fr_login_name ,则实际执行登录的用户名为参数值实际计算结果

    3.2 Oauth2认证模式

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

    3.2.1 基本配置

    参考3.1.1节。如图所示

    Ouath2.PNG

    3.2.2 其他配置

    1、初始参数

    配置初始化参数,如client_id/sercret等,效果同参数获取步骤,实现参数预定义,认证接口地址和后续步骤中可引用对应参数

    配置项
    参数名
    Client ID${client_id}
    Client Secret${client_secret}
    Grant Type${grant_type}
    Scope${scope}
    State${state}
    Token Name实际填入的值,示例:填入 code,在下面可使用 ${code} 来获取该参数值

    认证接口地址:未登录帆软决策平台时,跳转到客户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

    3.3 高级设置说明

    v1.0.4及更高版本插件有高级设置选项

    回调地址设置

    某些认证中心需要校验回调地址,在登录认证中心后,系统只能将您重定向到固定的URL,这意味着如果需要单点登录到不同的报表链接,则无法实现。为了解决这个问题,可以使用自定义回调地址。除了固定的redirect_uri之外,可以新增一个自定义参数,例如state参数,来携带认证前访问的URL,回调到固定URL后,插件获取自定义参数的值为新的地址,重定向到新的地址中。

    但是,有些认证中心对重定向时携带的参数也有限制。在这种情况下,可以打开“是否通过cookie传递”开关。在重定向之前,插件会将请求的URL存储到cookie中。在回调到帆软平台时,系统会再次重定向到cookie中存储的访问地址。

    为方便配置,可优先选择通过cookie传递。

    自定义报错页信息

    设置后的效果是,当出现了插件报错,会展示设置的报错信息而不是真正的报错原因。这是一个不建议设置的项,因为它会影响判断错误原因。比如此处设置了“抱歉,出错了”,效果如下

    展示日志页面

    配置单点时遇到错误常常需要导出日志才能定位到原因,比较麻烦,打开“展示日志页面”开关后,便可以访问http://ip:port/webroot/decision/sso/plugin/log,查看单点插件输出的日志,此处日志等级和平台设置的日志等级相同。

    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


    在实际配置时,客户提供的配置文档中,会包含请求地址、请求头、请求体和请求结果的具体信息,包括加密方式等。

    本示例中的JWT加密,只是为了演示方便,给出的一种加密方式,在实际情况下,需按照客户配置文档的要求进行配置


    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)}
    JwtEncode/JwtDecodeJWT加密/解密

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

    • param1: 加密字符串 

    • param2: 密钥key 

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

    ${JwtDecode(accessToken, "FineReport2018")}

    • param1: 解密字符串 

    • param2: 密钥key

    URLEncode/URLDecodeURL编码/解码

    ${URLEncode(accessToken)}

    ${URLDecode(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中内置的公式;公式写法不区分大小写


    附件列表


    主题: 部署集成
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持