Partilhar via


Como: Definir o Modo de Segurança

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

  1. 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.

  2. Defina a propriedade Mode do objeto retornado pela propriedade Security.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    

    Em 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.Message
    

    Ou 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.TransportWithMessageCredential
    
  3. També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

  1. Cria uma instância da ligação.

  2. Defina a propriedade Mode como Transport.

  3. Defina a ClientCredential propriedade para um valor apropriado. O código seguinte define a propriedade para Windows.

    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

  1. Cria uma instância da ligação.

  2. Defina a propriedade Mode como Message.

  3. Defina a ClientCredential propriedade para um valor apropriado. O código seguinte define a propriedade para Certificate.

    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

  1. Adicione um elemento de ligação apropriado ao <elemento de ligações> do ficheiro de configuração. O exemplo seguinte adiciona um <elemento wsHttpBinding> .

  2. Adicione um <binding> elemento e defina o seu name atributo para um valor apropriado.

  3. Adicione um <security> elemento e defina o mode atributo para Message, Transport, ou TransportWithMessageCredential.

  4. Se o modo estiver definido para Transport, adicione um <transport> elemento e defina o clientCredential atributo para um valor apropriado.

    O exemplo seguinte define o modo para "Transport", e depois define o clientCredentialType atributo do <transport> elemento para "Windows".

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" >
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Alternativamente, defina o security mode para "Message", seguido de um <"message"> elemento. Este exemplo define o clientCredentialType para "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.

Consulte também