在为我们的一个应用程序实施基于SAML的身份验证时,我遇到了一项要求,在此要求下,我们需要在通过IdP(身份提供程序)进行身份验证后恢复用户的会话。考虑以下情形-

  • 用户尝试打开页面1
  • 由于第1页需要身份验证,我们将用户重定向到IDP
  • IDP对用户进行身份验证并将其重定向回SP(服务提供商)。

  • 不幸的是,在身份验证之后,用户最终到达的是默认主页,而不是页面1。根据文档,我们可以使用relayState将信息从SP中继到IdP(在身份验证请求期间),再从IdP中继到SP。

    看起来WebSSOProfileOptions允许我们指定relayState值,但是在这种情况下,该值将不是固定的或静态的。

    我们如何将当前页面的URL传递到中继状态,以便我们可以在身份验证后恢复原样并将用户重定向回同一页面?

    最佳答案

    分辨率:
    Class WebSSOProfileOptions的官方链接演示了此函数,该函数在relayState变量中发送自定义值,即void setRelayState(String relayState)。
    将身份验证请求发送到IDP 时发送当前URL作为中继状态的编码示例

    @Bean
     public SAMLEntryPoint samlEntryPoint() {
         SAMLEntryPoint entryPoint = new SAMLEntryPoint();
         entryPoint.setDefaultProfileOptions(defaultWebSSOProfileOptions());
         return entryPoint;
     }
    @Bean
     public WebSSOProfileOptions defaultWebSSOProfileOptions() {
         WebSSOProfileOptions options = new WebSSOProfileOptions();
         options .setBinding("urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST");
         options.setRelayState(current-SP-URL);
         return options;
     }
    

    备注:
    (1)引用您的帖子“WebSSOProfileOptions看起来允许我们指定relayState值,但是在这种情况下,该值将不是固定的或静态的。”

    响应:
    是。 Why SP-initiated SSO has RelayState as random opaque value的答案声称,SP发起的SSO中的RelayState通常不是URL。取而代之的是,它是一个不透明的字符串,被IDP回显。
    这意味着“值将不会是固定的或静态的”。

    (2)引用您的问题“我们如何才能将当前页面的URL传递给中继状态,以便我们在身份验证后可以找回原样并将用户重定向到同一页面?”

    回答:
    Why SP-initiated SSO has RelayState as random opaque value的答案认为,基于规范的上述描述,RelayState只是服务提供者将用来查找最终TARGET(URL)的指针。如果SP使用RelayState将URL发送到IDP,则它将破坏安全模型。
    这意味着我们不能“将当前页面的URL传递给RelayState” ,否则,它将破坏SAML建立的安全模型。
    这就是为什么Spring SAML要求由 SP发起的SSO 生成的RelayState值将不是固定或静态的原因,即,“身份验证后,用户最终显示在默认首页而不是页面1. ”上的“”。

    (3)其他信息
    (I)对于SP发起的SSO,RelayState值应为不透明字符串。
    (II)对于由IdP启动的SSO,relayState值可以为,SP应将其重定向到的URL。这是用于RelayState的事实上的标准,正如另一个StackOveflow问题“What is exactly RelayState parameter used in SSO (Ex. SAML)?”的答案所证明的。
    (III)您不能“将身份验证请求发送到IDP时将当前URL发送为中继状态” ,否则,它将破坏SAML建立的安全模型,如Why SP-initiated SSO has RelayState as random opaque value的答案所示。

    10-06 03:07