代码之家  ›  专栏  ›  技术社区  ›  Apothis

需要帮助了解saml metatdata

  •  0
  • Apothis  · 技术社区  · 7 年前

    我正在与第三方集成,对于索赔配置,他们建议我们创建sAM帐户名称到名称ID,并在SAML响应中不断获取此错误:

    <samlp:Status>
        <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
        <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy" />
        </samlp:StatusCode>
    </samlp:Status>
    

    所以我假设我没有发送正确格式的NameID。在SP的metatdata中,他们列出了以下内容:

    <NameIDFormat>
        urn:oasis:names:tc:SAML:2.0:nameid-format:transient
    </NameIDFormat>
    

    没错,我假设我应该使用暂时的NameID格式。然而,这也行不通,供应商坚称他们希望我们的SAML响应使用urn:oasis:names:tc:SAML:1.1:nameid格式:未指定为Name-ID格式。据我所知,这是ADF的默认设置。

    作为测试,我遵循以下步骤: https://blogs.msdn.microsoft.com/card/2010/02/17/name-identifiers-in-saml-assertions/ 并且能够获得一个虚假的NameID(transient)传递到供应商的站点,然后在浏览器中显示用户名无效,所以至少我得到了一些信息,让我相信我的思路是正确的,他们的身份验证服务器在他们的应用程序不正确的情况下期望出现transient。

    我会尝试以下步骤,但我不想影响我的整个索赔提供商: https://social.technet.microsoft.com/wiki/contents/articles/4038.ad-fs-2-0-how-to-request-a-specific-name-id-format-from-a-claims-provider-cp-during-saml-2-0-single-sign-on-sso.aspx

    我们正在为ADFS服务器运行Server 2012 R2。这不是我们配置的第一个中继方信任,而且我们的设置与其他供应商配合良好。然而,我对管理ADF相对较新,所以我可能错过了一些简单的东西。

    如有任何想法或指导,将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  1
  •   ComponentSpace    7 年前

    如果您的依赖方在ADFS中的声明映射包括Active Directory samAccountName到SAML NameID,那么服务提供商元数据指定的“urn:oasis:names:tc:SAML:2.0:NameID格式:transient”实际上没有多大意义,因为该值不是transient。

    根据SAML v2.0规范,SAML authn请求中的可选NameIDPolicy“指定用于表示请求主题的名称标识符的约束”。

    实际上,更简单的方法是不包含NameIDPolicy,因此默认为“urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified”,或者显式使用此值。

    综上所述,可以安全地忽略服务提供商元数据中的NameIDFormat,并且authn请求中不包括NameIDPolicy。

        2
  •  1
  •   Apothis    7 年前

    SP可以根据其格式拒绝索赔,这最终是问题所在。然后,解决方案是SP要么更改其要求,要么必须以所需格式发送索赔。

    在这种情况下,SP要求声明是暂时的,即使他们口头上要求未指定(默认)。与系统打交道时,口头索赔要求不算数!

    要使用此SP配置ADF,只需:

    • 使用规则模板创建转换规则:将LDAP属性作为声明发送
      • LDAP属性是SAM帐户名
      • 传出声明类型是您想要的任何类型(自定义文本,而不是下拉列表中的文本)
    • 使用规则模板创建另一个转换规则:转换传入声明
      • 传入索赔类型与传出索赔类型之前的类型相同。
      • 传出声明类型为名称ID,格式为临时标识符。

    这将允许sAM帐户名以瞬态格式发送到SP,即使我们知道该属性根据定义是非瞬态的。

    请参见屏幕截图:

    enter image description here

    enter image description here

    enter image description here