我如何才能完全信任 SAML IDP?

Posted

技术标签:

【中文标题】我如何才能完全信任 SAML IDP?【英文标题】:How can I fully trust a SAML IDP? 【发布时间】:2021-09-28 15:13:17 【问题描述】:

我的 Web 应用程序允许通过 SAML 身份验证进行 SSO,我现在正在进行开发。这个想法是绕过我的应用程序的本地身份验证,并且一旦用户使用 SAML IDP 进行身份验证,就会自动进行身份验证。我们将从提供商那里获得 X502 证书,因此他们在一定程度上是值得信赖的。

在我从 SAML 身份验证返回的应用程序中,我从 IDP 获取一封电子邮件作为标识符,并使用它来加载用户的会话。但这显然是危险的,因为 IDP 甚至可以欺骗来自另一家公司的电子邮件。我能做些什么来确保这一点?

【问题讨论】:

【参考方案1】:

在我从 SAML 身份验证返回的应用程序中,我从 IDP 获取一封电子邮件作为标识符,并使用它来加载用户的会话。但这显然是危险的,因为 IDP 甚至可以欺骗来自另一家公司的电子邮件。

没有。不是,除非您采用不安全的集成方法。

SAML2 IDP 和您的 SP 通过共享 SAML2 元数据建立相互信任,无论是作为物理文件、URL 上的有效负载等。您的 SP 只会通过元数据与它信任的 IDP 通信,元数据的有效性也可以使用适当的密钥进行验证。此外,可以对 IDP 发出的响应进行签名和加密,理论上只有收到响应的 SP 才能验证响应的完整性和真实性,并可选择对其进行解密以获取适当的数据。如果您的 SP 盲目信任来自任何 SAML2 IDP 的数据,那么这是危险的,但这是您的设置问题,而不是“IDP 欺骗”电子邮件地址。

我能做些什么来确保这一点?

确保 IDP 正在为您签署适当的响应/断言,并且您的 SP 正在正确验证响应,包括其签名。如果您担心数据可见性,您可以要求 IDP 为您加密该响应/属性/名称 ID。归根结底,如果所有这些都通过了,您将信任 IDP 并使用您正确且可信地接收回来的数据。如果 IDP 向您发送了一个“无效”的电子邮件地址,即使在验证了所有内容之后,这也是 IDP 需要处理的问题,而不是“不安全”。

【讨论】:

很好的答案,在从 IDP 进行身份验证后添加到此,您始终可以像之前使用 saml 响应执行的应用程序一样进行本地身份验证。你不应该避免本地登录。 确实很好,谢谢。所以我的SP不是盲目信任数据,我们验证X502证书和responseID。我认为我们已经得出了相同的结论,那就是信任 IDP,而不是期望他们做他们不应该做的事情。但是,如果说 Azure AD 决定欺骗电子邮件地址,理论上他们可以吗?他们会滥用信任,但这可能是对的吗? @DarshaniJayasekara 本地登录在这里有何帮助?我认为首先是本地登录将我带到这里 - 我正在基于 SAML 响应以编程方式“登录”并且我很担心这样做。

以上是关于我如何才能完全信任 SAML IDP?的主要内容,如果未能解决你的问题,请参考以下文章

SAML SP:信任 IdP 的证书

spring saml - IDP 发起的 SSO

Spring SAML 握手失败 - 无法针对受信任的密钥验证不受信任的凭据

如何在运行时在 spring-SAML 中添加新的 idp 元数据

如何在 java 或 node 中为 SAML 创建自己的 IDP

org.opensaml.saml2.metadata.provider.FilterException:元数据条目的签名信任建立失败