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

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

  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
    

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

  1. Crie uma instância da associação.

  2. Defina a propriedade Mode como Transport.

  3. Defina a propriedade ClientCredential com um valor apropriado. O código a seguir define a propriedade como 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 como modo mensagem

  1. Crie uma instância da associação.

  2. Defina a propriedade Mode como Message.

  3. Defina a propriedade ClientCredential com um valor apropriado. O código a seguir define a propriedade como 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 a propriedade Mode e ClientCredentialType na configuração

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

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

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

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

    O exemplo a seguir define o modo como "Transport" e define o atributo clientCredentialType 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 o clientCredentialType 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.

Confira também