PingFederate IdP startSSO.ping:如何传递要放入SAML属性的数据?

时间:2018-01-30 13:49:51

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

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

目前,我的链接如下所示:

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处理请求后,它最终向其他公司发布帖子,将整个TargetResource复制到RelayState,params和all:

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有关吗?

,有没有其他方法可以将数据从浏览器请求传递到startSSO.ping,除了将它们偷偷带入TargetResource?

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

1 个答案:

答案 0 :(得分:2)

将参数添加到中继状态的原因是因为你对它们进行了URLE编码,所以PingFed认为它们只是TargetResource的一部分。

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

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

我应该指出两件事,第一件事是showstopper:

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

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