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