-
创建者:
虚拟的现实,上次更新时间:6月 10, 2025 需要 4 分钟阅读时间
1. 前言
之前利用 keycload 通过 openid 的方式整合了 seafile 和 seatable 的应用。实现了同一用户只需认证一次即可登录多个应用的效果。接下来想继续将 confluence 的应用也整合进来Confluence 官网提供的解决方案是通过 SAML 的方式提供 SSO 的单点登录,但是照着操作一遍下来一直未能成功,先记录这次的操作步骤和错误情况。
最后测试验证时存在以下的错误提示,请求已经转发到 keycloak ,但是 keycloak 页面反馈无效的请求,如下图:
Confluence 9.5.1 配置【认证配置】选项要求使用 https 方式,这里测试环境通过启用 http 方式操作,生产环境需要确保使用 https
1.1. 禁用针对 SSO 配置的 https 要求
该操作步骤参照官网说明执行。
- 先使用管理员登陆 confluence
- 在浏览器打开 http://192.168.182.100:8090/admin/darkfeatures.action 类似的配置页面
- 在该页面的下方输入 atlassian.authentication.sso.skip.https.requirement 来临时禁用 https
- 如需取消删除该项的内容即可
2. Confluence 配置 SAML 认证
2.1. 查看 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
2.2. 在 Confluence 中配置 SAML 认证
登录并进入 Confluence 的后台管理界面。找到【General Configuration】-【Authentication methods】在该界面添加新的认证方法【SAML single sign-on】。
注意:需要先按前面的步骤取消 https 的配置要求,否则该页面后续设置的内容无法正常保存
参照 keycloak 中的关键信息完成如下图的配置
- 【Single sign-on issuer】http://192.168.182.52:8080/realms/confluence #keycloak 中 entityID 的信息
- 【Identity provider single sign-on URL】http://192.168.182.52:8080/realms/confluence/protocol/saml #keycloak 中 Location 的信息
- 【X.509 Certificate】略 #keycloak 中 x509 证书信息
- 【Username mapping】${username}
- 【Assertion Consumer Service URL】http://192.168.182.100:8090/plugins/servlet/samlconsumer
- 【Audience URL (Entity ID)】http://192.168.182.100:8090
2.3. 在 keycloak 中创建 saml 客户端
- 【General Settings】-【Client ID】处填写 http://192.168.182.100:8090 ,【name】 和 【Description】 不是必填项,按需填写即可
- 进入【Access settings】后
- 【Root URL】:http://192.168.182.100:8090
- 【Home URL】:http://192.168.182.100:8090
- 【Valid redirect URIs】:http://192.168.182.100:8090/*
- 【Master SAML Processing URL】:http://192.168.182.100:8090/plugins/servlet/samlconsumer
- 进入 【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 中创建用户
2.4. 启用并测试 SAML 认证
完成上述配置后,进入 Confluence 的 【Authentication methods】认证界面,点击页面上的测试会自动跳转到 keycloak 的登陆页面
2.4.1. 错误一: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
2.4.2. 错误2:登录后 confluence 提示 “something went worng”
该问题暂未解决
3. Confluence 配置 OIDC
使用 Confluence 自带的 SSO 插件没能完成 SAML 和 OIDC 的单点登录操作。借助 Confluence 应用商店里的 kantega 插件实现了 OIDC 的整合。不得不感叹商业版本的插件无论是在功能和操作体验及故障定位和解决方面都非常突出。
这里的目标是整合 Keycloak 中原有 seafile 项目中已经新建好的用户,通过 kantega 提供的单点登录插件整合到 confluence 平台,无需在 confluence 中新增用户,直接使用 keycloak 中已有的用户登录(登录时 kantega 插件会自动在 confluence 中同步新建用户)
3.1. 环境说明
|
|
---|---|
confluence | |
keycloak | http://192.168.182.52:8080 |
seafile | keycloak 的 realms 和 client |
confluence | Keycload 的 client ,共用 seafile 的 realms |
Kantega SSO Enterprise | confluence 的单点登录应用插件 |
测试用户1 | 13600006772@139.com |
测试用户2 | 13600006773@139.com |
3.2. kantega 插件设置
1、完成 kantega 插件的安装后,点击打开插件并选择“SAML and OpenID Connect”,在应用中找到 “Keycloak”。按需求选择,使用 SSO 的主要目的就是不想多次维护相同的用户账号,因此这里选择【Use JIT provisioning】这个配置并选择 【OIDC】。另一个配置是已经存在用户的应用场景。
2、接下来一路默认选择。在【Redirect Mode】中选择 “Automatic (can be cancelled on login page)”;同时需要记下应用回调的 URL ,这个 URL 需要配置到 keycloak 中(例如“http://192.168.182.100:8090/plugins/servlet/no.kantega.kerberosauth.kerberosauth-plugin/callback”),在 【Metadata】项中填入 keycloak 的内容(该页面有提示,我实际使用的是“http://192.168.182.52:8080/realms/seafile/.well-known/openid-configuration”)
3、选择下一步直到 【Credentials】,其中 【Client id】填写 keycloak 中的 客户端(不是领域角色,这里使用的是 confluence),【Client Secret】填入 confluence 这个客户端的凭证(该凭证自动生成)。
4、完成后的结果如下图
3.2.1. IdP integration settings
3.2.2. Group memberships
注意添加了 confluence-users 这个组
3.2.3. User lookup
注意其中的字段映射关系
3.2.4. User provisioning
3.3. keycloak 设置
3.4. 测试结果
- 无标签
添加评论