次の方法で共有


方法: SecurityBindingElement を使用してカスタム バインドを作成する

Windows Communication Foundation (WCF) には、構成できるが、WCF がサポートするすべてのセキュリティ オプションを構成する際に完全な柔軟性を提供しない、いくつかのシステム提供のバインドが含まれています。 このトピックでは、個々のバインド要素から直接カスタム バインドを作成する方法について説明し、そのようなバインドの作成時に指定できるセキュリティ設定の一部を示します。 カスタム バインドの作成の詳細については、「バインディングの 拡張」を参照してください。

Warnung

SecurityBindingElement では、 IDuplexSessionChannel チャネル図形はサポートされていません。これは、 TransferModeBuffered に設定されている場合に TCP トランスポートで使用される既定のチャネル図形です。 このシナリオでTransferModeを使用するには、StreamedSecurityBindingElement に設定する必要があります。

カスタム バインドの作成

WCF では、すべてのバインディングは バインド要素で構成されます。 各バインド要素は、 BindingElement クラスから派生します。 標準のシステム提供のバインドでは、バインド要素が自動的に作成および構成されますが、一部のプロパティ設定はカスタマイズできます。

これに対し、カスタム バインドを作成するには、バインド要素が作成および構成され、バインド要素から CustomBinding が作成されます。

これを行うには、BindingElementCollection クラスのインスタンスによって表されるコレクションに個々のバインド要素を追加し、そのオブジェクトと等しいElementsCustomBindingプロパティを設定します。 バインド要素は、トランザクション フロー、Reliable Session、Security、Composite Duplex、One-Way、Stream Security、Message Encoding、Transport の順に追加する必要があります。 一覧表示されているすべてのバインド要素がすべてのバインドで必要なわけではないことに注意してください。

SecurityBindingElement

3 つのバインディング要素はメッセージ レベルのセキュリティに関連し、これらはすべて SecurityBindingElement クラスから派生します。 3 つには、 TransportSecurityBindingElementSymmetricSecurityBindingElement、および AsymmetricSecurityBindingElementがあります。 TransportSecurityBindingElementは、混合モードのセキュリティを提供するために使用されます。 他の 2 つの要素は、メッセージ層がセキュリティを提供するときに使用されます。

トランスポート レベルのセキュリティが提供されている場合は、追加のクラスが使用されます。

必須のバインド要素

バインドに組み合わせることができるバインド要素が多数存在します。 これらの組み合わせの一部が有効なわけではありません。 このセクションでは、セキュリティ バインディングに存在する必要がある必須の要素について説明します。

有効なセキュリティ バインディングは、次のような多くの要因によって異なります。

  • セキュリティ モード。

  • トランスポート プロトコル

  • コントラクトで指定されたメッセージ交換パターン (MEP)。

次の表に、上記の要素の組み合わせごとに有効なバインド要素スタック構成を示します。 これらは最小限の要件であることに注意してください。 メッセージ エンコード バインド要素、トランザクション バインド要素、その他のバインド要素など、バインドに追加のバインド要素を追加できます。

セキュリティ モード トランスポート コントラクト メッセージ交換パターン コントラクト メッセージ交換パターン コントラクト メッセージ交換パターン
Datagram Request Reply Duplex
トランスポート Https
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP
OneWayBindingElement
SSL または Windows StreamSecurityBindingElement SSL または Windows StreamSecurityBindingElement SSL または Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
メッセージ HTTP SymmetricSecurityBindingElement SymmetricSecurityBindingElement SymmetricSecurityBindingElement (認証モード = SecureConversation)
CompositeDuplexBindingElement
OneWayBindingElement OneWayBindingElement
HttpTransportBindingElement HttpTransportBindingElement HttpTransportBindingElement
TCP SecurityBindingElement SecurityBindingElement SymmetricSecurityBindingElement (認証モード = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
混合 (メッセージ資格情報を使用したトランスポート) Https TransportSecurityBindingElement TransportSecurityBindingElement
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP TransportSecurityBindingElement SymmetricSecurityBindingElement (認証モード = SecureConversation) SymmetricSecurityBindingElement (認証モード = SecureConversation)
OneWayBindingElement
SSL または Windows StreamSecurityBindingElement SSL または Windows StreamSecurityBindingElement SSL または Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement

SecurityBindingElements には多くの構成可能な設定があることに注意してください。 詳細については、「 SecurityBindingElement 認証モード」を参照してください。

詳細については、「 セキュリティで保護された会話とセキュリティで保護されたセッション」を参照してください。

プロシージャ

SymmetricSecurityBindingElement を使用するカスタム バインドを作成するには

  1. BindingElementCollectionという名前のoutputBec クラスのインスタンスを作成します。

  2. M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true) クラスのインスタンスを返す静的メソッド SymmetricSecurityBindingElementを呼び出します。

  3. BindingElement クラスのCollection<T>Add メソッドを呼び出して、outputBec コレクションにSymmetricSecurityBindingElementを追加します。

  4. TextMessageEncodingBindingElement クラスのインスタンスを作成し、コレクションに追加します (outputBec)。 これは、バインディングで使用されるエンコードを指定します。

  5. HttpTransportBindingElementを作成し、コレクションに追加します (outputBec)。 これは、バインディングが HTTP トランスポートを使用することを指定します。

  6. CustomBinding クラスのインスタンスを作成し、コレクション outputBecをコンストラクターに渡すことによって、新しいカスタム バインドを作成します。

  7. 結果として得られるカスタム バインドは、標準の WSHttpBindingと同じ特性の多くを共有します。 メッセージ レベルのセキュリティと Windows 資格情報を指定しますが、セキュリティで保護されたセッションを無効にし、サービス資格情報を帯域外で指定する必要があり、署名は暗号化しません。 最後のプロパティは、手順 4 に示すように MessageProtectionOrder プロパティを設定することによってのみ制御できます。 他の 2 つは、標準バインドの設定を使用して制御できます。

説明

次の例では、 SymmetricSecurityBindingElementを使用するカスタム バインドを作成する完全な関数を提供します。

Code

// Create an empty CustomBinding to populate
CustomBinding binding = new CustomBinding();
// Create a SymmetricSecurityBindingElement.
SymmetricSecurityBindingElement ssbe =
    SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
// Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpTransportBindingElement());
return new CustomBinding(binding);
Public Shared Function CreateCustomBinding() As Binding
    ' Create an empty Custom Binding to populate, 
    Dim binding As New CustomBinding()
    ' Create a SymmetricSecurityBindingElement.
    Dim ssbe As SymmetricSecurityBindingElement
    ssbe = SecurityBindingElement.CreateSspiNegotiationBindingElement(True)
    ' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    binding.Elements.Add(ssbe)
    binding.Elements.Add(New TextMessageEncodingBindingElement())
    binding.Elements.Add(New HttpTransportBindingElement())
    Return New CustomBinding(binding)

End Function

こちらも参照ください