当前位置: 首页 > 知识库问答 >
问题:

我可以允许任何SAML身份提供程序出现在我的站点上吗?

杨星纬
2023-03-14

我有一个Web应用程序,我想允许我的用户通过SAML登录。我想允许他们通过提供IdP登录URL、注销URL、证书等来配置他们的身份提供者,或者只是一个元数据url。

此外,我的一些客户想要设置和使用他们自己的内部身份提供者。

我的问题是,一旦交换了密钥,验证了签名等,我如何才能相信身份提供者是安全的?当SAML响应进来时(特别是通过IdP发起的SSO),我如何知道NameID元素中的电子邮件地址与想要登录的合法用户有关?是什么阻止他们发送我自己的电子邮件地址以站点管理员身份登录?

我已经阅读了很多SAML 2.0规范、这里的答案和博客文章,但我还没有看到这个问题的具体解决方案。

共有2个答案

伍光济
2023-03-14

无法更改SAML标记,因为它已签名。

最终,由你来检查所有这些IDP。

因此,联合是一个手动过程

如果你结盟,你就信任。

祝宏放
2023-03-14

在进入你的问题之前,我认为清楚SSO身份验证流程很重要。

对于SAML 2.0,涉及两方,即身份提供者(IdP)和服务提供者(SP)。他们使用协议endpoint和证书进行反向通道(服务器到服务器)通信。

也就是说,您有各种各样的网络层进程来确保通信过程是安全的,不会发生中间人攻击。

然后回到你原来的问题,如果正确的话,我认为它包含以下两个主题:

  1. SAML 2.0元数据
  2. SAML 2.0属性映射

通过提供IdP登录URL、注销URL、证书等或仅提供元数据URL来配置其身份提供程序。

这些都是SAML 2.0所需的元数据,因此您可以自己配置它,或者信任您的合作伙伴以您的方式(通过in your way我的意思是不同的SAML 2.0联合服务器有自己的一组元数据,但通常它们应该是相同的)。

一旦交换了密钥,验证了签名等,我如何相信身份提供者是安全的?当SAML响应进来时(特别是通过IdP发起的SSO),我如何知道NameID元素中的电子邮件地址与想要登录的合法用户有关?是什么阻止他们发送我自己的电子邮件地址以站点管理员身份登录?

>

  • IdP必须是安全的,就像他们被黑客攻击一样(社会工程),他们可以登录到你的应用程序。

    SAML属性映射,除了SAML_SUBJECT之外,您还可以使用其他属性来确定SAML_SUBJECT的角色(如果我们可以谈论配置),或者您可以将预定义的角色映射到该用户(SAML_SUBJECT)来确定角色。

    由于SAML只是用于身份验证和为用户交换受信任的信息,因此如何使用双方同意的SAML有效负载中的信息需要由SP应用程序实现。

    关于@nzpcmad评论的令牌操作,我认为这是可能的,当PingFederate通过OpenToken适配器与SP应用程序对话时,这就是PingFederate中所谓的契约履行。Okta和OAuth0都有类似的概念。

    希望这能回答你的问题。

  •  类似资料:
    • 我正在寻找通过内部ADF和shibboleth Idp(身份提供商)实现SAML身份验证的解决方案。 有没有人有使用onelogin php工具包的经验? 此库是否适合或仅用于onelogin SAML Idp? https://github.com/onelogin/php-saml 看起来很有希望,另一种选择可能是simpleSamlphp,但onelogin似乎更受欢迎。 非常感谢

    • 我需要使用谷歌身份提供商Hi将SAML 2.0与我们的应用程序集成 我们的应用程序目前在其架构中使用谷歌云平台和Firebase,我被指派使用Okta将SAML 2.0集成到应用程序中。我对两个平台上的不同术语感到困惑。我一直在Okta和谷歌云平台上遵循指南,但仍然无法成功解决这个问题。 我的问题来自Okta和谷歌云平台,我将在这里逐一提问 Okta创建一个新的应用程序时 受众URI(SP实体ID

    • 故事是,我需要让我的网站作为身份提供者(读:IDP)。网站本身位于Zend平台上。Idea正在制作一个IDP控制器,服务提供商(阅读:SP)通过该控制器联系IDP。由于它必须是网站的一部分,我需要包括一些扩展,可以轻松地用于响应来自SP的SAML请求。 我从以下网站找到了PHP扩展列表:https://wiki.surfnetlabs.nl/display/OSP/RFC-OpenSAMLphp,

    • 我已经创建了身份提供程序,并且从浏览器中它工作正常。 参考:密钥斗篷身份提供程序后代理登录抛出错误 从浏览器,我可以使用外部IDP登录,如果外部IDP用户不在keycloak中,它会在keyclock中创建,这绝对没问题,并重定向到仪表板。 但我的问题是,我们如何用keycloak rest api实现这个流程? 是否有任何api用于使用外部IDP登录,并将获得外部IDP的令牌以及密钥斗篷的令牌?

    • 我使用Identity server 4和OIDC实现了身份验证和授权,以允许访问我们的应用程序的客户端获得访问我们的资源服务器(web API)所需的令牌。这是当前的体系结构: Identity Server 4使用自定义数据库对用户进行身份验证 资源API(ASP.NET核心) 角度2前端 我需要实现SSO,来自其他系统的用户将从他们的身份提供者传递SAML2断言,以允许他们访问我们的资源AP

    • 我正在使用Spring Security的SAML 2.0将我的服务提供商连接到多个身份提供商。 Spring的SAML 2.0文档中的所有内容都是有意义的。我已经阅读了许多有用的教程,包括这篇,它们与我现有的代码类似。 但是,我缺少在哪里以及如何为给定用户选择身份提供者。 我了解SAMLDiscovery可用于将身份提供程序选择委托给第三方服务。我还了解如何配置多个身份提供者。但我正在寻找一种方