如何更改我的WCF的FederationMetadata.xml文件以进行各种部署?

时间:2011-10-04 15:45:37

标签: wcf web-services adfs2.0 federated-identity

我们有一个ADFS 2.0安装,适用于我们各种环境中的MVC应用程序。我相信它使用“被动身份验证”(我仍然习惯于正确的术语) - 如果用户未登录并且adfs将用户重定向回我们的MVC应用程序,它肯定会将用户重定向到我们的adfs代理一旦他们登录。

我们现在开始公开一些安全的Web服务,并希望利用这个相同的身份验证系统。我的理解是我想用ws2007FederationHttpBinding作为我的绑定来做到这一点。我相信我有我的WCF的web.config所有设置,但我的斗争现在围绕FederationMetadata.xml文件。

查看此文件,我看到一些显然需要更改的内容,例如entityID="http://localhost/UserServices"和证书。然后有些事情我不知道它们是什么以及它们是否需要改变,例如EntityDescriptor ID="_2b510fe8-98b8......<ds:SignatureValue>CZe5mEu19/bDNoZrY8f6C559CJ.......

在哪里可以更好地了解如何为各种环境管理此文件?我有以下托管这些服务的环境,我们将以这种或那种方式进行部署:

  1. 各个开发人员工作站(目前为3倍,稍后)
  2. 针对这些服务编写应用程序但不一定修改服务的人员的共享开发环境
  3. QA
  4. 分段
  5. 生产(具有不同证书/域/等的3种不同环境)
  6. 因此,我们有一个相当简化的流程来管理我们在不同环境中使用转换和查找/替换某些令牌的web.config文件,所以我想对这个xml文件做同样的事情。所以最终,我正在寻找的是在为我的各种环境管理这个FederationMetadata.xml文件时需要进行哪些更改。

    我当前的FederationMetadata.base.xml文件如下所示,我相信这是正确的(我只需要名称/角色),我只需要在这里智能地替换各种令牌,例如~RootServiceUrlTokenToReplace~

    <?xml version="1.0" encoding="utf-8"?>
    <EntityDescriptor ID="~EntityDescriptorIdTokenToReplace~" entityID="http://~RootServiceUrlTokenToReplace~" 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="#~ReferenceURITokenToReplace~">
            <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>~DigestValueTokenToReplace~</ds:DigestValue>
          </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>~SignatureValueTokenToReplace~</ds:SignatureValue>
        <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
          <X509Data>
            <X509Certificate>~CertificateTokenToReplace~</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>~CertificateTokenToReplace~</X509Certificate>
            </X509Data>
          </KeyInfo>
        </KeyDescriptor>
        <fed:ClaimTypesRequested>
          <auth:ClaimType Uri="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" Optional="true" xmlns:auth="http://docs.oasis-open.org/wsfed/authorization/200706" />
          <auth:ClaimType Uri="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" Optional="true" xmlns:auth="http://docs.oasis-open.org/wsfed/authorization/200706" />
        </fed:ClaimTypesRequested>
        <fed:TargetScopes>
          <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
            <Address>http://~RootServiceUrlTokenToReplace~</Address>
          </EndpointReference>
        </fed:TargetScopes>
        <fed:ApplicationServiceEndpoint>
          <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
            <Address>http://~RootServiceUrlTokenToReplace~</Address>
          </EndpointReference>
        </fed:ApplicationServiceEndpoint>
      </RoleDescriptor>
    </EntityDescriptor>
    

2 个答案:

答案 0 :(得分:1)

基于WIF的应用程序FederationMetadata.xml与其提供的基于声明的Web服务无关。

AD FS使用

(指向的URL)FederationMetadata.xml来自动更新要在依赖方信任中使用的信息。例如,AD FS可以定期查询此URL,并相应地更新信赖方信任信息。

关于Web服务(基于声明或其他)的信息,即其元数据,作为WSDL文档发布。在基于WCF的服务中,这是一个通常如下所示的URL:http://myhost.example.com/appName/serviceName.svc?wsdl。该WSDL文档通常不作为物理文件存在,而是由WCF自动生成。

答案 1 :(得分:0)

我找到了问题in this blog post的部分答案。我正在调查它以发现这是否能解答我的所有问题。我刚发现它。显然我需要更改我的EntityID(包含URL),因为我将其重新部署到不同的环境,但SignatureValue包含该URL的哈希值(以及其他内容?)所以通过修改URL,我使SignatureValue无效,它需要再生。显然,这FederationMetadata Generator可以帮助我解决这个问题。