Como: Definir o modo de segurança
A segurança do Windows Communication Foundation (WCF) 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 credencial de transporte" encontrado no BasicHttpBinding, e o modo "Ambos", encontrado no NetMsmqBinding. No entanto, este tópico concentra-se nos três modos de segurança comuns: Transport, Messagee TransportWithMessageCredential.
Observe que nem todas as ligações predefinidas suportam todos esses modos. Este tópico define o modo com as WSHttpBinding classes e NetTcpBinding e demonstra como definir o modo programaticamente e através da configuração.
Para obter mais informações, consulte Segurança WCF, Visão geral da segurança, Protegendo serviços e Protegendo serviços e clientes. Para obter mais informações sobre o modo de transporte e a mensagem, consulte Segurança de transporte e segurança de mensagens.
Para definir o modo de segurança no código
Crie uma instância da classe de vinculação que você está usando. Para obter uma lista de ligações predefinidas, consulte Ligações fornecidas pelo sistema. Este exemplo cria uma instância da WSHttpBinding classe.
Defina a
Mode
propriedade do objeto retornado pelaSecurity
propriedade.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 para transportar 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 ligação, conforme mostrado no código a seguir.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
Dim b As New WSHttpBinding(SecurityMode.Message)
Definindo a propriedade ClientCredentialType
Definir o modo para um dos três valores determina como você define a ClientCredentialType
propriedade. Por exemplo, usando a WSHttpBinding classe, definir o modo como Transport
significa que você deve definir a ClientCredentialTypeHttpTransportSecurity propriedade da classe para um valor apropriado.
Para definir a propriedade ClientCredentialType para o modo de Transporte
Crie uma instância da associação.
Defina a propriedade
Mode
comoTransport
.Defina a
ClientCredential
propriedade como 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 para o modo Mensagem
Crie uma instância da associação.
Defina a propriedade
Mode
comoMessage
.Defina a
ClientCredential
propriedade como 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 binding apropriado ao <elemento bindings> do arquivo de configuração. O exemplo a seguir adiciona um elemento wsHttpBinding>.<
Adicione um
<binding>
elemento e defina seuname
atributo para um valor apropriado.Adicione um
<security>
elemento e defina omode
atributo comoMessage
,Transport
ouTransportWithMessageCredential
.Se o modo estiver definido como
Transport
, adicione um<transport>
elemento e defina oclientCredential
atributo como um valor apropriado.O exemplo a seguir define o modo como "
Transport"
e, em seguida, define o<transport>
clientCredentialType
atributo do elemento como "Windows"
.<wsHttpBinding> <binding name="TransportSecurity"> <security mode="Transport" > <transport clientCredentialType = "Windows" /> </security> </binding> </wsHttpBinding >
Como alternativa, defina como
security mode
"Message"
, seguido por um<"message">
elemento . Este exemplo define comoclientCredentialType
"Certificate"
.<wsHttpBinding> <binding name="MessageSecurity"> <security mode="Message" > <message clientCredentialType = "Certificate" /> </security> </binding> </wsHttpBinding >
O uso do TransportWithMessageCredential valor é 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 de transporte. Por exemplo, o protocolo HTTP usa SSL (Secure Sockets Layer) sobre HTTP (HTTPS). Portanto, a ClientCredentialType
definição da propriedade de qualquer objeto de segurança de transporte (como HttpTransportSecurity) é ignorada. Em outras palavras, você só pode definir o ClientCredentialType
do objeto de segurança da mensagem (para a WSHttpBinding
ligação, o NonDualMessageSecurityOverHttp objeto).
Para obter mais informações, consulte Como usar a segurança de transporte e credenciais de mensagem.