Condividi tramite


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 una classe WSFederationHttpBinding o di un'associazione personalizzata simile. Per ulteriori informazioni su sulla creazione di un'associazione appropriata, vedere Procedura: creare una classe 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 ulteriori informazioni su 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.

    ms730131.note(it-it,VS.100).gifNota:
    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. L'impostazione predefinita è 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><issuedTokenAuthentication> come figlio dell'elemento .

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

  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 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
// 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;
}

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 ulteriori informazioni su sulla convalida dei certificati 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 ulteriori informazioni, vedere Procedura: creare un servizio che utilizza un validator del certificato personalizzato.

Vedere anche

Attività

Esempio di federazione
Procedura: disattivare sessioni protette in un'associazione WSFederationHttpBinding
Procedura: creare una classe WSFederationHttpBinding
Procedura: creare un client federato

Concetti

Federazione
Federazione e attendibilità
Utilizzo dei certificati
Modalità di autenticazione di SecurityBindingElement