是否可以将初始 SAML 请求与从 IDP 收到的 SAML 断言相关联?



我正在寻找一种方法,将我向 IDP 发出的 SAML 请求与它发回的 SAML 断言联系起来。有没有办法做到这一点?

我的一个想法是使用SessionIndex。我发现在实践中,在某些情况下可以使用 SessionIndex 来执行此操作,因为某些 SAML 服务器将初始请求中的 ID 作为 SAML 断言中的 SessionIndex 返回,但我也发现这不是普遍完成的/规范似乎不需要。似乎 SessionIndex 的意图只是将 SAML 断言与后续调用(例如注销尝试)绑定在一起,因此不需要将其绑定到初始请求。我从这篇文章中得出了这个结论,它说"至少一个包含 MUST 的断言包含一个元素,其中至少有一个元素包含 urn:oasis:names:tc:SAML:2.0:cm:bearer 的方法。如果身份提供程序支持第 4.4 节中定义的单点注销配置文件,则任何此类身份验证语句都必须包含 SessionIndex 属性,以启用服务提供商的每会话注销请求。 我还回顾了这篇文章,它分解了SessionIndex的使用,我认为支持同样的结论。

我在规范中没有看到任何其他看起来很有希望的东西,但我希望我可能遗漏了一些东西 - 是否有任何可靠的方法可以在 SAML 请求中将数据传递给 IDP 并将其恢复到 SAML 断言中?

仅供参考,我想要这样做的原因是支持移动 sso 登录,其中我的移动设备使用嵌入式 Web 浏览器对我的 Web 服务器进行 OAuth2 调用,Web 服务器对用户进行身份验证,然后通过重定向将授权代码发回移动设备。我想使用 PKCE 来保护移动设备和 Web 服务器之间的 OAuth2 流,但这需要我能够使用共享代码将初始请求调用绑定到最终重定向。

至少可以使用两种方法,只要用户旅程从他们尝试访问的页面上开始,就可以将其作为服务提供商发起的身份验证请求。作为基于 SAML 的联合中的服务提供商,您可以通过向身份提供商发送AuthnRequest来启动该过程。

第一种方法是通过跟踪 AuthnRequest 的ID.在一个好的 SAML 实现中,AuthnRequest 的 ID 是大而随机的,在我们的一生中可能无法重复。SAML 配置文件规范在第 625-626 行上说:

如果包含消息是对<AuthnRequest>的响应,则InResponseTo属性必须与请求的ID匹配。

因此,只要您跟踪发送的 ID,您就可以将请求的ID与响应的inResponseTo相关联。

您可以使用的第二种方法是RelayState.这是 AuthnRequest 的一个恰当命名的元素,可用于将状态传输到身份提供程序。这是一个字段,您可以根据需要用作服务提供商,响应者必须将其发回。绑定规范在第 265-271 行说:

一些绑定定义了用于保留和 传达状态信息。当在 将请求消息作为 SAML 协议的初始步骤传达,它 对装订的选择和使用提出要求 随后用于传达响应。即,如果 SAML 请求 消息伴随着中继状态数据,然后是 SAML 响应程序 必须使用绑定返回其 SAML 协议响应,该绑定也 支持中继状态机制,并且它必须放置确切的 中继状态数据它收到的请求与相应的请求一起放入相应的 响应中的中继状态参数。

因此,您可以在该字段中放置一些内容,并且 IdP 必须原封不动地将其鹦鹉学舌。你应该确保你放在那里的东西不会损害用户或安全性,所以要注意你如何使用它。它最终会在某个地方的日志中结束。

相关内容

  • 没有找到相关文章

最新更新