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