2011-10-04 16 views
6

Abbiamo un'installazione di ADFS 2.0 che funziona bene per le nostre app MVC nei nostri vari ambienti. Credo che usi "autenticazione passiva" (mi sto ancora abituando alla terminologia corretta) - sicuramente è dove reindirizza l'utente al nostro proxy adfs se l'utente non è loggato e adfs reindirizza l'utente alla nostra app MVC dopo aver effettuato l'accesso.Come si modifica il file FederationMetadata.xml del WCF per varie distribuzioni?

Ora stiamo iniziando a esporre alcuni servizi Web protetti e vogliamo sfruttare questo stesso sistema di autenticazione. La mia comprensione è che voglio usare ws2007FederationHttpBinding come vincolante per farlo. Credo di avere il mio web.config di WCF tutto configurato per questo, ma la mia lotta ora è centrata sul file FederationMetadata.xml.

Guardando questo file, vedo alcune cose che ovviamente devono essere modificate, come ad esempio entityID="http://localhost/UserServices" e il certificato. Poi ci sono alcune cose che non ho idea di cosa siano e se hanno bisogno di cambiare o meno, come ad esempio EntityDescriptor ID="_2b510fe8-98b8...... e <ds:SignatureValue>CZe5mEu19/bDNoZrY8f6C559CJ........

Dove posso ottenere una migliore comprensione su come dovrei gestire questo file per i miei vari ambienti? Ho i seguenti ambienti di hosting questi servizi che saremo la distribuzione di un modo o nell'altro:

  1. workstation degli sviluppatori individuali (3x per ora, più tardi)
  2. Un ambiente Dev condiviso per chi scrive applicazioni contro questi servizi, ma non necessariamente la modifica dei servizi
  3. QA
  4. Staging
  5. di produzione (3 ambienti differenti con differenti certs/domini/etc.)

Come tale, abbiamo un processo abbastanza snello in atto che gestisce i nostri file web.config nei diversi ambienti usando le trasformazioni e trovando/sostituendo determinati token, quindi mi piacerebbe fare la stessa cosa con questo file xml. Quindi alla fine, tutto quello che sto cercando è una certa comprensione delle modifiche necessarie quando si gestisce questo file FederationMetadata.xml per i vari ambienti.

Il mio file FederationMetadata.base.xml corrente è inferiore e credo che questo è di destra (ho solo bisogno di nomi/ruoli) e ho solo bisogno di sostituire in modo intelligente i vari gettoni, come ad esempio ~RootServiceUrlTokenToReplace~, qui:

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

risposta

1

Un'applicazione FederationMetadata.xml basata su WIF non è correlata ai servizi Web basati sulle attestazioni che offre.

(Un URL che punta a) FederationMetadata.xml viene utilizzato da ADFS, per aggiornare automaticamente le informazioni da utilizzare in un trust di parte di Relying. ADFS può ad esempio interrogare regolarmente questo URL e aggiornare di conseguenza le informazioni di Relying Party Trust.

Le informazioni su un servizio Web (basato su attestazioni o altro), ovvero i relativi metadati, vengono pubblicate come documento WSDL. In un servizio basato su WCF questo è un URL che assomiglia spesso a questo: http://myhost.example.com/appName/serviceName.svc?wsdl. Il documento WSDL spesso non esiste come file fisico, ma viene generato automaticamente da WCF.

+0

Sì, so che questo non ha nulla a che fare con i WSDL. Tuttavia, questo ha molto a che fare con l'ambiente. FederationMetadata.xml originariamente renderizzato aveva "http: // localhost /" in esso più volte che è chiaramente errato e deve essere modificato per ogni diversa posizione di distribuzione. Non so a cosa modificare alcuni di questi, come l'ID EntityDescriptor o il SignatureValue. Questo è quello di cui ho bisogno per capire. – Jaxidian

+0

Sembra che vogliate proteggere i servizi Web WCF usando WIF e ADFS. Il mio punto è semplicemente che non è necessario 'FederationMetadata.xml' per quello: quel file non è usato in nessuna comunicazione di servizi web. Si potrebbe anche rimuovere questo file dall'applicazione, e tutto funziona ancora. –

+0

Fare questo significa che dovrò configurare manualmente tutto con ADFS 2.0 invece di configurare XML, correggere? E funzionerà ancora bene come un RP? Se è così, beh, questo in realtà proietta lo stesso problema altrove. Quindi ora, immagino, ho bisogno di sapere esattamente come configurare l'RP manualmente all'interno dello strumento di gestione di ADFS. – Jaxidian

0

Ho trovato una risposta parziale alla mia domanda in this blog post. Ci sto guardando più per scoprire se questo risponde a tutte le mie domande. L'ho appena trovato.A quanto pare ho bisogno di cambiare il mio EntityID (che contiene l'URL) mentre lo ridistribuisco a diversi ambienti ma il SignatureValue contiene un hash di quell'URL (tra le altre cose?) Così modificando l'URL, invalido il SignatureValue e ha bisogno di essere rigenerato Apparentemente questo FederationMetadata Generator può aiutarmi con questo.