前言
之前利用 keycload 通过 openid 的方式整合了 seafile 和 seatable 的应用。实现了同一用户只需认证一次即可登录多个应用的效果。接下来想继续将 confluence 的应用也整合进来Confluence 官网提供的解决方案是通过 SAML 的方式提供 SSO 的单点登录,但是照着操作一遍下来一直未能成功,先记录这次的操作步骤和错误情况。
最后测试验证时存在以下的错误提示,请求已经转发到 keycloak ,但是 keycloak 页面反馈无效的请求,如下图:

禁用针对 SSO 配置的 https 要求
该操作步骤参照官网说明执行。
- 先使用管理员登陆 confluence
- 在浏览器打开 http://192.168.182.100:8090/admin/darkfeatures.action 类似的配置页面
- 在该页面的下方输入 atlassian.authentication.sso.skip.https.requirement 来临时禁用 https
- 如需取消删除该项的内容即可

Confluence 配置 SAML 认证
查看 keycloak 的 SAML 信息
在配置 Confluence 之前需要在 keycloak 中找到对应的 saml 配置信息。官网给出的参考操作步骤是直接使用 keycload 的 master 领域,这里使用的是单独新建 confluence 领域,后续的操作都只针对该 confluence 领域,不会造成干扰和影响。

在 keycloak 中找到新建的 confluence 领域信息,点击该领域关于 【SAML】的相关信息(http://192.168.182.52:8080/realms/confluence/protocol/saml/descriptor),找到如下图所示的几项内容:entityID,X509Certificate 和 Location

在 Confluence 中配置 SAML 认证
登录并进入 Confluence 的后台管理界面。找到【General Configuration】-【Authentication methods】在该界面添加新的认证方法【SAML single sign-on】。

参照 keycloak 中的关键信息完成如下图的配置

在 keycloak 中创建 saml 客户端
- 【General Settings】-【Client ID】处填写 http://192.168.182.100:8090 ,【name】 和 【Description】 不是必填项,按需填写即可
- 进入【Access settings】后
- 进入 【SAML capabilities】
- 【Name ID format】username
- 【Force name ID format】on
- 【Force POST binding】 on
- 【Force artifact binding】 on
- 【Include AuthnStatement】 on
- 进入 【Signature and Encryption】
【Sign documents 】On
【Sign assertions 】On
【Signature algorithm 】RSA_SHA256
【SAML signature key name 】KEY_ID
【Canonicalization method 】EXCLUSIVE
如下图完成设置:

完成上述步骤后,在 keycloak 中创建用户

启用并测试 SAML 认证
完成上述配置后,进入 Confluence 的 【Authentication methods】认证界面,点击页面上的测试会自动跳转到 keycloak 的登陆页面
错误一:keycloak 界面显示 “Invaild requester”
在 confluence 的配置页面点击 SAML 的认证测试后出现下图的错误页面。同时 keycloak 的日志中也存在 “2025-06-09 15:38:44,212 ERROR [org.keycloak.protocol.saml.SamlService] (executor-thread-88) request validation failed: org.keycloak.common.VerificationException: SigAlg was null”的错误提示


原因:keycloak 的 client 中的 【key】配置项启用了签名
进入 keyclaod 找到 SAML 的 client,进入 client 配置项找到【keys】将 【Client signature required 】修改为 off

