Postupy: Vytvoření vlastní vazby pomocí 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.

Výstraha

SecurityBindingElement nepodporuje tvar kanálu IDuplexSessionChannel, který je výchozím tvarem kanálu používaným přenosem TCP, když je TransferMode nastaven na hodnotu Buffered. Musíte nastavit TransferMode na Streamed, abyste mohli SecurityBindingElement použít v tomto scénáři.

Vytvoření vlastní vazby

Ve frameworku 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.

Naopak, pokud chcete vytvořit vlastní vazbu, vytvoří se a nakonfigurují prvky vazby a z těchto prvků vazby se vytvoří CustomBinding.

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ý duplex, Jednosměrný, Zabezpečení přenosu, 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í, pokud je zajištěno zabezpečení na úrovni přenosu:

Požadované prvky vazby

Existuje velký počet možných prvků vazby, které lze kombinovat do jednoho celku. 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
protokol 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
Protokol tcp SecurityBindingElement SecurityBindingElement SymmetricSecurityBindingElement (režim ověřování = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Smíšený (transport s autentizačními údaji zprávy) Https TransportSecurityBindingElement TransportSecurityBindingElement
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
protokol 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.

Procedures

Vytvoření vlastní vazby, která používá SymmetricSecurityBindingElement

  1. Vytvořte instanci BindingElementCollection třídy s názvem outputBec.

  2. Volání statické metody M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), která vrací instanci SymmetricSecurityBindingElement třídy.

  3. Přidejte SymmetricSecurityBindingElement do kolekce (outputBec) voláním metody Add objektu Collection<T> třídy BindingElement.

  4. Vytvořte instanci TextMessageEncodingBindingElement třídy a přidejte ji do kolekce (outputBec). Určuje kódování používané vazbou.

  5. Vytvořte HttpTransportBindingElement a přidejte ho do kolekce (outputBec). Určuje, že vazba používá přenos HTTP.

  6. Vytvořte novou vlastní vazbu vytvořením instance CustomBinding třídy a předáním kolekce outputBec konstruktoru.

  7. Výsledná vlastní vazba sdílí mnoho charakteristik se standardem 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í dvě lze ovládat pomocí nastavení standardní vazby.

Příklad

Description

Následující příklad poskytuje úplnou funkci pro vytvoření vlastní vazby, která používá 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

Viz také