バインディングとセキュリティ
Windows Communication Foundation (WCF) に用意されたシステム指定のバインディングを使用すると、WCF アプリケーションをすばやくプログラミングできます。1 つの例外を除き、すべてのバインディングにはセキュリティ スキームが含まれており、既定で有効になっています。ここでは、セキュリティ ニーズに適した正しいバインディングの選択方法について説明します。
WCF のセキュリティの概要については、「セキュリティの概要」を参照してください。バインディングを使用した WCF のプログラミング詳細情報、「WCF セキュリティのプログラミング」を参照してください。
バインディングを既に選択している場合、セキュリティに関連する実行時の動作の詳細については、「Windows Communication Foundation のセキュリティ動作」を参照してください。
セキュリティ機能のなかには、システム指定のバインディングを使用してプログラミングできないものがあります。カスタム バインディングを使用したより細かな制御については、「カスタム バインディングを使用したセキュリティ機能」を参照してください。
バインディングのセキュリティ機能
WCF には、ほとんどのニーズを満たすシステム指定のバインディングが多数用意されています。特定のバインディングでは不十分な場合は、カスタム バインディングを作成することもできます。システム指定のバインディングの一覧については、「システム標準のバインディング」を参照してください。カスタム バインディング詳細情報、「カスタム バインディング」を参照してください。
WCF のすべてのバインディングには、API としての形式と、構成ファイルで使用する XML 要素としての形式という 2 つの形式があります。たとえば、WSHttpBinding (API) に対応する要素は wsHttpBinding Elementです。
以下のセクションでは、各バインディングについて両方の形式を示し、セキュリティ機能の概要を説明します。
BasicHttp
コードでは BasicHttpBinding クラスを使用し、構成では basicHttpBinding Elementを使用します。
このバインディングは、次のような既存のさまざまなテクノロジと共に使用できるようにデザインされています。
ASP.NET Web サービス (ASMX) Version 1
Web サービス拡張 (WSE) アプリケーション
WS-I (Web Services Interoperability) 仕様 (https://go.microsoft.com/fwlink/?LinkId=38955) で定義されている基本プロファイル
WS-I で定義されている基本セキュリティ プロファイル
既定では、このバインディングはセキュリティで保護されません。ASMX サービスと相互運用するように設計されています。セキュリティを有効にした場合、このバインディングは、インターネット インフォメーション サービス (IIS: Internet Information Services) のセキュリティ機構 (基本認証、ダイジェスト、Windows 統合セキュリティなど) とシームレスに相互運用できるように設計されています。詳細については、次のトピックを参照してください。 トランスポート セキュリティの概要.このバインディングでは、以下をサポートしています。
HTTPS トランスポート セキュリティ
HTTP 基本認証
WS-Security。
詳細については、次のトピックを参照してください。 BasicHttpSecurity、BasicHttpMessageSecurity、BasicHttpMessageCredentialType、および BasicHttpSecurityMode。
WSHttpBinding
コードでは WSHttpBinding クラスを使用し、構成では wsHttpBinding Elementを使用します。
既定では、このバインディングは WS-Security 仕様を実装しており、WS-* 仕様を実装するサービスとの相互運用性があります。次のセキュリティをサポートします。
HTTPS トランスポート セキュリティ。
WS-Security。
SOAP メッセージ資格情報セキュリティを使用した、HTTPS トランスポート保護による呼び出し元の認証。
詳細については、次のトピックを参照してください。 WSHttpSecurity、MessageSecurityOverHttp、MessageCredentialType、SecurityMode、HttpTransportSecurity、HttpClientCredentialType、および HttpProxyCredentialType。
WSDualHttpBinding
コードでは WSDualHttpBinding クラスを使用し、構成では wsDualHttpBinding Elementを使用します。
このバインディングは、双方向サービス アプリケーションを有効にするために設計されています。このバインディングは、メッセージ ベースの転送セキュリティ用に WS-Security 仕様を実装しています。トランスポート セキュリティは使用できません。既定では、次の機能を提供します。
WS-ReliableMessaging を実装して信頼性を確保します。
WS-Security を実装して転送セキュリティおよび認証を実現します。
HTTP を使用してメッセージを配信します。
テキスト/XML メッセージ エンコーディングを使用します。
バインディングで WS-Security (メッセージ層セキュリティ) を使用すると、次のパラメーターを構成できるようになります。
暗号アルゴリズムを決定するためのセキュリティ アルゴリズム スイート
以下を行うためのバインディング オプション
クライアントで帯域外で使用可能なサービス資格情報の提供
チャネル セットアップの一部としてサービスからネゴシエートされるサービス資格情報の提供
詳細については、次のトピックを参照してください。「WSDualHttpSecurity」および「WSDualHttpSecurityMode」を参照してください。
NetTcpBinding
コードでは NetTcpBinding クラスを使用し、構成では netTcpBinding Elementを使用します。
このバインディングは複数のコンピューター間での通信に最適化されています。既定では、次の特性があります。
トランスポート層セキュリティを実装します。
Windows セキュリティを利用して、転送セキュリティと認証を確保します。
トランスポートに TCP を使用します。
バイナリ メッセージのエンコードを実装します。
WS-ReliableMessaging を実装します。
選択できる方法は次のとおりです。
メッセージ層セキュリティ (WS-Security を使用)
メッセージ資格情報を使用するトランスポート セキュリティ (TLS (Transport Layer Security) over TCP によって実現される機密性と整合性、および WS-Security によって提供される承認に使用する資格情報)
詳細については、次のトピックを参照してください。 NetTcpSecurity、TcpTransportSecurity、TcpClientCredentialType、MessageSecurityOverTcp、および MessageCredentialType。
NetNamedPipeBinding
コードでは NetNamedPipeBinding クラスを使用し、構成では netNamedPipeBinding Elementを使用します。
このバインディングは、(通常では同じコンピューター上の) 複数プロセス間の通信に最適化されています。既定では、このバインディングには次の特性があります。
トランスポート セキュリティを使用して、メッセージ転送と認証を実現します。
名前付きパイプを使用してメッセージを配信します。
バイナリ メッセージのエンコードを実装します。
暗号化とメッセージの署名を使用します。
選択できる方法は次のとおりです。
- Windows セキュリティを使用した認証
詳細については、次のトピックを参照してください。「NetNamedPipeSecurity」、「NetNamedPipeSecurityMode」、および「NamedPipeTransportSecurity」を参照してください。
MsmqIntegrationBinding
コードでは MsmqIntegrationBinding クラスを使用し、構成では msmqIntegrationBinding elementを使用します。
このバインディングは、WCF MSMQ (Microsoft Message Queuing) 以外のエンドポイントと相互運用する WCF クライアントおよびサービスの作成用に最適化されています。
既定では、このバインディングはトランスポート セキュリティを使用し、次のセキュリティ特性を提供します。
セキュリティは無効 (なし) にできます。
MSMQ トランスポート セキュリティ (トランスポート)。
詳細については、次のトピックを参照してください。「NetMsmqSecurity」および「NetMsmqSecurityMode」を参照してください。
NetMsmqBinding
コードでは NetMsmqBinding クラスを使用し、構成では netMsmqBinding Elementを使用します。
このバインディングは、MSMQ のキューに置かれたメッセージのサポートを必要とする WCF サービスの作成時に使用します。
既定では、このバインディングはトランスポート セキュリティを使用し、次のセキュリティ特性があります。
セキュリティは無効 (なし) にできます。
MSMQ トランスポート セキュリティ (トランスポート)。
SOAP に基づくメッセージ セキュリティ (メッセージ)。
トランスポート セキュリティとメッセージ セキュリティ (両方)。
サポートされるクライアント資格情報の種類 : なし、Windows、UserName、証明書、IssuedToken。
Certificate 資格情報は、セキュリティ モードが Both または Message に設定されている場合にのみサポートされます。
詳細については、次のトピックを参照してください。「MessageSecurityOverMsmq」および「MsmqTransportSecurity」を参照してください。
WSFederationHttpBinding
コードでは WSFederationHttpBinding クラスを使用し、構成では WSFederationHttpBinding elementを使用します。
既定では、このバインディングは WS-Security (メッセージ層セキュリティ) を使用します。
詳細については、次のトピックを参照してください。、「フェデレーション」、「WSFederationHttpSecurity」、および「WSFederationHttpSecurityMode」を参照してください。
カスタム バインディング
システム指定のバインディングがいずれも要件を満たさない場合は、カスタム セキュリティ バインド要素を使用してカスタム バインディングを作成できます。詳細については、次のトピックを参照してください。 カスタム バインディングを使用したセキュリティ機能.
バインディングの選択肢
次の表は、セキュリティ モード設定で提供される機能をまとめたものです。つまり、セキュリティ モードを Transport、Message、または TransportWithMessageCredential に設定したときに使用できる機能の一覧です。アプリケーションで必要なセキュリティ機能を決定するときに、この表を参考にしてください。
設定 | 機能 |
---|---|
トランスポート |
サーバー認証 クライアント認証 Point-to-Point のセキュリティ 相互運用性 ハードウェア アクセラレータ 高いスループット セキュリティで保護されたファイアウォール 待機時間の長いアプリケーション 複数のホップでの再暗号化 |
メッセージ |
サーバー認証 クライアント認証 エンド ツー エンドのセキュリティ 相互運用性 多様なクレーム フェデレーション 複数要因の認証 カスタム トークン Notary/Timestamp サービス 待ち時間の長いアプリケーション メッセージ署名の永続化 |
TransportWithMessageCredential |
サーバー認証 クライアント認証 Point-to-Point のセキュリティ 相互運用性 ハードウェアの高速化 高いスループット 多様なクライアント クレーム フェデレーション 複数要因の認証 カスタム トークン セキュリティで保護されたファイアウォール 待ち時間の長いアプリケーション 複数のホップでの再暗号化 |
さまざまなモード設定をサポートするバインディングを次の表に示します。サービス エンドポイントを作成するときは、使用するバインディングをこの表から選択してください。
バインディング | トランスポート モードのサポート | メッセージ モードのサポート | TransportWithMessageCredential のサポート |
---|---|---|---|
BasicHttpBinding |
○ |
○ |
○ |
WSHttpBinding |
○ |
○ |
○ |
WSDualHttpBinding |
× |
○ |
× |
NetTcpBinding |
○ |
○ |
○ |
NetNamedPipeBinding |
○ |
× |
× |
NetMsmqBinding |
○ |
○ |
× |
MsmqIntegrationBinding |
○ |
× |
× |
wsFederationHttpBinding |
× |
○ |
○ |
バインディングにおけるトランスポート資格情報
トランスポート セキュリティ モードで BasicHttpBinding または WSHttpBinding を使用するときに使用できるクライアント資格情報の種類を、次の表に示します。
種類 | 説明 |
---|---|
なし |
クライアントは資格情報を提示する必要がないことを指定します。これは、匿名クライアントであると解釈されます。 |
Basic |
基本認証です。詳細については、次のトピックを参照してください。、「RFC 2617 – HTTP Authentication: Basic and Digest Authentication」を参照してください。このドキュメントは、https://go.microsoft.com/fwlink/?LinkId=84023 で参照できます。 |
Digest |
ダイジェスト認証です。詳細については、次のトピックを参照してください。「RFC 2617 – HTTP Authentication: Basic and Digest Authentication」を参照してください。このドキュメントは、https://go.microsoft.com/fwlink/?LinkId=84023 で参照できます。 |
NTLM |
NTLM (NT LAN Manager) 認証です。 |
Windows |
Windows 認証です。 |
証明書 |
証明書を使用して実行される認証です。 |
IssuedToken |
セキュリティ トークン サービスまたは CardSpace によって発行されたトークンを使用したクライアントの認証を、サービスが要求できるようにします。詳細については、次のトピックを参照してください。 フェデレーションと発行済みトークン. |
バインディングにおけるメッセージ クライアント資格情報
メッセージ セキュリティ モードでバインディングを使用するときに使用できる、クライアント資格情報の種類を次の表に示します。
型 | 説明 |
---|---|
なし |
サービスが匿名クライアントとやり取りを行うことが可能になります。 |
Windows |
Windows 資格情報の認証済みコンテキストの制御下で SOAP メッセージ交換を行うことができます。 |
UserName |
サービスが、ユーザー名資格情報を使用したクライアントの認証を要求できるようにします。セキュリティ モードが TransportWithMessageCredential に設定されている場合は、WCF では、パスワード ダイジェストの送信、またはパスワードを使用したキーの派生、およびメッセージ モード セキュリティでのこのようなキーの使用がサポートされません。そのため、WCF では、ユーザー名資格情報を使用する場合に、トランスポートが強制的にセキュリティで保護されます。 |
Certificate |
証明書を使用したクライアントの認証を、サービスで要求することが可能になります。 |
IssuedToken |
サービスは、セキュリティ トークン サービスを使用してカスタム トークンを提供できます。 |
参照
概念
セキュリティの概要
資格情報の種類の選択
Windows Communication Foundation のセキュリティ動作
その他のリソース
サービスおよびクライアントのセキュリティ保護
カスタム バインディングを使用したセキュリティ機能
Windows Server AppFabric のセキュリティ モデル