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

时间:2019-08-30 09:51:54

标签: single-sign-on kerberos saml-2.0 openam pingfederate

我已经成功地将SAML SSO配置为OpenAM作为SP,将PingFederate作为IDP与SP发起的SSO并使用了重定向后绑定。我正在使用kerberos适配器来实现SSO。

但是,在身份验证成功后,我无法将RelayState参数从OpenAM传递到PF并将其作为SAML自动投递表单的一部分重新获得。它始终重定向到OpenAM声明处理服务,即openam / metalias / sp

我尝试过的事情-

  1. SAML authentication and custom redirect URL

  2. SSO - SAML, Redirect a user to a specified landing page after successful log in

我在Idp的属性映射中创建了绑定,名称为“ RelayState”,但它显示为已签名的SAMLResponse的一部分,而不是自动回发表单中的多余参数,因此openam无法获取RelayState。

我还尝试将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,然后在身份验证完成向SAMLResponse表单中添加额外参数后,PF可以将其传递回SP-OpenAM。

1 个答案:

答案 0 :(得分:1)

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