在 PingFederate(IDP) OpenAM (SP) 与 Sp 发起的 sso 之间传递 RelayState

Passing RelayState between PingFederate(IDP) OpenAM (SP) with Sp-initiated sso

我已成功配置 SAML SSO,OpenAM 作为 SP,PingFederate 作为 IDP,使用 SP 发起的 SSO 并使用 Redirect-Post 绑定。我正在使用 kerberos 适配器来实现 SSO。

但是,我无法将 RelayState 参数从 OpenAM 传递到 PF,并在成功验证后将其作为 SAML 自动 post 表单的一部分取回。它总是重定向到 OpenAM 断言处理服务,即 openam/metalias/sp

我尝试过的东西 -

  1. SAML authentication and custom redirect URL

我在 Idp 中使用名称 "RelayState" 在属性映射中创建了绑定,但它显示为签名 SAMLResponse 的一部分,而不是自动 post 返回形式中的额外参数,因此 openam 无法获取中继状态。

我还尝试将 RelayState 作为 url 编码传递,并使用名称 TargetResource 传递它。但是运气不好。

<!-- template name: form.autopost.template.html -->

 #set( $messageKeyPrefix = "form.autopost.template." )

<html>
    <head>
        <title>$templateMessages.getMessage($messageKeyPrefix, "title")</title>
        <meta name="referrer" content="origin"/>
        <meta http-equiv="x-ua-compatible" content="IE=edge" />
    </head>
    <body onload="javascript:document.forms[0].submit()">
       <noscript>
            <p>
                <strong>$templateMessages.getMessage($messageKeyPrefix, "noteTitle"):</strong> $templateMessages.getMessage($messageKeyPrefix, "note")
            </p>
        </noscript>
        <form method="post" action="$action">
            #foreach( $name in $formControls.keySet() )
            <input type="hidden" name="$escape.escape($name)" value="$escape.escape($formControls.get($name))"/>
            #end
            <input type="hidden" name="RelayState" value="https://www.google.com"/>
            <noscript><input type="submit" value="$templateMessages.getMessage($messageKeyPrefix, "resume")"/></noscript>
        </form>
    </body>
</html>


我出于好奇修改了 pingfederate autopost 表单以强制包含 RelayState 参数并且它起作用了。

所以我需要找到一种方法,我可以将此信息传递给 PF,然后 PF 可以在身份验证完成后将其传递回 SP-OpenAM,向 SAMLResponse 表单添加额外的参数。

使用 'saml2/jsp/spSSOInit.jsp' 而不是 SAML2 身份验证模块 URL 解决了这个问题。