在 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
我尝试过的东西 -
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 解决了这个问题。
我已成功配置 SAML SSO,OpenAM 作为 SP,PingFederate 作为 IDP,使用 SP 发起的 SSO 并使用 Redirect-Post 绑定。我正在使用 kerberos 适配器来实现 SSO。
但是,我无法将 RelayState 参数从 OpenAM 传递到 PF,并在成功验证后将其作为 SAML 自动 post 表单的一部分取回。它总是重定向到 OpenAM 断言处理服务,即 openam/metalias/sp
我尝试过的东西 -
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 解决了这个问题。