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