WS-Transport mit NachrichtenanmeldeinformationenWS Transport With Message Credential

In diesem Beispiel wird die Verwendung der SSL-Transportsicherheit in Verbindung mit Clientanmeldeinformationen veranschaulicht, die in der Nachricht übertragen werden.This sample demonstrates the use of SSL transport security in combination with client credential being carried in the message. In diesem Beispiel wird die wsHttpBinding-Bindung verwendet.This sample uses the wsHttpBinding binding.

Standardmäßig bietet die wsHttpBinding-Bindung HTTP-Kommunikation.By default, the wsHttpBinding binding provides HTTP communication. Wenn die Bindung für Transportsicherheit konfiguriert ist, unterstützt sie HTTPS-Kommunikation.When configured for transport security, the binding supports HTTPS communication. HTTPS stellt Vertraulichkeit und Integritätsschutz für die über die Verbindung übertragenen Nachrichten bereit.HTTPS provides confidentiality and integrity protection for the messages that are transmitted over the wire. Die Authentifizierungsmechanismen, die zum Authentifizieren des Clients beim Dienst verwendet werden können, sind jedoch auf die Mechanismen beschränkt, die der HTTPS-Transport unterstützt.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) bietet eine TransportWithMessageCredential Sicherheitsmodus, die entwickelt wurde, um diese Einschränkung zu umgehen.Windows Communication Foundation (WCF) offers a TransportWithMessageCredential security mode that is designed to overcome this limitation. Wenn dieser Sicherheitsmodus konfiguriert ist, werden mithilfe der Transportsicherheit Vertraulichkeit und Integrität für die übertragenen Nachrichten bereitgestellt und die Dienstauthentifizierung durchgeführt.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. Allerdings erfolgt die Clientauthentifizierung durch die Clientanmeldeinformationen direkt in die Nachricht einfügen.However, the client authentication is performed by putting the client credential directly in the message. Dadurch können Sie einen beliebigen Anmeldeinformationstyp verwenden, die von den nachrichtensicherheitsmodus für die Clientauthentifizierung Beibehaltung des Leistungsvorteil Sicherheitsmodus "Transport" unterstützt wird.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 diesem Beispiel wird der UserName-Anmeldeinformationstyp verwendet, um den Client beim Dienst zu authentifizieren.In this sample, a UserName credential type is used to authenticate the client to the service.

Dieses Beispiel basiert auf der Einstieg , implementiert einen rechnerdienst.This sample is based on the Getting Started that implements a calculator service. Die wsHttpBinding-Bindung wird in den Anwendungskonfigurationsdateien für den Client und den Dienst angegeben und konfiguriert.The wsHttpBinding binding is specified and configured in the application configuration files for the client and service.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Die Programm-Codes im Beispiel ist fast identisch mit dem von der Einstieg Dienst.The program code in the sample is almost identical to that of the Getting Started service. Es gibt einen zusätzlichen vom Dienstvertrag bereitgestellten Vorgang: GetCallerIdentity.There is one additional operation provided by the service contract - GetCallerIdentity. Dieser Vorgang gibt den Namen der Identität des Aufrufers an den Aufrufer zurück.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;  
}  

Sie müssen ein Zertifikat erstellen und es mithilfe des Assistenten für Webserverzertifikate zuweisen, bevor Sie das Beispiel erstellen und ausführen.You must create a certificate and assign it by using the Web Server Certificate Wizard before building and running the sample. Durch die Endpunktdefinition und Bindungsdefinition in den Einstellungen der Konfigurationsdatei wird der TransportWithMessageCredential-Sicherheitsmodus aktiviert, wie in der folgenden Beispielkonfiguration für den Client dargestellt.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>  

Für die angegebene Adresse wird das https:// Schema verwendet.The address specified uses the https:// scheme. Die Bindungskonfiguration legt den Sicherheitsmodus auf TransportWithMessageCredential fest.The binding configuration sets the security mode to TransportWithMessageCredential. Der gleiche Sicherheitsmodus muss in der Datei "Web.config" für den Dienst angegeben werden.The same security mode must be specified in the service's Web.config file.

Da die in diesem Beispiel verwendete Zertifikat ein mit Makecert.exe erstelltes Testzertifikat ist, wird eine sicherheitswarnung angezeigt, wenn Sie versuchen, eine Https-Zugriff: Adresse, z. B. https://localhost/servicemodelsamples/service.svc, in Ihrem 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. Um den WCF-Client mit einem vorhandenen Testzertifikat arbeiten zu ermöglichen, wurde an den Client, um die sicherheitswarnung zu unterdrücken zusätzlicher Code hinzugefügt.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. Dieser Code und die begleitende Klasse sind bei der Verwendung von Produktionszertifikaten nicht erforderlich.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");  

Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt.When you run the sample, the operation requests and responses are displayed in the client console window. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.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.  

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Stellen Sie sicher, dass Sie ausgeführt haben die Installationsanweisungen für Internetinformationsdienste (Internet Information Services, IIS) Server Zertifikat.Ensure that you have performed the Internet Information Services (IIS) Server Certificate Installation Instructions.

  3. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  4. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Siehe auchSee Also