如何确保带有嵌入式 X509 证书的 SAML 断言的身份提供者是合法的?

问题描述

我正在尝试实施 SAML 服务提供者,以便对基于云的应用程序进行 SSO,该应用程序可以托管多个租户或公司。通常,用户输入电子邮件地址(用作其用户 ID)和登录密码(租户将通过 URL 参数标识)。

收到的 SAML 断言在负载中嵌入了 X509 证书,用于验证 SAML 的签名。虽然签名可用于验证断言是否有效,但担心身份提供者以外的其他人可以生成他们自己的公钥/私钥,使用正确“猜测”的有效租户 ID 和用户电子签名来签署他们自己的断言。邮件地址,然后可能获得对该应用程序的访问权限。

用于识别断言及其嵌入证书来自特定身份提供者的机制或技术是什么,而不是 SAML 负载中包含的信息?虽然我已经读到证书可以从身份提供者那里下载,但人们担心这些证书会过期或被撤销,此外,我们还必须将它们存储在我们身边。有理由担心这些情况会导致用户停机。

一个小问题,因为我们需要一个租户 ID 来确定哪个租户在特定用户帐户上签名,通过 URI 提供该标识符是否常见(或适当),例如在 URL 路径中或作为接收 SAML 断言的端点上的参数?

解决方法

SAML 信任

当您实施 SAML SP 时,系统会要求您预配置目标 SAML IdP 的签名证书。因此,您的 SP 将只信任使用该特定签名证书签署的任何传入断言。

SAML 配置

可以通过手动设置所有 IdP 参数(包括签名证书)或指定包含所有 IdP 参数(包括签名证书)的元数据文件来配置 SAML SP。

您可以从 IdP 下载元数据文件并在您的 SAML SP 本地使用它,或者指定元数据文件的 URL 并让您的 SAML SP 下载和使用它。

您可以参考 Azure AD 的 SAML 元数据 URL 作为示例: https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml

显然,此 URL 应受 TLS/SSL 保护,其内容只能由 IdP 修改。

SAML 签名证书轮换

当签名证书轮换时,IdP 和 SP 之间的信任就会丢失。您需要重新配置您的 SP 以直接信任新证书或刷新元数据文件。

如果您选择通过指定 IdP 元数据 URL 来配置 SAML SP,您可以考虑将 SAML SP 库配置为定期从 IdP 下载和刷新元数据。

通过这种方式,您的 SAML SP 将有一种可信的方式来验证最新的签名证书,即使证书可能会更改。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...