Como: Criar uma associação personalizada usando o SecurityBindingElement

O Windows Communication Foundation (WCF) inclui várias associações fornecidas pelo sistema que podem ser configuradas, mas não fornecem flexibilidade total ao configurar todas as opções de segurança suportadas pelo WCF. Este tópico demonstra como criar uma associação personalizada diretamente a partir de elementos de vinculação individuais e destaca algumas das configurações de segurança que podem ser especificadas ao criar essa associação. Para obter mais informações sobre como criar ligações personalizadas, consulte Estendendo ligações.

Aviso

SecurityBindingElement não suporta a forma de IDuplexSessionChannel canal, que é a forma de canal padrão usada pelo transporte TCP quando TransferMode está definida como Buffered. Você deve definir TransferMode como Streamed para usar SecurityBindingElement neste cenário.

Criando uma vinculação personalizada

No WCF, todas as ligações são compostas por elementos de ligação. Cada elemento de ligação deriva da BindingElement classe. Para as associações padrão fornecidas pelo sistema, os elementos de ligação são criados e configurados para você, embora você possa personalizar algumas das configurações de propriedade.

Por outro lado, para criar uma associação personalizada, os elementos de ligação são criados e configurados e um CustomBinding é criado a partir dos elementos de ligação.

Para fazer isso, adicione os elementos de vinculação individuais a uma coleção representada por uma instância da BindingElementCollection classe e, em seguida, defina a Elements propriedade do CustomBinding igual para esse objeto. Você deve adicionar os elementos de ligação na seguinte ordem: Fluxo de Transações, Sessão Confiável, Segurança, Duplex Composto, One-way, Segurança de Fluxo, Codificação de Mensagens e Transporte. Observe que nem todos os elementos de vinculação listados são necessários em todas as associações.

SecurityBindingElement

Três elementos de ligação estão relacionados à segurança no nível da mensagem, todos derivados da SecurityBindingElement classe. Os três são TransportSecurityBindingElement, SymmetricSecurityBindingElemente AsymmetricSecurityBindingElement. O TransportSecurityBindingElement é usado para fornecer segurança de modo misto. Os outros dois elementos são usados quando a camada de mensagem fornece segurança.

Classes adicionais são usadas quando a segurança de nível de transporte é fornecida:

Elementos de vinculação necessários

Há um grande número de elementos de ligação possíveis que podem ser combinados em uma ligação. Nem todas estas combinações são válidas. Esta seção descreve os elementos necessários que devem estar presentes em uma associação de segurança.

As associações de segurança válidas dependem de muitos fatores, incluindo os seguintes:

  • Modo de segurança.

  • Protocolo de transporte.

  • O padrão de troca de mensagens (MEP) especificado no contrato.

A tabela a seguir mostra as configurações válidas da pilha de elementos de ligação para cada combinação dos fatores anteriores. Tenha em atenção que estes são requisitos mínimos. Você pode adicionar elementos de vinculação adicionais à associação, como elementos de vinculação de codificação de mensagem, elementos de vinculação de transação e outros elementos de vinculação.

Modo de Segurança Transporte Padrão de troca de mensagens de contrato Padrão de troca de mensagens de contrato Padrão de troca de mensagens de contrato
Datagram Request Reply Duplex
Transporte Disponível em:
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP
OneWayBindingElement
SSL ou Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Mensagem Http SymmetricSecurityBindingElement SymmetricSecurityBindingElement SymmetricSecurityBindingElement (modo de autenticação = SecureConversation)
CompositeDuplexBindingElement
OneWayBindingElement OneWayBindingElement
HttpTransportBindingElement HttpTransportBindingElement HttpTransportBindingElement
TCP SecurityBindingElement SecurityBindingElement SymmetricSecurityBindingElement (modo de autenticação = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Misto (transporte com credenciais de mensagem) Disponível em: TransportSecurityBindingElement TransportSecurityBindingElement
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP TransportSecurityBindingElement SymmetricSecurityBindingElement (modo de autenticação = SecureConversation) SymmetricSecurityBindingElement (modo de autenticação = SecureConversation)
OneWayBindingElement
SSL ou Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement

Observe que há muitas configurações configuráveis no SecurityBindingElements. Para obter mais informações, consulte Modos de autenticação SecurityBindingElement.

Para obter mais informações, consulte Conversas seguras e sessões seguras.

Procedimentos

Para criar uma associação personalizada que usa um SymmetricSecurityBindingElement

  1. Crie uma instância da BindingElementCollection classe com o nome outputBec.

  2. Chame o método M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)estático , que retorna uma instância da SymmetricSecurityBindingElement classe.

  3. Adicione o SymmetricSecurityBindingElement à coleção (outputBec) chamando o Add método da Collection<T> classe of BindingElement .

  4. Crie uma instância da classe e adicione-a TextMessageEncodingBindingElement à coleção (outputBec). Isso especifica a codificação usada pela associação.

  5. Crie um HttpTransportBindingElement e adicione-o à coleção (outputBec). Isso especifica que a associação usa o transporte HTTP.

  6. Crie uma nova associação personalizada criando uma instância da CustomBinding classe e passando a coleção outputBec para o construtor.

  7. A vinculação personalizada resultante compartilha muitas das mesmas características que o padrão WSHttpBinding. Ele especifica a segurança no nível da mensagem e as credenciais do Windows, mas desabilita sessões seguras, exige que a credencial de serviço seja especificada fora da banda e não criptografa assinaturas. O último pode ser controlado apenas definindo a propriedade, MessageProtectionOrder conforme mostrado na etapa 4. Os outros dois podem ser controlados usando configurações na vinculação padrão.

Exemplo

Description

O exemplo a seguir fornece uma função completa para criar uma associação personalizada que usa um SymmetricSecurityBindingElementarquivo .

Código

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

Consulte também