Instrukcje: Tworzenie niestandardowego powiązania za pomocą elementu SecurityBindingElement

Program Windows Communication Foundation (WCF) zawiera kilka powiązań dostarczanych przez system, które można skonfigurować, ale nie zapewniają pełnej elastyczności podczas konfigurowania wszystkich opcji zabezpieczeń, które obsługuje program WCF. W tym temacie pokazano, jak utworzyć powiązanie niestandardowe bezpośrednio z poszczególnych elementów powiązania i wyróżnić niektóre ustawienia zabezpieczeń, które można określić podczas tworzenia takiego powiązania. Aby uzyskać więcej informacji na temat tworzenia powiązań niestandardowych, zobacz Rozszerzanie powiązań.

Ostrzeżenie

SecurityBindingElement nie obsługuje kształtu kanału IDuplexSessionChannel , który jest domyślnym kształtem kanału używanym przez transport TCP, gdy TransferMode jest ustawiony na Bufferedwartość . Aby można było używać SecurityBindingElement w tym scenariuszu, należy ustawić wartość TransferMode na Streamed wartość .

Tworzenie powiązania niestandardowego

W programie WCF wszystkie powiązania składają się z elementów powiązania. Każdy element powiązania pochodzi z BindingElement klasy . W przypadku standardowych powiązań dostarczanych przez system elementy powiązania są tworzone i konfigurowane dla Ciebie, chociaż można dostosować niektóre ustawienia właściwości.

Natomiast w celu utworzenia powiązania niestandardowego elementy powiązania są tworzone i konfigurowane, a element CustomBinding jest tworzony na podstawie elementów powiązania.

W tym celu należy dodać poszczególne elementy powiązania do kolekcji reprezentowanej przez wystąpienie BindingElementCollection klasy, a następnie ustawić Elements właściwość CustomBinding tego obiektu. Należy dodać elementy powiązania w następującej kolejności: Przepływ transakcji, Reliable Session, Security, Composite Duplex, One-Way, Stream Security, Message Encoding i Transport. Należy pamiętać, że nie wszystkie wymienione elementy powiązania są wymagane w każdym powiązaniu.

SecurityBindingElement

Trzy elementy powiązania odnoszą się do zabezpieczeń na poziomie komunikatów SecurityBindingElement , z których wszystkie pochodzą z klasy. Te trzy to TransportSecurityBindingElement, SymmetricSecurityBindingElementi AsymmetricSecurityBindingElement. Element TransportSecurityBindingElement służy do zapewnienia zabezpieczeń trybu mieszanego. Pozostałe dwa elementy są używane, gdy warstwa komunikatów zapewnia zabezpieczenia.

Dodatkowe klasy są używane podczas zapewniania zabezpieczeń na poziomie transportu:

Wymagane elementy powiązania

Istnieje duża liczba możliwych elementów powiązania, które można połączyć w powiązanie. Nie wszystkie te kombinacje są prawidłowe. W tej sekcji opisano wymagane elementy, które muszą znajdować się w powiązaniu zabezpieczeń.

Prawidłowe powiązania zabezpieczeń zależą od wielu czynników, w tym następujących:

  • Tryb zabezpieczeń.

  • Protokół transportowy.

  • Wzorzec wymiany komunikatów (MEP) określony w umowie.

W poniższej tabeli przedstawiono prawidłowe konfiguracje stosu elementów powiązania dla każdej kombinacji powyższych czynników. Należy pamiętać, że są to minimalne wymagania. Do powiązania można dodać dodatkowe elementy powiązania, takie jak elementy powiązania kodowania komunikatów, elementy powiązania transakcji i inne elementy powiązania.

Tryb zabezpieczeń Transport Wzorzec wymiany komunikatów kontraktu Wzorzec wymiany komunikatów kontraktu Wzorzec wymiany komunikatów kontraktu
Datagram Request Reply Duplex
Transport Https
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP
OneWayBindingElement
Ssl lub Windows StreamSecurityBindingElement Ssl lub Windows StreamSecurityBindingElement Ssl lub Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Komunikat HTTP SymmetricSecurityBindingElement SymmetricSecurityBindingElement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)
CompositeDuplexBindingElement
OneWayBindingElement OneWayBindingElement
HttpTransportBindingElement HttpTransportBindingElement HttpTransportBindingElement
TCP SecurityBindingElement SecurityBindingElement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Mieszane (transport z poświadczeniami komunikatu) Https TransportSecurityBindingElement TransportSecurityBindingElement
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP TransportSecurityBindingElement SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation) SymmetricSecurityBindingElement (tryb uwierzytelniania = SecureConversation)
OneWayBindingElement
Ssl lub Windows StreamSecurityBindingElement Ssl lub Windows StreamSecurityBindingElement Ssl lub Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement

Należy pamiętać, że w elementach SecurityBindingElements istnieje wiele konfigurowalnych ustawień. Aby uzyskać więcej informacji, zobacz SecurityBindingElement Authentication Modes (Tryby uwierzytelniania SecurityBindingElement).

Aby uzyskać więcej informacji, zobacz Bezpieczne konwersacje i bezpieczne sesje.

z konkretnym obiektem

Aby utworzyć powiązanie niestandardowe używające elementu SymmetricSecurityBindingElement

  1. Utwórz wystąpienie BindingElementCollection klasy o nazwie outputBec.

  2. Wywołaj metodę M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)statyczną , która zwraca wystąpienie SymmetricSecurityBindingElement klasy .

  3. Dodaj element SymmetricSecurityBindingElement do kolekcji (outputBec), wywołując Add metodę Collection<T>BindingElement klasy .

  4. Utwórz wystąpienie TextMessageEncodingBindingElement klasy i dodaj je do kolekcji (outputBec). Określa kodowanie używane przez powiązanie.

  5. Utwórz obiekt HttpTransportBindingElement i dodaj go do kolekcji (outputBec). Określa to, że powiązanie używa transportu HTTP.

  6. Utwórz nowe powiązanie niestandardowe, tworząc wystąpienie CustomBinding klasy i przekazując kolekcję outputBec do konstruktora.

  7. Wynikowe powiązanie niestandardowe współudzieli wiele tych samych cech co standard WSHttpBinding. Określa zabezpieczenia na poziomie komunikatu i poświadczenia systemu Windows, ale wyłącza bezpieczne sesje, wymaga podania poświadczeń usługi poza pasmem i nie szyfruje podpisów. Ostatni element może być kontrolowany tylko przez ustawienie MessageProtectionOrder właściwości, jak pokazano w kroku 4. Pozostałe dwa można kontrolować przy użyciu ustawień w powiązaniu standardowym.

Przykład

opis

W poniższym przykładzie przedstawiono pełną funkcję umożliwiającą utworzenie powiązania niestandardowego używającego elementu SymmetricSecurityBindingElement.

Kod

// 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

Zobacz też