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

如何维护身份提供者(IdP)发起的SAML sso中的状态参数?

颜嘉福
2023-03-14

我从SAML基于服务提供商的SSO开始。由于用户必须在继续登录之前输入电子邮件,因此启动了一个状态变量并将其传递给SSO。它通过回调URL返回,因此再次进行检查以确保其正常。它可以抵御CSRF攻击。

现在IdP启动的SSO根本不允许我设置状态变量。登录从身份提供商开始,仅向应用提供一个认证令牌。我从一开始就不知道是哪个用户在进行身份验证。如果我删除状态变量检查,它也可能触发CSRF攻击。

我还在rails中使用omniauth,这使得状态变量成为一个强制参数,SSO提供程序是auth0

如何将状态变量附加到IdP启动的SSO解决方案?

共有1个答案

章子航
2023-03-14

IDP-init-SSO SAML流中的RelayState参数的实际标准值是在SP上成功验证SAML断言后要将用户发送到的URL。这将适用于绝大多数SAML部署。

然而,该机制确实不能防止CSRF攻击,这就是为什么规范对IDP-init-SSO中的RelayState的值保持沉默,并允许在IDP和SP之间就通过该值防止CSRF的机制达成一致参数。一种这样的机制是在RelayState中使用一个签名值,但如上所述,没有任何东西是标准化的,因此它将依赖于IDP和SP之间的双边html" target="_blank">协议,而这种协议是不缩放的。

总之:将您希望用户访问的URL的值作为您发送给SP的未经请求的SAML响应中的RelayState值发送给SP。如何让IDP的SAML堆栈做到这一点是特定于实现的。对于Auth0,您可以在以下网址阅读:https://auth0.com/docs/protocols/saml/saml-configuration#idp-initiated-sso,在您的情况下,它看起来像:https://{帐户名称}。auth0.com/samlp/YOUR_CLIENT_ID?RelayState=http://FINAL_DESTINATION_URL

 类似资料:
  • SAML是否有现成的实现将AEM作为另一个应用程序的IDP。我在谷歌上搜索了一下,发现AEM有一个OOTB配置,可以充当服务提供商(SP)。请提供信息或参考资料,使AEM成为IDP,以便授权AEM中的用户通过使用单点登录(SSO)使用其他服务提供商。提前谢谢。

  • 关于这一高级话题,请先阅读提供者状态一节的介绍。 当按照以下形式来阅读时,提供者状态中的文本应该具有足够的可读性(自动生成的文档是按这样的形式展示的): Given an alligator with the name Mary exists * Upon receiving a request to retrieve an alligator by name ** from Some Consu

  • 契约中的各个交互应该是在互相隔离状态下进行验证的,不得持有前一个交互中的上下文。依赖于之前测试产出结果的测试将会是脆弱的,而且会将你重新陷入到集成测试的泥潭中,而这正是想通过使用契约测试来极力摆脱的困境。 那么怎样测试那些依赖于提供者中已存在的数据的请求呢?提供者状态允许你在交互发生前就可以向数据源注入数据,实现对提供者预置数据,这样就可以生成与消费者期望相匹配的响应了。消费者状态的名字是在消费者

  • 我正在尝试将openam配置为身份提供程序以测试我的基于SAML的服务提供程序应用程序。 我搜索了很多,看到了openam的文档。openam支持很多东西,我现在可能不需要这些东西。我不希望阅读整个文档,因为这将花费大量时间阅读我现在不想测试的内容。我甚至在网站上看到了chatpet 9“管理SAML 2.0 SSO”http://docs.forgerock.org/en/openam/10.0

  • 使用API,命令行或在Hyperledger Composer Playground中使用ID卡,可以向参与者发放新的身份。一旦发放了新的身份,参与者就可以使用该身份在参与者上下文中与业务网络进行交互。 使用Hyperledger Fabric时,Hyperledger Composer使用Hyperledger Fabric证书颁发机构(CA)来注册新的登记证书,从而发放新的身份。Hyperle

  • 我的问题是每次调用distinctByKey并产生新的ConcurrentHashMap。如何使用新的ConcurrentHashMap<>()维护状态;?