代码之家  ›  专栏  ›  技术社区  ›  James Daily

PingFederate IdP启动。ping:如何传递要放置到SAML属性中的数据?

  •  0
  • James Daily  · 技术社区  · 8 年前

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

    E、 g.,是否有其他方法将数据传递到startSSO。除了潜入TargetResource之外,还能从浏览器请求中ping吗?

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   Andrew K.    8 年前

    参数被添加到中继状态的原因是您对它们进行了URL编码,所以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启动的事务来实现这一点。

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