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
Utwórz wystąpienie BindingElementCollection klasy o nazwie
outputBec
.Wywołaj metodę
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)
statyczną , która zwraca wystąpienie SymmetricSecurityBindingElement klasy .Dodaj element SymmetricSecurityBindingElement do kolekcji (
outputBec
), wywołującAdd
metodę Collection<T>BindingElement klasy .Utwórz wystąpienie TextMessageEncodingBindingElement klasy i dodaj je do kolekcji (
outputBec
). Określa kodowanie używane przez powiązanie.Utwórz obiekt HttpTransportBindingElement i dodaj go do kolekcji (
outputBec
). Określa to, że powiązanie używa transportu HTTP.Utwórz nowe powiązanie niestandardowe, tworząc wystąpienie CustomBinding klasy i przekazując kolekcję
outputBec
do konstruktora.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