尝试为dynamics 2011实现SSO w/ADFS 2.0声明-声明未通过

本文关键字:0声明 声明 ADFS dynamics 2011 实现 SSO | 更新日期: 2023-09-27 18:09:18

我正在尝试为microsoft dynamics 2011实现SSO,如本演练中所述(编写得非常糟糕(
我已经将我的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,这两个元素都是可选的=true
但是,如果我尝试手动编辑和更新依赖方的FederationMetadata.xml以将upn添加为索赔类型,或者使现有索赔类型之一不可选,我会遇到以下错误-ID6018 Digest verification failed...
如果两者都恢复为"optional=true",则不会发生错误。

有人能提供任何关于如何将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>

尝试为dynamics 2011实现SSO w/ADFS 2.0声明-声明未通过

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

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

CRM的另一个文档解释了如何做到这一点。

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

我不知道为什么,也许是因为我有一个预先存在的<system.serviceModel>部分,但向导在<system.serviceModel> ' <bindings> ' <ws2007FederationHttpBinding>下添加了<claimTypeRequirements>部分和其他各种东西,它们似乎并没有真正起到任何作用
我最终删除了它,并手动添加了相应的<microsoft.identityModel> 部分
这似乎奏效了。