Trasporto WS con credenziali del messaggioWS Transport With Message Credential

In questo esempio viene illustrato l'utilizzo della sicurezza del trasporto SSL in combinazione con l'inclusione delle credenziali client nel messaggio.This sample demonstrates the use of SSL transport security in combination with client credential being carried in the message. In questo esempio viene usata l'associazione wsHttpBinding.This sample uses the wsHttpBinding binding.

Per impostazione predefinita, l'associazione wsHttpBinding consente la comunicazione HTTP.By default, the wsHttpBinding binding provides HTTP communication. Se viene configurata per la sicurezza del trasporto, l'associazione supporta la comunicazione HTTPS.When configured for transport security, the binding supports HTTPS communication. Il protocollo HTTPS garantisce la riservatezza e l'integrità dei messaggi trasmessi in rete.HTTPS provides confidentiality and integrity protection for the messages that are transmitted over the wire. Tuttavia il set di meccanismi di autenticazione che possono essere utilizzati per autenticare il client nel servizio è limitato ai meccanismi supportati dal trasporto HTTPS.However the set of authentication mechanisms that can be used to authenticate the client to the service is limited to what the HTTPS transport supports. Windows Communication Foundation (WCF) offre un TransportWithMessageCredential modalità di sicurezza che è progettata per superare questa limitazione.Windows Communication Foundation (WCF) offers a TransportWithMessageCredential security mode that is designed to overcome this limitation. Se è configurata questa modalità di sicurezza, viene utilizzata la sicurezza del trasporto per garantire la riservatezza e l'integrità dei messaggi trasmessi e per eseguire l'autenticazione del servizio.When this security mode is configured, the transport security is used to provide confidentiality and integrity for the transmitted messages and to perform the service authentication. Tuttavia, l'autenticazione client viene eseguita inserendo la credenziale client direttamente nel messaggio.However, the client authentication is performed by putting the client credential directly in the message. In questo modo è possibile utilizzare qualsiasi tipo di credenziale supportato dalla modalità di sicurezza messaggio per l'autenticazione client, mantenendo il miglioramento delle prestazioni della modalità di sicurezza del trasporto.This allows you to use any credential type that is supported by the message security mode for the client authentication while keeping the performance benefit of transport security mode.

In questo esempio viene utilizzato un tipo di credenziale UserName per autenticare il client presso il servizio.In this sample, a UserName credential type is used to authenticate the client to the service.

Questo esempio è basato sul Introduzione che implementa un servizio di calcolatrice.This sample is based on the Getting Started that implements a calculator service. L'associazione wsHttpBinding è specificata e configurata nei file di configurazione dell'applicazione per il client e il servizio.The wsHttpBinding binding is specified and configured in the application configuration files for the client and service.

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.The setup procedure and build instructions for this sample are located at the end of this topic.

Nell'esempio di codice programma è quasi identico a quella del Introduzione servizio.The program code in the sample is almost identical to that of the Getting Started service. È tuttavia presente un'operazione aggiuntiva fornita dal contratto di servizio, ovvero GetCallerIdentity.There is one additional operation provided by the service contract - GetCallerIdentity. Questa operazione restituisce il nome dell'identità del chiamante al chiamante.This operation returns the name of the caller's identity to the caller.

public string GetCallerIdentity()  
{  
    // Use ServiceSecurityContext.WindowsIdentity to get the name of the caller.  
    return ServiceSecurityContext.Current.WindowsIdentity.Name;  
}  

È necessario creare un certificato e assegnarlo utilizzando la Gestione guidata certificati server Web prima di compilare ed eseguire l'esempio.You must create a certificate and assign it by using the Web Server Certificate Wizard before building and running the sample. Le definizioni dell'endpoint e dell'associazione nelle impostazioni del file di configurazione abilitano la modalità di sicurezza TransportWithMessageCredential, come illustrato nella configurazione di esempio seguente per il client.The endpoint definition and binding definition in the configuration file settings enable TransportWithMessageCredential security mode, as shown in the following sample configuration for the client.

<system.serviceModel>  
  <client>  
    <endpoint name=""  
              address="https://localhost/servicemodelsamples/service.svc"   
              binding="wsHttpBinding"   
              bindingConfiguration="Binding1"   
              contract="Microsoft.ServiceModel.Samples.ICalculator" />  
  </client>  

  <bindings>  
    <wsHttpBinding>  
      <!--   
        This configuration defines the security mode as TransportWithMessageCredential.  
        and the clientCredentialType as UserName.  
        -->  
      <binding name="Binding1">  
        <security mode ="TransportWithMessageCredential">  
          <message clientCredentialType="UserName" />  
        </security>  
      </binding>  
    </wsHttpBinding>  
  </bindings>  
</system.serviceModel>  

L'indirizzo specificato utilizza lo schema https://.The address specified uses the https:// scheme. La configurazione dell'associazione imposta la modalità di sicurezza su TransportWithMessageCredential.The binding configuration sets the security mode to TransportWithMessageCredential. La stessa modalità di sicurezza deve essere specificata nel file Web.config del servizio.The same security mode must be specified in the service's Web.config file.

Poiché il certificato utilizzato in questo esempio è un certificato di prova creato con Makecert.exe, viene visualizzato un avviso di sicurezza quando si tenta di accedere a https: indirizzi, ad esempio https://localhost/servicemodelsamples/service.svc, dal browser.Because the certificate used in this sample is a test certificate created with Makecert.exe, a security alert appears when you try to access an https: address, such as https://localhost/servicemodelsamples/service.svc, from your browser. Per consentire al client di WCF con un certificato di prova in luogo di lavoro, è stato aggiunto altro codice al client per sopprimere l'avviso di sicurezza.To allow the WCF client to work with a test certificate in place, some additional code has been added to the client to suppress the security alert. Il codice e la classe associata non sono richiesti quando si utilizzano i certificati di produzione.This code, and the accompanying class, is not required when using production certificates.

// WARNING: This code is only needed for test certificates such as those created by makecert. It is   
// not recommended for production code.  
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");  

Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client.When you run the sample, the operation requests and responses are displayed in the client console window. Premere INVIO nella finestra del client per arrestare il client.Press ENTER in the client window to shut down the client.

Username authentication required.  
Provide a valid machine or domain account. [domain\\user]  
   Enter username:   
YourDomainName\YourAccountName  
   Enter password:   
********  
YourDomainName\YourAccountName  
Add(100,15.99) = 115.99  
Subtract(145,76.54) = 68.46  
Multiply(9,81.25) = 731.25  
Divide(22,7) = 3.14285714285714  

Press <ENTER> to terminate client.  

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Assicurarsi di avere eseguito la procedura di installazione singola per gli esempi di Windows Communication Foundation.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Assicurarsi di avere eseguito la istruzioni di installazione certificato Server Internet Information Services (IIS).Ensure that you have performed the Internet Information Services (IIS) Server Certificate Installation Instructions.

  3. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  4. Per eseguire l'esempio in una configurazione singola o tra computer, seguire le istruzioni in esegue gli esempi di Windows Communication Foundation.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Vedere ancheSee Also