【问题标题】:trying to implement SSO for dynamics 2011 w/ ADFS 2.0 claims- claims not being passed through尝试使用 ADFS 2.0 声明为 Dynamics 2011 实施 SSO - 声明未通过
【发布时间】:2013-04-15 11:55:23
【问题描述】:

我正在尝试为 microsoft dynamics 2011 实现 SSO,如本文所述(写得非常糟糕)walkthrough
我已将我的 ASP.NET 网站配置为 ADFS 管理器中的依赖方,并按照说明添加 STS 引用。
我已经为 ADFS 中的 UPN 字段定义了一个发布转换规则。

在我的 ASP.NET 应用程序中,当这样做时-
IClaimsIdentity claimsIdentity = ((IClaimsPrincipal)(Thread.CurrentPrincipal)).Identities[0]; 我确实得到了一个 Microsoft.IdentityModel.Claims.ClaimsIdentity 的实例,但是,它的 Claims 集合是空的。

但是,我注意到,由“添加 sts”向导生成的 FederationMetadata.xml 仅包含 2 个 <auth:ClaimType> 元素 - 对于 namerole,两者都是 optional=true。
但是,如果我尝试手动编辑和更新我的依赖方的 FederationMetadata.xml 以将 upn 添加为声明类型,或者将现有声明类型之一设为非可选,我会遇到以下错误 - ID6018 Digest verification failed...。 如果我将两者都恢复为“可选=真”,则不会发生错误。

谁能提供有关如何将UPN 字段添加到我的 ASP.NET 应用程序的任何见解?
此外,我们将不胜感激比我提到的更好的操作方法/演练。

我不确定在这里提供什么进一步的信息,所以我将发布我的应用程序的FederationMetadata.xml

<?xml version="1.0" encoding="utf-8"?>

<EntityDescriptor ID="_bad84517-5281-47e8-be9d-2e1a78eae772" entityID="https://MyAspnetSite.com:4455/"
                  xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
      <ds:Reference URI="#_bad84517-5281-47e8-be9d-2e1a78eae772">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
        <ds:DigestValue>
          eWoZYLA/oMNMWd+S9m0TlbIg2rUSuumAckA0BTdAqbg=
        </ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>
      yMubsY42ZblFDP4ZFEO06uT317c/xdMUF7PrOhPpShkDtbigg1TWq3tGYEa35+xpfjqQCseHJH07ftkxOH6t0u6ngqbGCmZ4yaOBTA3bdbGMGull6WwLSQIxNn2eR1mRzyF2mIM3t4Jfl6EoOZ0msnsyUTVI9Oq03eFweDN2zoI=
    </ds:SignatureValue>
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
      <X509Data>
        <X509Certificate>
           certificate data
        </X509Certificate>
      </X509Data>
    </KeyInfo>
  </ds:Signature>
  <RoleDescriptor xsi:type="fed:ApplicationServiceType"
                  protocolSupportEnumeration="http://schemas.xmlsoap.org/ws/2005/02/trust http://docs.oasis-open.org/ws-sx/ws-trust/200512"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fed="http://docs.oasis-open.org/wsfed/federation/200706">
    <KeyDescriptor use="encryption">
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <X509Data>
          <X509Certificate>

           certificate data
          </X509Certificate>
        </X509Data>
      </KeyInfo>
    </KeyDescriptor>
    <fed:ClaimTypesRequested>
      <auth:ClaimType Uri="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" Optional="false"
                      xmlns:auth="http://docs.oasis-open.org/wsfed/authorization/200706" />
      <auth:ClaimType Uri="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" Optional="false"
                      xmlns:auth="http://docs.oasis-open.org/wsfed/authorization/200706" />
      <auth:ClaimType Uri="http://schemas.microsoft.com/ws/2005/05/identity/claims/upn" Optional="false"
                      xmlns:auth="http://docs.oasis-open.org/wsfed/authorization/200706" />
    </fed:ClaimTypesRequested>
    <fed:TargetScopes>
      <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
        <Address>
          https://MyAspnetSite.com:4455/
        </Address>
      </EndpointReference>
    </fed:TargetScopes>
    <fed:ApplicationServiceEndpoint>
      <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
        <Address>
          https://MyAspnetSite.com:4455/
        </Address>
      </EndpointReference>
    </fed:ApplicationServiceEndpoint>
  </RoleDescriptor>
</EntityDescriptor>

【问题讨论】:

    标签: c# dynamics-crm-2011 wif adfs2.0


    【解决方案1】:

    您不能直接修改 FederationMetadata 文档,因为它是经过数字签名的。如果您这样做,它将被 ADFS 拒绝,因为它认为它已被篡改。

    无论如何,元数据文档不控制在 ADFS 中发出的声明。除了添加 RP,您还需要在 ADFS 中创建规则,定义将为此 RP 发出的声明。

    This other doc for CRM 解释了如何做到这一点。

    【讨论】:

    • 谢谢,我看过这篇文章,并按照它在我的 RP 中添加了 upn 声明。也许我会尝试添加那里提到的其他声明(名称和 SID)并报告
    • 好吧,我已经关注了该文档,但仍然 - 我收到 0 个索赔......还有其他想法吗?
    • 您提到“您的 ASP.NET 网站”。在 ADFS 中,每个应用程序都是不同的依赖方。 CRM 将是一个,您的应用程序将是另一个。您需要为每个配置令牌发行规则。 HTH
    • 是的,我当然有。对不起,如果我不清楚;我将其设置为不同的 RP,具有与(工作)crm RP 相同的发行规则
    • 我将从最简单的配置开始:一个带有 ADFS 的简单网站,然后将 CRM 添加到图片中。
    【解决方案2】:

    好吧,为了将来可能遇到这种情况的可怜人的利益,我将记录下我遇到的问题:
    “添加 STS 引用”向导以错误的方式更改了我的 web.config。

    我不知道为什么会这样,也许是因为我有一个预先存在的 &lt;system.serviceModel&gt; 部分,但向导在 &lt;system.serviceModel&gt; \ &lt;bindings&gt; \ &lt;ws2007FederationHttpBinding&gt; 下添加了 &lt;claimTypeRequirements&gt; 部分和各种其他东西似乎什么都做。
    我最终删除了它并手动添加了适当的<microsoft.identityModel> 部分。
    这似乎成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多