【问题标题】:Does Ping support multiple Audience restriction values in SAML?Ping 是否支持 SAML 中的多个受众限制值?
【发布时间】:2017-03-29 01:05:16
【问题描述】:

使用 PING 作为我的身份提供者,我是否可以选择设置多个受众值(在我为我的应用程序添加的服务提供者配置中),以便它们将在 SAML 断言的 AudienceRestriction 元素中返回? 正如我所见,PING 增加了发行人作为受众的价值,仅此而已。

示例条件元素

<ns2:Conditions NotBefore="2011-01-10T20:52:56Z" NotOnOrAfter="2011-01-10T20:54:56Z">
  <ns2:AudienceRestriction>
    <ns2:Audience>urn:saml2:partnerspid</ns2:Audience>
  </ns2:AudienceRestriction>
  <ns2:AudienceRestriction>
    <ns2:Audience>Audience-IDP</ns2:Audience>
  </ns2:AudienceRestriction>
</ns2:Conditions>

【问题讨论】:

  • 请提供一个示例响应/断言,说明您要查找的内容和原因...通常没有理由返回多个值。
  • 嗨,我添加了一个我正在寻找的示例。我在 Oauth2 saml 授权类型流中使用了这个断言。 SP 将断言发送到令牌端点并获取访问令牌。在验证中,令牌端点检查 SAML 断言是否包含它自己的端点别名作为受众值。这与 SP entityID 不同。因此,当断言不包含所需的受众时,验证会失败。

标签: single-sign-on saml pingfederate


【解决方案1】:

您必须运行 PingFed 8.0+ 才能使其工作,这是 Ping 开始允许自定义请求和响应 XML 的地方。您应该在他们的documentation 中阅读有关该主题的更多信息。

使用这个:

#AssertionType.getConditions().addNewAudienceRestriction().addAudience("whatever:eh")

会给你类似下面的元素:

<saml:Conditions NotBefore="2017-03-24T20:23:55.341Z" NotOnOrAfter="2017-03-24T20:38:55.341Z">
  <saml:AudienceRestriction>
    <saml:Audience>pingfederate:default:entityId</saml:Audience>
  </saml:AudienceRestriction>
  <saml:AudienceRestriction>
    <saml:Audience>whatever:eh</saml:Audience>
  </saml:AudienceRestriction>
</saml:Conditions>

但是,SAML 规范 (SAML-CORE-2.0, 2.5.1.4) 指出:

请注意,多个元素可以包含在一个 单个断言,并且每个断言都必须独立评估。效果 这个要求和前面的定义是在一个 给定条件,观众形成一个析取(“或”),而 多个条件形成一个连词(“AND”)。

因此,在您所说的那种格式中,您将得到一个“AND”。您的伴侣不太可能同时满足两者,因此我认为您可能正在寻找“或”。如果是这种情况,您将需要使用以下内容:

#AssertionType.getConditions().getAudienceRestrictionArray(0).addAudience("whatever:eh")

这应该产生类似的东西:

<saml:Conditions NotBefore="2017-03-24T20:20:37.046Z" NotOnOrAfter="2017-03-24T20:35:37.046Z">
  <saml:AudienceRestriction>
    <saml:Audience>pingfederate:default:entityId</saml:Audience>
    <saml:Audience>whatever:eh</saml:Audience>
  </saml:AudienceRestriction>
</saml:Conditions>

【讨论】:

  • 我可能需要戴眼镜,但您好像粘贴了两次相同的 sn-ps(第一个受众值中的一个角色除外)...
  • 不错的收获,@HansZ。!固定!
  • 看来你们那里可能还需要我 ;-)
  • 非常感谢。是的,就我而言,我需要使用 #AssertionType.getConditions().getAudienceRestrictionArray(0).addAudience("whatever:eh")。但是我还没有所需的版本。一旦我拿到它就会测试。
最近更新 更多