PingFederate IdP startSSO.ping:如何将数据传递到 SAML 属性中?

PingFederate IdP startSSO.ping: How to pass data to be placed into SAML attributes?

我需要在 SSO 期间使用 PingFederate 将数据从一个系统传递到另一个系统。

目前我的 link 看起来像这样:

https://pingfederate.myexample.org/startSSO.ping?TargetResource=https%3A%2F%2Fwebapp.othercompany.org%3FkeepParam%3DkeepThisOnURLparamOne%3DvalueOne%26paramTwo%3DvalueTwo

TargetResource,已解码,如下所示:

https://webapp.othercompany.org?
    keepParam=keepThisOnURL
    &paramOne=valueOne
    &paramTwo=valueTwo

在 pingfederate 处理请求后,它最终向 othercompany 发出 post,将整个 TargetResource 复制到 RelayState、params 和所有:

POST https://sso.othercompany.org
SAMLResponse: {paramOne: valueOne; paramTwo: valueTwo} //(in actual saml format)
RelayState: https://webapp.othercompany.org?keepParam=keepThisOnURL&paramOne=valueOne&paramTwo=valueTwo

我的目标是以某种方式将 paramOne 和 paramTwo 传递到 SAML 属性中,但不将这些参数传递到 RelayState,只保留 keepParam=keepThisOnURL:

POST https://sso.othercompany.org
SAMLResponse: {paramOne: valueOne; paramTwo: valueTwo} //(in actual saml format)
RelayState: https://webapp.othercompany.org?keepParam=keepThisOnURL

这可能与 PingFederate 相关吗?

例如,除了将数据偷偷放入 TargetResource 之外,还有其他方法可以将数据从浏览器请求传递到 startSSO.ping 吗?

或者如果它们只能附加到 TargetResource,是否可以在复制到 RelayState 之前修改值(去除大部分参数)?

参数被添加到中继状态的原因是因为您对它们进行了 URLEncoded,所以 PingFed 认为它们只是 TargetResource 的一部分。

相反,你会做这样的事情:

https://pingfederate.myexample.org/idp/startSSO.ping?
  paramOne=valueOne&
  paramTwo=valueTwo&
  TargetResource=https%3A%2F%2Fwebapp.othercompany.org%3FkeepParam%3DkeepThisOnURL

我应该指出两点,第一点是一个亮点:

  • 不支持通过在 startSSO.ping 调用中传递的参数来实现属性,并且在满足当前两个功能请求 PPQ-1141 和 PPQ-2815 中的至少一个之前无法正常工作。这些目前都没有安排在开发序列中(低请求量),因此如果这对您的工作至关重要,请与您的 Ping 客户主管联系以传达您的需求。
  • 我应该指出,从操作的角度来看,这种总体方法可能没有多大意义,仅仅是因为这意味着您将依赖于 IdP 发起的交易,因为您无法实现这一点使用 SP 发起的交易。

基于这些,我建议尝试构建另一种解决方案,您可以通过该解决方案设置这些属性,我认为这可能很困难 - 特别是如果它们仅在运行时派生,而不是通过查询数据存储。