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