Procedura: configurare le credenziali in un servizio federativo

In Windows Communication Foundation (WCF), la creazione di un servizio federativo è costituito dalle procedure principali seguenti:

  1. Configurazione di un oggetto WSFederationHttpBinding o di un'associazione personalizzata simile. Per altre informazioni sulla creazione di un'associazione appropriata, vedere Procedura: Creare un WSFederationHttpBinding.

  2. Configurazione della classe IssuedTokenServiceCredential, che controlla come vengono autenticati i token emessi presentati al servizio.

In questo argomento vengono fornite informazioni dettagliate sul secondo passaggio. Per altre informazioni sul funzionamento di un servizio federativo, vedere Federazione.

Per impostare le proprietà di IssuedTokenServiceCredential nel codice

  1. Utilizzare la proprietà IssuedTokenAuthentication della classe ServiceCredentials per restituire un riferimento a un'istanza di IssuedTokenServiceCredential. L'accesso alla proprietà viene eseguito dalla proprietà Credentials della classe ServiceHostBase.

  2. Se devono essere autenticati token autocertificati, ad esempio schede CardSpace, impostare la proprietà AllowUntrustedRsaIssuers su true. Il valore predefinito è false.

  3. Popolare la raccolta restituita dalla proprietà KnownCertificates con istanze della classe X509Certificate2. Ogni istanza rappresenta un emittente da cui il servizio autenticherà i token.

    Nota

    A differenza della raccolta lato client restituita dalla proprietà ScopedCertificates, la raccolta dei certificati noti non è una raccolta con chiave. Il servizio accetta i token emessi dai certificati specificati indipendentemente dall'indirizzo del client che ha inviato il messaggio contenente il token emesso (salvo gli ulteriori limiti descritti più avanti in questo argomento).

  4. Impostare la proprietà CertificateValidationMode su uno dei valori dell'enumerazione X509CertificateValidationMode. Questa operazione può essere eseguita solo nel codice. Il valore predefinito è ChainTrust.

  5. Se la proprietà CertificateValidationMode viene impostata su Custom, assegnare un'istanza della classe X509CertificateValidator personalizzata alla proprietà CustomCertificateValidator.

  6. Se la proprietà CertificateValidationMode viene impostata su ChainTrust o su PeerOrChainTrust, impostare la proprietà RevocationMode su un valore appropriato ottenuto dall'enumerazione X509RevocationMode. Si noti che la modalità di revoca non viene utilizzata nelle modalità di convalida PeerTrust e Custom.

  7. Se necessario, assegnare un'istanza di una classe SamlSerializer personalizzata alla proprietà SamlSerializer. Per l'analisi delle asserzioni SAML personalizzate, ad esempio, è necessario un serializzatore SAML (Security Assertions Markup Language).

Per impostare le proprietà di IssuedTokenServiceCredential nella configurazione

  1. Creare un elemento <issuedTokenAuthentication> come figlio di un elemento <serviceCredentials>.

  2. Impostare l'attributo allowUntrustedRsaIssuers dell'elemento <issuedTokenAuthentication> su true in caso di autenticazione di un token autocertificato, ad esempio una scheda CardSpace.

  3. Creare un elemento <knownCertificates> come figlio dell'elemento <issuedTokenAuthentication>.

  4. Creare zero o più elementi <add><knownCertificates> come figli dell'elemento <knownCertificates>e specificare come individuare il certificato utilizzando gli attributi storeLocation,storeName,x509FindType e findValue.

  5. Se necessario, impostare l'attributo samlSerializer dell'elemento <issuedTokenAuthentication> sul nome del tipo della classe SamlSerializer personalizzata.

Esempio

Nell'esempio seguente vengono impostate le proprietà di IssuedTokenServiceCredential nel codice.

// This method configures the IssuedTokenAuthentication property of a ServiceHost.
public static void ConfigureIssuedTokenServiceCredentials(
    ServiceHost sh, bool allowCardspaceTokens, IList<X509Certificate2> knownissuers,
    X509CertificateValidationMode certMode, X509RevocationMode revocationMode, SamlSerializer ser )
{
  // Allow CardSpace tokens.
  sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = allowCardspaceTokens;

  // Set up known issuer certificates.
  foreach(X509Certificate2 cert in knownissuers)
    sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add ( cert );

  // Set issuer certificate validation and revocation checking modes.
  sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode =
      X509CertificateValidationMode.PeerOrChainTrust;
  sh.Credentials.IssuedTokenAuthentication.RevocationMode = X509RevocationMode.Online;
  sh.Credentials.IssuedTokenAuthentication.TrustedStoreLocation = StoreLocation.LocalMachine;

  // Set the SamlSerializer, if one is specified.
  if ( ser != null )
    sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser;
}
' This method configures the IssuedTokenAuthentication property of a ServiceHost.
Public Shared Sub ConfigureIssuedTokenServiceCredentials( _
    ByVal sh As ServiceHost, _
    ByVal allowCardspaceTokens As Boolean, _
    ByVal knownissuers As IList(Of X509Certificate2), _
    ByVal certMode As X509CertificateValidationMode, _
    ByVal revocationMode As X509RevocationMode, _
    ByVal ser As SamlSerializer _
    )
    ' Allow CardSpace tokens.
    sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = _
    allowCardspaceTokens

    ' Set up known issuer certificates.
    Dim cert As X509Certificate2
    For Each cert In knownissuers
        sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add(cert)
    Next cert
    ' Set issuer certificate validation and revocation checking modes.
    sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode = _
        X509CertificateValidationMode.PeerOrChainTrust
    sh.Credentials.IssuedTokenAuthentication.RevocationMode = _
    X509RevocationMode.Online

    ' Set the SamlSerializer, if one is specified.
    If Not (ser Is Nothing) Then
        sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser
    End If
End Sub

Affinché un servizio federativo autentichi un client, per il token emesso devono essere osservate le condizioni seguenti:

  • Quando la firma digitale del token emesso utilizza un identificatore della chiave di sicurezza RSA, la proprietà AllowUntrustedRsaIssuers deve essere true.

  • Quando la firma del token emesso utilizza un numero di serie dell'emittente X.509, un identificatore della chiave del soggetto X.509 o un identificatore di sicurezza dell'identificazione personale X.509, il token emesso deve essere firmato da un certificato nella raccolta restituita dalla proprietà KnownCertificates della classe IssuedTokenServiceCredential.

  • Quando il token emesso viene firmato utilizzando un certificato X.509, il certificato deve eseguire la convalida secondo la semantica specificata dal valore della proprietà CertificateValidationMode, indipendentemente dal fatto che il certificato sia stato inviato al componente come X509RawDataKeyIdentifierClause oppure ottenuto dalla proprietà KnownCertificates. Per altre informazioni sulla convalida del certificato X.509, vedere Utilizzo dei certificati.

Ad esempio, impostando la proprietà CertificateValidationMode su PeerTrust, verrebbe autenticato un token emesso il cui certificato di firma si trova nell'archivio certificati TrustedPeople. In tal caso, impostare la proprietà TrustedStoreLocation su CurrentUser o su LocalMachine. È possibile selezionare altre modalità, tra cui Custom. Quando si seleziona Custom, è necessario assegnare un'istanza della classe X509CertificateValidator alla proprietà CustomCertificateValidator. Con il validator personalizzato è possibile convalidare i certificati mediante qualsiasi criterio. Per altre informazioni, vedere Procedura: Creare un servizio che usa un validator del certificato personalizzato.

Vedi anche