我正在开发一个通过 SAML 实现单点登录 (SSO) 的项目。我在本地使用 Keycloak 26.0.6 来模拟 SSO。作为设置的一部分,我尝试配置 Keycloak 以使用 AES-128-GCM 而不是默认的 AES-128-CBC 加密 SAML 断言。
下面是通过 SAML-Tracer 获取的当前 SAML 响应的片段:
<saml2:EncryptedAssertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
<xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
Id="_36c8dd9b03ad45e7acc1f938f69c148d"
Type="http://www.w3.org/2001/04/xmlenc#Element">
<xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"/>
....
</xenc:EncryptedData>
我需要使用 AES-128-GCM 而不是默认的 AES-128-CBC 来加密 SAML 断言,以验证服务提供商(我的应用程序)是否可以成功解密 SAML 断言。但是,我找不到任何方法来配置 Keycloak 来实现这一点。我用的是大师境界。在领域设置中,我尝试使用“添加提供程序”按钮添加新的 AES 密钥,希望选择 AES-128-GCM 算法,但没有成功。
有什么想法吗?
Keycloak 目前(截至 2024 年 12 月)不支持 AES-128-GCM 进行 SAML 加密,根据 Keycloak#14464:
...我们的 SAML 加密始终使用“http://www.w3.org/2001/04/xmlenc#aes128-cbc”作为加密 SAML 断言等的加密。我们甚至没有任何方法来覆盖它在配置中。我们不需要将自己限制在原始的 XML 加密规范中。 Keycloak 使用 Apache Santuario,自 Santuario 1.5.0(我们使用的是 2.2.3)以来,它还通过 BouncyCastle 支持 GCM(和其他)算法。我们目前不使用这些,但从技术上来说它应该相对简单......
鉴于进一步的相关讨论似乎已经结束,Keycloak 似乎无意立即支持 GCM 而不是 CBC。
如果您正在寻找一种使用支持 GCM 的身份提供商来测试 SP 的快速方法,我会寻找类似 SimpleSAMLphp 的工具,它非常易于部署并支持 GCM。