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

How do I ensure a SAML Assertion's Identity Provider with an embedded X509 Certificate is Legitimate?

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

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

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

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

SAML 信任

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

SAML 配置

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

您可以从 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 元数据来配置您的 SAML SP URL,您可以考虑配置您的 SAML SP 库以定期从 IdP 下载和刷新元数据。

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