Como: definir o modo de segurança
A segurança do WCF (Windows Communication Foundation) tem três modos de segurança comuns encontrados na maioria das associações predefinidas: transporte, mensagem e "transporte com credencial de mensagem". Dois modos adicionais são específicos para duas associações: o modo "somente credenciais de transporte" encontrado no BasicHttpBinding e o modo "Ambos", encontrado no NetMsmqBinding. No entanto, este tópico se concentra nos três modos de segurança comuns: Transport, Messagee TransportWithMessageCredential.
Observe que nem toda associação predefinida dá suporte a todos esses modos. Este tópico define o modo com as classes WSHttpBinding e NetTcpBinding, e demonstra como definir o modo programaticamente e por meio de configuração.
Para obter mais informações, consulte a segurança do WCF, consulte Visão Geral de Segurança, Proteção de Serviços e Proteção de Serviços e Clientes. Para obter mais informações sobre o modo de transporte e mensagem, consulte Segurança de Transporte e Segurança de Mensagem.
Para definir o modo de segurança no código
Crie uma instância da classe de associação que você está usando. Para obter uma lista de associações predefinidas, consulte Associações Fornecidas pelo Sistema. Esse exemplo cria uma instância da classe WSHttpBinding.
Defina a propriedade
Mode
do objeto retornado pela propriedadeSecurity
.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport
Como alternativa, defina o modo como mensagem, conforme mostrado no código a seguir.
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message
Ou defina o modo como transporte com credenciais de mensagem, conforme mostrado no código a seguir.
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.TransportWithMessageCredential;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportWithMessageCredential
Você também pode definir o modo no construtor da associação, conforme mostrado no código a seguir.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
Dim b As New WSHttpBinding(SecurityMode.Message)
Configuração da propriedade ClientCredentialType
Configurar o modo como um dos três valores determina como você define a propriedade ClientCredentialType
. Por exemplo, usando a classe WSHttpBinding, configurar o modo como Transport
significa que você deve definir a propriedade ClientCredentialType da classe HttpTransportSecurity como um valor apropriado.
Para definir a propriedade ClientCredentialType como modo transporte
Crie uma instância da associação.
Defina a propriedade
Mode
comoTransport
.Defina a propriedade
ClientCredential
com um valor apropriado. O código a seguir define a propriedade comoWindows
.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
Para definir a propriedade ClientCredentialType como modo mensagem
Crie uma instância da associação.
Defina a propriedade
Mode
comoMessage
.Defina a propriedade
ClientCredential
com um valor apropriado. O código a seguir define a propriedade comoCertificate
.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message; b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
Para definir a propriedade Mode e ClientCredentialType na configuração
Adicione um elemento de associação apropriado ao elemento de <associações> do arquivo de configuração. O exemplo a seguir adiciona um elemento de <wsHttpBinding>.
Adicione um elemento
<binding>
e defina seu atributoname
com um valor apropriado.Adicione um elemento
<security>
e defina o atributomode
comoMessage
,Transport
ouTransportWithMessageCredential
.Se o modo estiver definido como
Transport
, adicione um elemento<transport>
e defina o atributoclientCredential
com um valor apropriado.O exemplo a seguir define o modo como "
Transport"
e define o atributoclientCredentialType
do elemento<transport>
como "Windows"
.<wsHttpBinding> <binding name="TransportSecurity"> <security mode="Transport" > <transport clientCredentialType = "Windows" /> </security> </binding> </wsHttpBinding >
Como alternativa, defina
security mode
como "Message"
, seguido por um elemento<"message">
. Este exemplo define oclientCredentialType
como "Certificate"
.<wsHttpBinding> <binding name="MessageSecurity"> <security mode="Message" > <message clientCredentialType = "Certificate" /> </security> </binding> </wsHttpBinding >
Usar o valor TransportWithMessageCredential é um caso especial e é explicado abaixo.
Usando TransportWithMessageCredential
Ao definir o modo de segurança como TransportWithMessageCredential
, o transporte determina o mecanismo real que fornece a segurança no nível do transporte. Por exemplo, o protocolo HTTP usa a SSL (Secure Sockets Layer) via HTTP (HTTPS). Portanto, a configuração da propriedade ClientCredentialType
de qualquer objeto de segurança de transporte (como HttpTransportSecurity) será ignorada. Em outras palavras, você só pode definir o objeto de segurança da mensagem ClientCredentialType
(para a associação WSHttpBinding
, o objeto NonDualMessageSecurityOverHttp).
Para obter mais informações, consulte Como usar a segurança do transporte e as credenciais de mensagem.