Postupy: Vytvoření vlastní vazby pomocí elementu SecurityBindingElement
Windows Communication Foundation (WCF) obsahuje několik systémových vazeb, které lze konfigurovat, ale neposkytuje úplnou flexibilitu při konfiguraci všech možností zabezpečení, které WCF podporuje. Toto téma ukazuje, jak vytvořit vlastní vazbu přímo z jednotlivých prvků vazby a zvýrazní některá nastavení zabezpečení, která lze zadat při vytváření takové vazby. Další informace o vytváření vlastních vazeb naleznete v tématu Rozšíření vazeb.
Upozorňující
SecurityBindingElement nepodporuje IDuplexSessionChannel obrazec kanálu, což je výchozí obrazec kanálu, který používá přenos TCP, pokud TransferMode je nastaven na Bufferedhodnotu . Abyste mohli tento scénář použítSecurityBindingElement, musíte TransferMode nastavit na Streamed hodnotu.
Vytvoření vlastní vazby
Ve službě WCF jsou všechny vazby tvořeny prvky vazby. Každý element vazby je odvozen od BindingElement třídy. U standardních systémových vazeb jsou prvky vazby vytvořeny a nakonfigurovány pro vás, i když můžete přizpůsobit některá nastavení vlastnosti.
Pokud chcete vytvořit vlastní vazbu, vytvoří se a nakonfigurují prvky vazby a vytvoří se CustomBinding z elementů vazby.
Uděláte to tak, že přidáte jednotlivé prvky vazby do kolekce reprezentované instancí BindingElementCollection třídy a pak nastavíte Elements
vlastnost rovnající se danému CustomBinding
objektu. Prvky vazby musíte přidat v následujícím pořadí: tok transakcí, spolehlivá relace, zabezpečení, složený duplexní, jednosměrný, zabezpečení streamu, kódování zpráv a přenos. Všimněte si, že v každé vazbě nejsou vyžadovány všechny uvedené prvky vazby.
SecurityBindingElement
Tři prvky vazby se vztahují k zabezpečení na úrovni zpráv, z nichž všechny jsou odvozeny z SecurityBindingElement třídy. Tři jsou TransportSecurityBindingElement, SymmetricSecurityBindingElementa AsymmetricSecurityBindingElement. Slouží TransportSecurityBindingElement k zajištění zabezpečení smíšeného režimu. Další dva prvky se používají, když vrstva zpráv poskytuje zabezpečení.
Další třídy se používají při zajištění zabezpečení na úrovni přenosu:
Požadované prvky vazby
Existuje velký počet možných vazeb prvků, které lze kombinovat do vazby. Ne všechny tyto kombinace jsou platné. Tato část popisuje požadované prvky, které musí být přítomny v vazbě zabezpečení.
Platné vazby zabezpečení závisí na mnoha faktorech, včetně následujících:
Režim zabezpečení.
Přenosový protokol.
Vzor výměny zpráv (MEP) zadaný ve smlouvě.
Následující tabulka ukazuje platné konfigurace zásobníku elementů vazby pro každou kombinaci předchozích faktorů. Mějte na paměti, že tyto požadavky jsou minimální. Do vazby můžete přidat další prvky vazby, například prvky vazby kódování zpráv, elementy vazby transakcí a další prvky vazby.
Režim zabezpečení | Přeprava | Model výměny zpráv kontraktu | Model výměny zpráv kontraktu | Model výměny zpráv kontraktu |
---|---|---|---|---|
Datagram |
Request Reply |
Duplex |
||
Přeprava | Https | |||
OneWayBindingElement | ||||
HttpsTransportBindingElement | HttpsTransportBindingElement | |||
TCP | ||||
OneWayBindingElement | ||||
SSL nebo Windows StreamSecurityBindingElement | SSL nebo Windows StreamSecurityBindingElement | SSL nebo Windows StreamSecurityBindingElement | ||
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
Zpráva | HTTP | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement | SymmetricSecurityBindingElement (režim ověřování = SecureConversation) |
CompositeDuplexBindingElement | ||||
OneWayBindingElement | OneWayBindingElement | |||
HttpTransportBindingElement | HttpTransportBindingElement | HttpTransportBindingElement | ||
Tcp | SecurityBindingElement | SecurityBindingElement | SymmetricSecurityBindingElement (režim ověřování = SecureConversation) | |
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement | ||
Smíšený (přenos s přihlašovacími údaji zprávy) | Https | TransportSecurityBindingElement | TransportSecurityBindingElement | |
OneWayBindingElement | ||||
HttpsTransportBindingElement | HttpsTransportBindingElement | |||
TCP | TransportSecurityBindingElement | SymmetricSecurityBindingElement (režim ověřování = SecureConversation) | SymmetricSecurityBindingElement (režim ověřování = SecureConversation) | |
OneWayBindingElement | ||||
SSL nebo Windows StreamSecurityBindingElement | SSL nebo Windows StreamSecurityBindingElement | SSL nebo Windows StreamSecurityBindingElement | ||
TcpTransportBindingElement | TcpTransportBindingElement | TcpTransportBindingElement |
Všimněte si, že pro SecurityBindingElements existuje mnoho konfigurovatelných nastavení. Další informace naleznete v tématu Režimy ověřování SecurityBindingElement.
Další informace naleznete v tématu Zabezpečené konverzace a zabezpečené relace.
Procedury
Vytvoření vlastní vazby, která používá SymmetricSecurityBindingElement
Vytvořte instanci BindingElementCollection třídy s názvem
outputBec
.Volání statické metody
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)
, která vrací instanci SymmetricSecurityBindingElement třídy.SymmetricSecurityBindingElement Přidejte do kolekce (
outputBec
) volánímAdd
metody Collection<T>BindingElement třídy.Vytvořte instanci TextMessageEncodingBindingElement třídy a přidejte ji do kolekce (
outputBec
). Určuje kódování používané vazbou.Vytvořte HttpTransportBindingElement a přidejte ho do kolekce (
outputBec
). Určuje, že vazba používá přenos HTTP.Vytvořte novou vlastní vazbu vytvořením instance CustomBinding třídy a předáním kolekce
outputBec
konstruktoru.Výsledná vlastní vazba sdílí mnoho stejných charakteristik jako standard WSHttpBinding. Určuje zabezpečení na úrovni zpráv a přihlašovací údaje systému Windows, ale zakazuje zabezpečené relace, vyžaduje, aby přihlašovací údaje služby byly zadány mimo pásmo a nešifrují podpisy. Poslední lze řídit pouze nastavením MessageProtectionOrder vlastnosti, jak je znázorněno v kroku 4. Ostatní dva se dají ovládat pomocí nastavení standardní vazby.
Příklad
Popis
Následující příklad poskytuje úplnou funkci pro vytvoření vlastní vazby, která používá SymmetricSecurityBindingElement.
Kód
// 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