トランスポート セキュリティと Windows 認証Transport Security with Windows Authentication

次のシナリオは、Windows セキュリティによって保護された Windows Communication Foundation (WCF) クライアントとサービスを示しています。The following scenario shows a Windows Communication Foundation (WCF) client and service secured by Windows security. プログラミングの詳細については、「方法: Windows 資格情報を使用してサービスをセキュリティで保護する」を参照してください。For more information about programming, see How to: Secure a Service with Windows Credentials.

イントラネットの Web サービスでは人事情報を表示しています。An intranet Web service displays human resources information. クライアントは Windows フォーム アプリケーションです。The client is a Windows Form application. このアプリケーションは、Kerberos コントローラーで保護されたドメインに展開されています。The application is deployed in a domain with a Kerberos controller securing the domain.

Windows 認証を利用したトランスポート セキュリティ

特徴Characteristic [説明]Description
セキュリティ モードSecurity Mode トランスポートTransport
相互運用性Interoperability WCF のみWCF only
認証 (サーバー)Authentication (Server)

認証 (クライアント)Authentication (Client)
○ (Windows 統合認証を使用)Yes (using Windows integrated authentication)

○ (Windows 統合認証を使用)Yes (using Windows integrated authentication)
整合性Integrity はいYes
機密情報Confidentiality はいYes
トランスポートTransport NET.TCPNET.TCP
バインドBinding NetTcpBinding

サービスService

次のコードと構成は、別々に実行します。The following code and configuration are meant to run independently. 次のいずれかの操作を行います。Do one of the following:

  • 構成を使用せずに、コードを使用してスタンドアロン サービスを作成します。Create a stand-alone service using the code with no configuration.

  • 提供された構成を使用してサービスを作成しますが、エンドポイントを定義しません。Create a service using the supplied configuration, but do not define any endpoints.

コードCode

次のコードは、Windows セキュリティを使用するサービス エンドポイントの作成方法を示します。The following code shows how to create a service endpoint that uses a Windows security.

// Create the binding.
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType =
    TcpClientCredentialType.Windows;

// Create the URI for the endpoint.
Uri netTcpUri = new Uri("net.tcp://localhost:8008/Calculator");

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

// Open the service.
myServiceHost.Open();
Console.WriteLine("Listening...");
Console.ReadLine();

// Close the service.
myServiceHost.Close();
' Create the binding.
Dim binding As New NetTcpBinding()
binding.Security.Mode = SecurityMode.Transport
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows

' Create the URI for the endpoint.
Dim netTcpUri As New Uri("net.tcp://localhost:8008/Calculator")

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

' Open the service.
myServiceHost.Open()
Console.WriteLine("Listening...")
Console.ReadLine()

' Close the service.
myServiceHost.Close()

構成Configuration

コードの代わりに次の構成を使用して、サービス エンドポイントをセットアップできます。The following configuration can be used instead of the code to set up the service endpoint:

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
    <behaviors />  
    <services>  
      <service behaviorConfiguration="" name="ServiceModel.Calculator">  
        <endpoint address="net.tcp://localhost:8008/Calculator"   
                  binding="netTcpBinding"  
          bindingConfiguration="WindowsClientOverTcp"   
                  name="WindowsClientOverTcp"  
                  contract="ServiceModel.ICalculator" />  
      </service>  
    </services>  
    <bindings>  
      <netTcpBinding>  
        <binding name="WindowsClientOverTcp">  
          <security mode="Transport">  
            <transport clientCredentialType="Windows" />  
          </security>  
        </binding>  
      </netTcpBinding>  
    </bindings>  
    <client />  
  </system.serviceModel>  
</configuration>  

ClientClient

次のコードと構成は、別々に実行します。The following code and configuration are meant to run independently. 次のいずれかの操作を行います。Do one of the following:

  • コード (およびクライアント コード) を使用してスタンドアロン クライアントを作成します。Create a stand-alone client using the code (and client code).

  • エンドポイント アドレスを定義しないクライアントを作成します。Create a client that does not define any endpoint addresses. 代わりに、引数として構成名を受け取るクライアント コンストラクターを使用します。Instead, use the client constructor that takes the configuration name as an argument. 次に例を示します。For example:

    CalculatorClient cc = new CalculatorClient("EndpointConfigurationName");
    
    Dim cc As New CalculatorClient("EndpointConfigurationName")
    

コードCode

クライアントを作成する場合のコード例を次に示します。The following code creates the client. バインディングは、クライアントの資格情報の種類が Windows に設定された、TCP トランスポートによるトランスポート モード セキュリティを使用するように構成されます。The binding is configured to use the Transport mode security, with the TCP transport, with the client credential type set to Windows.

// Create the binding.
NetTcpBinding myBinding = new NetTcpBinding();
myBinding.Security.Mode = SecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType =
    TcpClientCredentialType.Windows;

// Create the endpoint address.
EndpointAddress myEndpointAddress = new
    EndpointAddress("net.tcp://localhost:8008/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, myEndpointAddress);
try
{
    cc.Open();

    // Begin using the client.
    Console.WriteLine(cc.Add(100, 11));
    Console.ReadLine();

    // Close the client.
    cc.Close();
}
' Create the binding.
Dim myBinding As New NetTcpBinding()
myBinding.Security.Mode = SecurityMode.Transport
myBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows

' Create the endpoint address.
Dim myEndpointAddress As New EndpointAddress("net.tcp://localhost:8008/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, myEndpointAddress)
cc.Open()
' 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

構成Configuration

コードの代わりに次の構成を使用して、クライアントを作成できます。The following configuration can be used instead of the code to create the client.

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
    <bindings>  
      <netTcpBinding>  
        <binding name="NetTcpBinding_ICalculator" >  
          <security mode="Transport">  
            <transport clientCredentialType="Windows" />  
          </security>  
        </binding>  
      </netTcpBinding>  
    </bindings>  
    <client>  
      <endpoint address="net.tcp://localhost:8008/Calculator"   
                binding="netTcpBinding"            
                bindingConfiguration="NetTcpBinding_ICalculator"   
                contract="ICalculator"  
                name="NetTcpBinding_ICalculator">  
      </endpoint>  
    </client>  
  </system.serviceModel>  
</configuration>  

参照See also