Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A segurança da Windows Communication Foundation (WCF) tem três modos de segurança comuns que se encontram na maioria das ligações predefinidas: transporte, mensagem e "transporte com credencial de mensagem". Dois modos adicionais são específicos para duas ligações: o modo "apenas 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, Message, e TransportWithMessageCredential.
Note-se que nem todas as binding predefinidas suportam todos estes modos. Este tópico define o modo com as WSHttpBinding classes e NetTcpBinding e demonstra como definir o modo tanto programaticamente como através da configuração.
Para mais informações, consulte segurança WCF, veja Visão Geral de Segurança, Serviços de Segurança e Segurança de Serviços e Clientes. Para 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
Cria uma instância da classe de binding que estás a usar. Para uma lista de bindings predefinidos, veja System-Provided Bindings. Este exemplo cria uma instância da WSHttpBinding classe.
Defina a propriedade
Modedo objeto retornado pela propriedadeSecurity.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportEm alternativa, defina o modo para mensagem, como mostrado no código seguinte.
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.MessageOu definir o modo para transporte com credenciais de mensagem, como mostrado no código seguinte.
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.TransportWithMessageCredential;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportWithMessageCredentialTambém pode definir o modo no construtor da ligação, como mostrado no código seguinte.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);Dim b As New WSHttpBinding(SecurityMode.Message)
Definir a propriedade ClientCredentialType
Definir o modo para um dos três valores determina como defines a ClientCredentialType propriedade. Por exemplo, usando a WSHttpBinding classe, definir o modo para Transport significa que tens de definir a ClientCredentialType propriedade da HttpTransportSecurity classe para um valor apropriado.
Para definir a propriedade ClientCredentialType para o modo de Transporte
Cria uma instância da ligação.
Defina a propriedade
ModecomoTransport.Defina a
ClientCredentialpropriedade para um valor apropriado. O código seguinte define a propriedade paraWindows.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
Cria uma instância da ligação.
Defina a propriedade
ModecomoMessage.Defina a
ClientCredentialpropriedade para um valor apropriado. O código seguinte define a propriedade paraCertificate.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 as propriedades Mode e ClientCredentialType na configuração
Adicione um elemento de ligação apropriado ao <elemento de ligações> do ficheiro de configuração. O exemplo seguinte adiciona um <elemento wsHttpBinding> .
Adicione um
<binding>elemento e defina o seunameatributo para um valor apropriado.Adicione um
<security>elemento e defina omodeatributo paraMessage,Transport, ouTransportWithMessageCredential.Se o modo estiver definido para
Transport, adicione um<transport>elemento e defina oclientCredentialatributo para um valor apropriado.O exemplo seguinte define o modo para "
Transport", e depois define oclientCredentialTypeatributo do<transport>elemento para "Windows".<wsHttpBinding> <binding name="TransportSecurity"> <security mode="Transport" > <transport clientCredentialType = "Windows" /> </security> </binding> </wsHttpBinding >Alternativamente, defina o
security modepara "Message", seguido de um<"message">elemento. Este exemplo define oclientCredentialTypepara "Certificate".<wsHttpBinding> <binding name="MessageSecurity"> <security mode="Message" > <message clientCredentialType = "Certificate" /> </security> </binding> </wsHttpBinding >Usar o TransportWithMessageCredential valor é um caso especial, e é explicado abaixo.
Utilização do TransportWithMessageCredencial
Ao definir o modo de segurança para TransportWithMessageCredential, o transporte determina o mecanismo real que fornece a segurança ao nível do transporte. Por exemplo, o protocolo HTTP utiliza Secure Sockets Layer (SSL) sobre HTTP (HTTPS). Portanto, a definição da ClientCredentialType propriedade de qualquer objeto de segurança de transporte (como HttpTransportSecurity) é ignorada. Ou seja, só pode definir o ClientCredentialType do objeto de segurança da mensagem (para a associação WSHttpBinding, o objeto NonDualMessageSecurityOverHttp).
Para mais informações, veja Como: Usar Segurança de Transporte e Credenciais de Mensagem.