1. 概述
1.1 版本
| 报表服务器版本 | 插件版本 | SAML版本 | 说明 |
|---|---|---|---|
| 11.0 | V1.0.1 | 2.0 | - |
| 11.0 | V1.0.2 | 2.0 | 新增配置项:「开启debug模式」 详见 3.2 节说明 |
| 11.0 | V1.0.3 | 2.0 | 新增字段填写完整性校验 默认开启「跨越SAML认证的请求-平台登录页」 |
| 11.0 | V1.0.8 | 2.0 | 新增支持登出 FineReport 时,账号同步从认证服务器中登出 |
| 11.0 | V1.1.1 | 2.0 | 新增支持登出认证服务器时,账号同步从 FineReport 中登出 新增「账号匹配规则」,支持对解析的账号转大写/转小写后与平台用户匹配 |
| 11.0 | V1.1.7 | 2.0 | 「账号匹配规则」从选项改为通过公式进行定义 |
1.2 功能
用户需要实现通过 SAML 认证登录数据决策系统,本文提供配置 SAML 单点登录插件方案。
用户可下载 SAML 单点登录插件,无需代码,简单快速地实现通过 SAML 认证登录数据决策系统的效果。
注:远程设计时不走 SAML 认证,默认放行。
2. 插件介绍
2.1 插件下载
请点击链接获取插件试用安装包:点击下载
设计器插件安装方法请参见:设计器插件管理
服务器安装插件方法请参见:服务器插件管理
2.2 界面介绍
安装插件后无需重启,超管进入平台,点击「管理系统>系统管理」,新增「SAML-SP配置」页面。

注:需注意以下几点:
用户需要有「管理系统」权限,才可见配置页面。
支持热部署,安装启用插件无需重启工程。
修改配置无需重启工程。
3. 操作步骤
3.1 开启SAML单点登录
点击「开启SAML单点登录」按钮,如下图所示:

3.2 SAML配置
填写设置项后,需点击「保存」按钮,如下图所示:

注:未填写完配置会导致保存失败,如下图所示:

各设置项介绍如下表所示:
| 设置项 | 说明 | 是否必填 |
|---|---|---|
| 开启SAML单点登录 | 点击即可开启 SAML 单点登录功能 开启后会加载 Filter 过滤器,用户访问原决策平台 URL 后,走单点逻辑 注:无需重启。 | / |
| 开启debug模式 | 点击即可开启插件 debug 模式 开启后会将 SAML 单点登录过程中收集到的断言信息打印在 fanruan.log 的 error 级别日志中 注:建议一般不开启,仅用于插件调试,开启后将会在日志中输出断言内容,可能包含账号、邮箱等信息。 | / |
IDP元数据 | 填写由身份认证工具提供的 IDP 原数据 一般为 XML 格式的页面,这里需要填写页面所在的地址 | 是 |
| IDP唯一标识 | 填写由身份认证工具提供的 IDP 唯一标识 建议获取方式:从 IDP 元数据中寻找“entityID”这一关键词,后面的链接就是 IDP 唯一标识 | 是 |
IDP SSO地址 | 填写过滤器需要跳转到的 IDP 地址 不同 IDP 过程的获取方式不同,需按照实际情况操作 | 是 |
| IDP公钥 | 填写 IDP 发送断言时加密所用的公钥 建议获取方法:从 IDP 元数据中寻找“ds:X509Certificate”这一关键词,关键词后面的字符串为公钥 | 是 |
账号映射 | 此项为辅助功能,非必要项 可使用 IDP 用户联动的其他属性字段进行单点登录,默认或为空时使用 IDP 返回的“nameid”字段,可以配置成其他字段比如:username、email 等 | 否 |
| 账号匹配规则 | V1.1.7 及之后版本此项修改为通过公式定义 公式支持范围: 1)大小写转换:
注1:以 SAMLUSER 代指 SAML 流程中获取到的 IDP 传递的原始账号。 注2:兼容 V1.1.7 之前的版本,原选项中的「默认规则」、「转大写匹配」、「转小写匹配」分别转换为空、UPPER(SAMLUSER)、LOWER(SAMLUSER)。 2)字符串拼接
3)数据集函数 只支持 value()、sql()、map() 这三个函数 | 是 |
| SP唯一标识 | 填写服务提供商的标识,自行配置即可 | 是 |
| SP默认跳转地址 | 填写 FineReport 工程的访问路径,url 到/decision 为止。 例如:https://localhost:8443/webroot/decision | 是 |
| SP证书 | 上传加密所用证件,支持 crt、cer、pem 格式。 注:此处证件仅用作加密,可自行生成证件或从证件服务商处获取。也可使用默认的证书: | 是 |
| SP私钥 | 上传密钥文件,支持 key 格式。 注:如「SP证书」处使用了文档提供的默认证书,此处需使用对应的 key 文件: | 是 |
| 生成元数据XML文件 | 点击按钮,即可下载服务提供商所用的 MetaData.xml 文件 将 MetaData 文件导入到身份认证服务即可自动生成一个新 SAML 实体 如果 SP 相关的 5 个属性(IDP公钥、SP唯一标识、SP默认跳转地址、SP证书、SP私钥)存在空值则提示:“请将 SP 相关信息填写完整” | 是 |
| 开启SAML单点登出 | 选择是否开启 SAML 单点登出功能 开启后展示“SAML 单点登出地址”配置项 | 否 |
| SAML单点登出地址 | 填写登出 IDP 的 API,实现登出 FineReport 同时登出 IDP 例如:http://localhost:8080/auth/realms/FineReport/protocol/openid-connect/logout?redirect_uri=http://localhost:8075/webroot/decision/login 参数说明:
| 否 |
| 跨越SAML认证的请求-HTML5请求 | 是否放行 HTML5 请求 开启后 HTML5 不需要进行 SAML 认证,不开启则只能通过 SAML 登录 | 否 |
| 跨越SAML认证的请求-平台登录页 | 开启后允许使用决策平台登录页进行登录 注1:该配置默认开启。 注2:如果不开启,则只能通过 SAML 登录, 且未开启 SAML 单点登出情况下,无法手动登出决策平台;如果开启跨越,则登出时会跳转到 FineReport 原本的登录页。 注3:配置测试单点时建议开启,配置完成后若无需使用原平台登录页,请关闭该配置,否则原平台登录入口将保留,地址为原 URL+/login,例如:http://localhost:8075/webroot/decision/login。 | 否 |
| 自定义请求放行 | 自定义需要放行的请求,以分号 ; 隔开不同请求 请求路径可以使用通配符 字段值范例:/webroot/decision/t*;/webroot/decision/map/edit | 否 |
注:只配置 SAML 登录,未配置 SAML 登出时:
未开启「平台登录页」:点击右上角的「退出」按钮,浏览器刷新下页面,不会登出。
开启「平台登录页」:点击右上角的「退出」按钮,强制跳转到平台默认登录页,但是实际上没有登出平台,直接访问 http://ip:端口/工程名/decision,还是显示之前用户的登录状态。
3.3 关闭SAML单点
超管进入平台,点击「管理系统>系统管理>SAML-SP 配置」,关闭「开启SAML单点登录」按钮,点击「保存」,如下图所示:

4. 范例-Azure AD
注:如果需要执行从 Azure AD 发起的单一登录(例如从 Azure AD 的 My apps 单点到 FineReport 服务器),须首先配置 FineReport 工程为 HTTPS 访问。配置HTTPS 访问可参考:配置HTTPS 。
4.1 填写SAML基础设置
1)填写标识符(实体标识符)
此项自定义即可,例如本文示例此处填了工作人员姓名 jade。

2)填写回复 URL(判断断言消费者服务 URL)
此项需要填写 FineReport 工程的访问路径(结尾到 decision)/sso/saml/acs,例如:https://localhost:8080/webroot/decision/sso/saml/acs

3)填写登录 URL
此项是 Azure AD 内的必填项,用于执行从 Azure AD 发起的单一登录。若需要执行从 Azure AD 发起到 FineReport 服务器的的单一登录(例如从 Azure
AD 的 My apps 单点到 FineReport 服务器),则需要先配置 FineReport 工程为 HTTPS 访问,配置 HTTPS 访问可参考:配置HTTPS 。
若已配置平台为 HTTPS 访问,则此处直接填写 FineReport 工程的访问路径即可,例如:https://localhost:8080/webroot/decision 。
若无此场景需求,可以填写任意 HTTPS 的链接。

4)填写完必填项后,点击「保存」按钮。
4.2 在FineReport中完善配置项
| FineReport 中配置项 | 对应 Azure AD 信息 |
|---|---|
IDP元数据
| 应用联合元数据 URL
|
IDP唯一标识
| Azure AD 标识符
|
IDP SSO地址
| 登录 URL
|
IDP公钥
| 点击下载证书(Base64),下载后用记事本获取内容
|
SP唯一标识
| 同上述 4.1 节第一点,自定义的值
|
SP默认跳转地址 填写 FineReport 工程的访问路径,url 到/decision 为止
| / |
上传SP证书和SP私钥 这边仅仅用作 SAML 报文的加密,上传任意一份可以用作加密功能的证书即可
| / |
默认开启「跨越SAML认证的请求-平台登录页」 如果不开启,则只能通过 SAML 登录, 且未开启 SAML 单点登出情况下,无法手动登出决策平台;如果开启跨越,则登出或直接访问原登录页 URL+/login 时会跳转到 FineReport 原本的登录页。 注:配置测试单点时建议开启,配置完成后若无需使用原平台登录页,请关闭该配置,否则原平台登录入口将保留,地址为原 URL+/login,例如:http://localhost:8075/webroot/decision/login。
| / |
4.3 效果查看
访问原报表链接 https://localhost:8443/webroot/decision,会进行 SAML 单点登录。
点击退出登录当前用户,会返回到 https://localhost:8443/webroot/decision/login。如下图所示:
5. 示例-ADFS
5.1 ADFS设置
1)打开 ADFS, 选择「Start> Administrative Tools > ADFS Management」,跳转至「Relying Party Trusts」文件夹。
2)选择「Action > Add Relying Party Trust」。
3)选择「Start」来运行「Add Relying Party Trust Wizard」。
4)打开「Select Data Source」窗口,选择 「Import data about the relying party from a file」, 选择从插件配置页上传的 metadata.xml 文件并点击「Next」。
5)选择「Next」,跳过「Configure Multi-factor Authentication Now?」询问窗口。
6)打开「Choose Issuance Authorization Rules」窗口, 选择 「Permit all users to access this replying party」 并点击 「Next」。

7)在 「Ready to Add Trust」 窗口:
点击「Encryption」, 从 FineBI 服务器上传「SP Certificate」(SP 公钥证书); 点击「Advanced」, 设置为「SHA-1」。
8)打开「Ready to Add Trust」窗口, 点击「Next」。
9)打开「Finish」 窗口, 点击「Open the Edit Claim Rules dialog for this replying party trust when the wizard closes」 并点击「Close」。
如果在关闭向导时没有弹出「Edit Claim Rules」对话框, 右键选择用户设定的 The Relying Party Trust 名称,并选择「Edit Claim Rules...」。
10)打开 「Edit Claim Rules」对话框, 选择「Add Rule」。

11)打开「Select Rule Template」 对话框, 在「Choose Rule Type」下拉列选择「Send LDAP Attributes as Claims」并点击「Next」。
12)填写「the Configure Rule」对话框:
在「Claim rule name」栏输入「UseridentiferToNameID 」(可自定义)。
在 「Attribute store」栏选择 「Active Directory」。
在 「LDAP Attribute」栏选择「SAM-Account-Name」 (或账号的任意属性)。
在「Outgoing Claim Type」栏输入「Name ID」。
注:账号映射字段应设置为相同的值。在一些 ADFS 版本中,允许使用自定义值而不限定于名称 ID,此处的设定应为与插件设置中的账号映射相同。
13)点击「Finish」。
5.2 常见问题及解决方案
注:V1.0.2 版本新增调试功能,无需调试时请保持按钮关闭。如遇问题可联系技术支持协助使用调试功能进行排查。
ADFS 的正确 XML 响应将包含 Name 属性,正确格式如下:
......
<AttributeStatement>
<Attribute Name="Name ID">
<AttributeValue>username@fanruan.com</AttributeValue>
</Attribute>
</AttributeStatement>
......
5.2.1 在文件中找不到名称ID
./logs/fanruan.log
~ https-openssl-nio-443-exec-16 ERROR [standard] No name id found in Document.
~ com.onelogin.saml2.exception.ValidationError: No name id found in Document.
可能的原因:
未配置「Outgoing Claim Mapping」。
在一些 ADFS 版本中, 「Outgoing Claim Mapping」必须包含「Name ID」。
5.2.2 XML中未返回名称字段
「Name」字段(属性名称)未出现在 ADFS 返回的 XML 中。
./logs/fanruan.log
~ http-nio-37799-exec-35 ERROR [standard] null
~ java.lang.NullPointerException: null
可能的原因:
1)SP SSL 证书未上传至 ADFS。
2)ADFS 加密类型未设置为「SHA-1」。
5.2.3 找不到匹配的账号
ADFS 返回的 XML 中存在「Name」字段(属性名称),但登录应用程序无法识别。
./logs/fanruan.log
~http-nio-37799-exec-12 ERROR [standard] No matching user name found!
可能的原因:
SAML 插件中的「Username Mapping」与「Outgoing Claim Type」设定的值不同。
5.2.4 账号不存在或密码错误
ADFS 返回的 XML 中存在「Name」字段(属性名称),但登录不成功。
./logs/fanruan.log
~http-nio-37799-exec-23 WARN [standard]
com.fr.decision.webservice.exception.login.UserLoginException : User not exist, or wrong password!可能的原因:
ADFS 中设置为「Outgoing Claim Type」的字段不是 FineReport 中的「username」字段。
5.2.5 登出认证服务器后决策平台未登出
问题现象:用户登出了认证服务器,但决策平台未同步登出。
解决方案:升级插件至 1.0.8 及以上的版本。
