Condividi tramite


Protezione dei messaggi tramite client con tipo di credenziale UserName

Nella figura seguente sono illustrati un servizio e un client Windows Communication Foundation (WCF) protetti tramite protezione a livello di messaggio. Il servizio viene autenticato con un certificato X.509. Il client esegue l'autenticazione utilizzando un nome utente e una password.

Per un'applicazione di esempio, vedere Message Security User Name.

Sicurezza dei messaggi con l'autenticazione del nome utente.

Caratteristica Descrizione

Modalità di protezione

Messaggio

Interoperabilità

Solo Windows Communication Foundation (WCF)

Autenticazione (server)

La negoziazione iniziale richiede l'autenticazione server

Autenticazione (client)

Nome utente/password

Integrità

Sì, utilizzando un contesto di protezione condiviso

Riservatezza

Sì, utilizzando un contesto di protezione condiviso

Trasporto

HTTP

Associazione

WSHttpBinding

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:

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

Client

Codice

Il codice seguente crea il client. L'associazione riguarda la protezione della modalità messaggio e il tipo di credenziale client è impostato su UserName. Il nome utente e la password possono essere specificati solo tramite codice (non è configurabile). Il codice per restituire il nome utente e la password non è riportato qui perché deve essere eseguito a livello di applicazione. Utilizzare, ad esempio, una finestra di dialogo Window Form per chiedere all'utente i dati.

Configurazione

Il codice seguente configura il client. L'associazione riguarda la protezione della modalità messaggio e il tipo di credenziale client è impostato su UserName. Il nome utente e la password possono essere specificati solo tramite codice (non è configurabile).

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator" >
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </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
Identità del servizio e autenticazione

Altre risorse

Message Security User Name
<identity>