Condividi tramite


Protezione dei messaggi con un client anonimo

Nello scenario seguente vengono illustrati un client e un servizio protetti tramite la protezione dei messaggi Windows Communication Foundation (WCF). Tra gli obiettivi di progettazione c'è quello di utilizzare la protezione dei messaggi invece che la protezione del trasporto, così che in futuro sia possibile supportare un modello basato su attestazioni più dettagliato. Per ulteriori informazioni sull'utilizzo di attestazioni dettagliate per l'autorizzazione, vedere Gestione di attestazioni e autorizzazioni con il modello di identità.

Per un'applicazione di esempio, vedere Message Security Anonymous.

Protezione dei messaggi con un client anonimo

Caratteristica Descrizione

Modalità di protezione

Messaggio

Interoperabilità

Solo WCF

Autenticazione (server)

La negoziazione iniziale richiede l'autenticazione server, ma non l'autenticazione client

Autenticazione (client)

Nessuna

Integrità

Sì, utilizzando un contesto di protezione condiviso

Riservatezza

Sì, utilizzando un contesto di protezione condiviso

Trasporto

HTTP

Servizio

Il codice e la configurazione seguenti devono essere eseguiti in modo indipendente. Eseguire una delle operazioni seguenti:

  • Creare un servizio autonomo utilizzando il codice senza alcuna configurazione.
  • Creare un servizio utilizzando la configurazione fornita, ma non definire alcun endpoint.

Codice

Nel codice seguente viene illustrato come creare un endpoint del servizio che utilizza la protezione del messaggio.

Configurazione

Invece del codice, è possibile utilizzare la configurazione seguente: L'elemento di comportamento del servizio viene utilizzato per specificare un certificato che viene utilizzato per autenticare il servizio sul client. L'elemento servizio deve specificare il comportamento utilizzando l'attributo behaviorConfiguration. L'elemento associazione specifica che il tipo di credenziale client è None, consentendo ai client anonimi di utilizzare il servizio.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceCredentialsBehavior">
          <serviceCredentials>
            <serviceCertificate findValue="contoso.com" 
                                storeLocation="LocalMachine"
                                storeName="My" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="ServiceCredentialsBehavior" 
               name="ServiceModel.Calculator">
        <endpoint address="https://localhost/Calculator" 
                  binding="wsHttpBinding"
                  bindingConfiguration="WSHttpBinding_ICalculator" 
                  name="CalculatorService"
                  contract="ServiceModel.ICalculator" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator" >
          <security mode="Message">
            <message clientCredentialType="None" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client />
  </system.serviceModel>
</configuration>

Client

Il codice e la configurazione seguenti devono essere eseguiti in modo indipendente. Eseguire una delle operazioni seguenti:

  • Creare un client autonomo utilizzando il codice (e il codice client).
  • Creare un client che non definisce alcun indirizzo di endpoint. Utilizzare invece il costruttore client che accetta il nome della configurazione come argomento. Ad esempio:

Codice

Nel codice seguente viene creata un'istanza del client. L'associazione utilizza la protezione in modalità messaggio e il tipo di credenziale client è impostato su Nessuno.

Configurazione

Nel codice seguente viene configurato il client.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator" >
          <security mode="Message">
            <message clientCredentialType="None" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://machineName/Calculator"
        binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_ICalculator" 
        contract="ICalculator"
        name="WSHttpBinding_ICalculator">
        <identity>
          <dns value="contoso.com" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

Vedere anche

Concetti

Cenni preliminari sulla protezione
Protezione delle applicazioni distribuite
Identità del servizio e autenticazione

Altre risorse

Message Security Anonymous