Transportsicherheit mit StandardauthentifizierungTransport Security with Basic Authentication

Die folgende Abbildung zeigt einen Windows Communication Foundation (WCF)-Dienst und Client.The following illustration shows a Windows Communication Foundation (WCF) service and client. Der Server benötigt ein gültiges X.509-Zertifikat, das für Secure Sockets Layer (SSL) verwendet werden kann, und die Clients müssen das Zertifikat des Servers als vertrauenswürdig ansehen.The server needs a valid X.509 certificate that can be used for Secure Sockets Layer (SSL), and the clients must trust the server’s certificate. Außerdem verfügt der Webdienst bereits über eine SSL-Implementierung, die Sie verwenden können.Further, the Web service already has an SSL implementation that can be used. Weitere Informationen zum Aktivieren der Standardauthentifizierung auf Internet Information Services (IIS) finden Sie unter http://go.microsoft.com/fwlink/?LinkId=83822 .For more information about enabling basic authentication on Internet Information Services (IIS), see http://go.microsoft.com/fwlink/?LinkId=83822.

Transportsicherheit mit StandardauthentifizierungTransport security with basic authentication

MerkmalCharacteristic BeschreibungDescription
SicherheitsmodusSecurity Mode TransportTransport
InteroperabilitätInteroperability Mit vorhandenen Webdienstclients und DienstenWith existing Web service clients and services
Authentifizierung (Server)Authentication (Server)

Authentifizierung (Client)Authentication (Client)
Ja (mithilfe von HTTPS)Yes (using HTTPS)

Ja (mithilfe von Benutzername/Kennwort)Yes (through User name/Password)
IntegritätIntegrity JaYes
VertraulichkeitConfidentiality JaYes
TransportTransport HTTPSHTTPS
BindungBinding WSHttpBinding

DienstService

Der folgende Code und die folgende Konfiguration werden unabhängig voneinander ausgeführt.The following code and configuration are meant to run independently. Führen Sie einen der folgenden Schritte aus:Do one of the following:

  • Erstellen Sie einen separaten Dienst, indem Sie den Code ohne Konfiguration verwenden.Create a stand-alone service using the code with no configuration.

  • Erstellen Sie mit der angegebenen Konfiguration einen Dienst, aber definieren Sie keine Endpunkte.Create a service using the supplied configuration, but do not define any endpoints.

CodeCode

Der folgende Code zeigt, wie Sie einen Dienstendpunkt erstellen, der zur Sicherstellung der Übertragungssicherheit einen Benutzernamen und ein Kennwort für die Windows-Domäne verwendet.The following code shows how to create a service endpoint that uses a Windows domain user name and password for transfer security. Beachten Sie, dass der Dienst ein X.509-Zertifikat erfordert, um den Client zu authentifizieren.Note that the service requires an X.509 certificate to authenticate to the client. Weitere Informationen finden Sie unter arbeiten mit Zertifikaten und Vorgehensweise: Konfigurieren eines Anschlusses mit einem SSL-Zertifikat.For more information, see Working with Certificates and How to: Configure a Port with an SSL Certificate.

// Create the binding.
WSHttpBinding binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType =
    HttpClientCredentialType.Basic;

// Create the URI for the endpoint.
Uri httpUri = new Uri("https://localhost/Calculator");

// Create the service host and add an endpoint.
ServiceHost myServiceHost = new ServiceHost(
    typeof(ServiceModel.Calculator), httpUri);
myServiceHost.AddServiceEndpoint(
    typeof(ServiceModel.ICalculator), binding, "");

// Open the service.
myServiceHost.Open();
Console.WriteLine("Listening...");
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();

// Close the service. 
myServiceHost.Close();
' Create the binding.
Dim binding As New WSHttpBinding()
binding.Security.Mode = SecurityMode.Transport
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic

' Create the URI for the endpoint.
Dim httpUri As New Uri("https://localhost/Calculator")

' Create the service host and add an endpoint.
Dim myServiceHost As New ServiceHost(GetType(ServiceModel.Calculator), httpUri)
myServiceHost.AddServiceEndpoint(GetType(ServiceModel.ICalculator), binding, "")

' Open the service.
myServiceHost.Open()
Console.WriteLine("Listening...")
Console.WriteLine("Press Enter to exit.")
Console.ReadLine()

' Close the service. 
myServiceHost.Close()

KonfigurationConfiguration

Der folgende Code konfiguriert einen Dienst, um die Standardauthentifizierung mit der Sicherheit auf Transportebene zu verwenden:The following configures a service to use basic authentication with transport-level security:

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
    <system.serviceModel>  
        <bindings>  
            <wsHttpBinding>  
                <binding name="UsernameWithTransport">  
                    <security mode="Transport">  
                        <transport clientCredentialType="Basic" />  
                    </security>  
                </binding>  
            </wsHttpBinding>  
        </bindings>  
        <services>  
            <service name="BasicAuthentication.Calculator">  
                <endpoint address="https://localhost/Calculator"  
                          binding="wsHttpBinding"   
                          bindingConfiguration="UsernameWithTransport"  
                          name="BasicEndpoint"   
                          contract="BasicAuthentication.ICalculator" />  
            </service>  
        </services>  
    </system.serviceModel>  
</configuration>  

ClientClient

CodeCode

Der folgende Code zeigt den Clientcode, der den Benutzernamen und das Kennwort enthält.The following code shows the client code that includes the user name and password. Beachten Sie, dass der Benutzer einen gültigen Windows-Benutzernamen und ein Kennwort angeben muss.Note that the user must provide a valid Windows user name and password. Der Code zum Zurückgeben des Benutzernamens und des Kennworts ist hier nicht gezeigt.The code to return the user name and password is not shown here. Verwenden Sie ein Dialogfeld oder ein anderes Oberflächenelement, um die Informationen vom Benutzer abzufragen.Use a dialog box or other interface to query the user for the information.

Hinweis

Sie können den Benutzernamen und das Kennwort nur mithilfe von Code festlegen.User name and password can only be set using code.

// Create the binding.
WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType =
    HttpClientCredentialType.Basic;

// Create the endpoint address. Note that the machine name 
// must match the subject or DNS field of the X.509 certificate
// used to authenticate the service. 
EndpointAddress ea = new
    EndpointAddress("https://machineName/Calculator");

// Create the client. The code for the calculator 
// client is not shown here. See the sample applications
// for examples of the calculator code.
CalculatorClient cc =
    new CalculatorClient(myBinding, ea);
// The client must provide a user name and password. The code
// to return the user name and password is not shown here. Use
// a database to store the user name and passwords, or use the 
// ASP.NET Membership provider database.
cc.ClientCredentials.UserName.UserName = ReturnUsername();
cc.ClientCredentials.UserName.Password = ReturnPassword();
try
{
    // Begin using the client.
    cc.Open();
    Console.WriteLine(cc.Add(100, 11));
    Console.ReadLine();

    // Close the client.
    cc.Close();
}
' Create the binding.
Dim myBinding As New WSHttpBinding()
myBinding.Security.Mode = SecurityMode.Transport
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic

' Create the endpoint address. Note that the machine name 
' must match the subject or DNS field of the X.509 certificate
' used to authenticate the service. 
Dim ea As New EndpointAddress("https://machineName/Calculator")

' Create the client. The code for the calculator 
' client is not shown here. See the sample applications
' for examples of the calculator code.
Dim cc As New CalculatorClient(myBinding, ea)

' The client must provide a user name and password. The code
' to return the user name and password is not shown here. Use
' a database to store the user name and passwords, or use the 
' ASP.NET Membership provider database.
cc.ClientCredentials.UserName.UserName = ReturnUsername()
cc.ClientCredentials.UserName.Password = ReturnPassword()

' Begin using the client.
Try
    cc.Open()

    Console.WriteLine(cc.Add(100, 11))
    Console.ReadLine()

    ' Close the client.
    cc.Close()
Catch tex As TimeoutException
    Console.WriteLine(tex.Message)
    cc.Abort()
Catch cex As CommunicationException
    Console.WriteLine(cex.Message)
    cc.Abort()
Finally
    Console.WriteLine("Closed the client")
    Console.ReadLine()
End Try

KonfigurationConfiguration

Der folgende Code zeigt die Clientkonfiguration.The following code shows the client configuration.

Hinweis

Sie können die Konfiguration nicht verwenden, um den Benutzernamen und das Kennwort festzulegen.You cannot use configuration to set the user name and password. Die hier gezeigte Konfiguration muss mithilfe von Code erweitert werden, um den Benutzernamen und das Kennwort festzulegen.The configuration shown here must be augmented using code to set the user name and password.

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
    <bindings>  
      <wsHttpBinding>  
        <binding name="WSHttpBinding_ICalculator" >  
          <security mode="Transport">  
            <transport clientCredentialType="Basic" />  
          </security>  
        </binding>  
      </wsHttpBinding>  
    </bindings>  
    <client>  
      <endpoint address="https://machineName/Calculator"   
                binding="wsHttpBinding"  
                bindingConfiguration="WSHttpBinding_ICalculator"   
                contract="ICalculator"  
                name="WSHttpBinding_ICalculator" />  
    </client>  
  </system.serviceModel>  
</configuration>  

Siehe auchSee Also

ClientCredentials
UserNamePasswordClientCredential
Arbeiten mit ZertifikatenWorking with Certificates
Vorgehensweise: Konfigurieren eines Ports mit einem SSL-ZertifikatHow to: Configure a Port with an SSL Certificate
Übersicht über die SicherheitSecurity Overview
<clientCredentials><clientCredentials>
Sicherheitsmodell für Windows Server AppFabricSecurity Model for Windows Server App Fabric