Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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
Modepropriedade do objeto retornado pelaSecuritypropriedade.WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportComo 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.MessageOu 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.TransportWithMessageCredentialVocê 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 ClientCredentialType HttpTransportSecurity 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
ModecomoTransport.Defina a
ClientCredentialpropriedade 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
ModecomoMessage.Defina a
ClientCredentialpropriedade 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 seunameatributo para um valor apropriado.Adicione um
<security>elemento e defina omodeatributo comoMessage,TransportouTransportWithMessageCredential.Se o modo estiver definido como
Transport, adicione um<transport>elemento e defina oclientCredentialatributo como um valor apropriado.O exemplo a seguir define o modo como "
Transport"e, em seguida, define o<transport>clientCredentialTypeatributo 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.