2011-10-04 16 views
6

Tenemos una instalación de ADFS 2.0 que funciona bien para nuestras aplicaciones de MVC en nuestros diversos entornos. Creo que usa "autenticación pasiva" (todavía me estoy acostumbrando a la terminología adecuada): es definitivamente donde redirige al usuario a nuestro proxy adfs si el usuario no está conectado y adfs redirecciona al usuario a nuestra aplicación MVC. una vez que hayan iniciado sesión.¿Cómo cambio el archivo FederationMetadata.xml de WCF para varias implementaciones?

Estamos comenzando a exponer algunos servicios web seguros y queremos aprovechar este mismo sistema de autenticación. Mi entendimiento es que quiero usar ws2007FederationHttpBinding como mi enlace para hacer esto. Creo que tengo la configuración web.config de mi WCF, pero ahora mi lucha se centra en el archivo FederationMetadata.xml.

Al mirar este archivo, veo algunas cosas que obviamente es necesario cambiar, como entityID="http://localhost/UserServices" y el certificado. Luego hay algunas cosas que no tengo idea de lo que son y si necesitan cambiar o no, como EntityDescriptor ID="_2b510fe8-98b8...... y <ds:SignatureValue>CZe5mEu19/bDNoZrY8f6C559CJ........

¿Dónde puedo obtener una mejor comprensión sobre cómo debo administrar este archivo para mis diversos entornos? Tengo los siguientes entornos de alojamiento de estos servicios que vamos a desplegar en una forma u otra:

  1. estaciones de trabajo para desarrolladores individuales (3x por ahora, más tarde)
  2. Un entorno de desarrollo compartido para las personas que escriben aplicaciones contra éstos servicios, pero no necesariamente la modificación de los servicios
  3. QA
  4. Staging
  5. Producción (3 entornos diferentes con diferentes certs/dominios/etc.)

Como tal, tenemos un proceso bastante racional en el lugar para administrar nuestros archivos web.config en los diferentes entornos usando transformaciones y encontrando/reemplazando ciertos tokens, por lo que me gustaría hacer lo mismo con este archivo xml. Por lo tanto, al final, todo lo que busco es algo de comprensión sobre qué cambios son necesarios al administrar este archivo FederationMetadata.xml para mis diversos entornos.

Mi archivo FederationMetadata.base.xml actual está por debajo y creo que esto es sobre la derecha (sólo necesito nombres/papeles) y sólo hay que sustituir de forma inteligente las distintas fichas, como ~RootServiceUrlTokenToReplace~, aquí:

<?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> 

Respuesta

1

Una aplicación basada en WIF FederationMetadata.xml no está relacionada con los servicios web basados ​​en notificaciones que ofrece.

(Una URL que apunta a) FederationMetadata.xml es utilizado por AD FS, para actualizar automáticamente la información que se utilizará en un Fideicomiso de Parte que Confía. AD FS puede, por ejemplo, consultar regularmente esta URL y actualizar la información de Confianza de la Parte que Confía en consecuencia.

La información sobre un servicio web (basado en notificaciones o de otro modo), es decir, sus metadatos, se publica como un documento WSDL. En un servicio basado en WCF, esta es una URL que a menudo se ve así: http://myhost.example.com/appName/serviceName.svc?wsdl. Ese documento WSDL a menudo no existe como un archivo físico, pero WCF lo genera automáticamente.

+0

Sí, sé que esto no tiene nada que ver con los WSDL. Sin embargo, esto tiene mucho que ver con el medioambiente. El FederationMetadata.xml originalmente renderizado tenía "http: // localhost /" varias veces, lo que es claramente incorrecto y debe cambiar para cada ubicación de implementación diferente. No sé a qué cambiar algunos de estos, como el ID de EntityDescriptor o SignatureValue. ESO es lo que necesito para entender. – Jaxidian

+0

Parece que desea proteger los servicios web de WCF utilizando WIF y AD FS. Mi punto es simplemente que no necesitas 'FederationMetadata.xml' para eso: ese archivo no se usa en ninguna comunicación de servicio web. También podría eliminar este archivo de su aplicación, y todo sigue funcionando. –

+0

Haciéndolo de esta forma significa que tendré que configurar manualmente todo con ADFS 2.0 en lugar de tener el XML configurado, ¿correcto? ¿Y todavía funcionará bien como RP? Si es así, bueno, eso realmente solo proyecta el mismo problema en otra parte. Así que ahora, supongo, necesito saber exactamente cómo configurar el RP manualmente dentro de la herramienta de administración de ADFS. – Jaxidian

0

He encontrado una respuesta parcial a mi pregunta in this blog post. Lo busco más para descubrir si esto responde todas mis preguntas o no. Lo acabo de encontrar.Aparentemente, necesito cambiar mi EntityID (que contiene la URL) a medida que vuelvo a desplegar esto en diferentes entornos, pero SignatureValue contiene un hash de esa URL (entre otras cosas?) Así que al modificar la URL, invalido la SignatureValue y necesita ser regenerado Aparentemente, este FederationMetadata Generator puede ayudarme con esto.

Cuestiones relacionadas