Compartilhar via


Segurança de Aplicativo Distribuído

A segurança do Windows Communication Foundation (WCF) é dividida em três áreas funcionais principais: transferência de segurança, controle de acesso e auditoria. A segurança de transferência fornece integridade, confidencialidade e autenticação. A segurança de transferência é fornecida por um dos seguintes: segurança de transporte, segurança de mensagem ou TransportWithMessageCredential.

Para obter uma visão geral da segurança de mensagens do WCF, consulte Visão geral de segurança. Para obter mais informações sobre as outras duas partes da segurança do WCF, consulte Autorização e Auditoria.

Cenários de Segurança de Transferência

Os cenários comuns que empregam a segurança de transferência do WCF incluem o seguinte:

  • Transferência segura usando o Windows. Um cliente e serviço do WCF são implantados em um domínio do Windows (ou em uma floresta do Windows). As mensagens contêm dados pessoais, portanto, os requisitos incluem autenticação mútua do cliente e serviço, integridade da mensagem e confidencialidade da mensagem. Além disso, é necessária uma prova de que uma transação específica ocorreu, por exemplo, o receptor da mensagem deve registrar as informações de assinatura.

  • Transferência segura usando UserName e HTTPS. Um cliente e um serviço do WCF precisam ser desenvolvidos para funcionar na Internet. As credenciais do cliente são autenticadas em um banco de dados de pares de nome de usuário/senha. O serviço é implantado em um endereço HTTPS usando um certificado SSL (Secure Sockets Layer) confiável. Como as mensagens viajam pela Internet, o cliente e o serviço precisam ser mutuamente autenticados e a confidencialidade e integridade das mensagens devem ser preservadas durante a transferência.

  • Proteger a transferência usando certificados. Um cliente e serviço do WCF precisam ser desenvolvidos para trabalhar pela Internet pública. O cliente e o serviço têm certificados que podem ser usados para proteger as mensagens. O cliente e o serviço usam a Internet para se comunicar entre si e para executar transações de alto valor que exigem integridade, confidencialidade e autenticação mútua da mensagem.

Integridade, confidencialidade e autenticação

Três funções — integridade, confidencialidade e autenticação — são juntas chamadas de segurança de transferência. A segurança de transferência fornece as funções que ajudam a atenuar as ameaças a um aplicativo distribuído. A tabela a seguir descreve brevemente as três funções que compõem a segurança de transferência.

Função Descrição
Integridade A integridade é a garantia de que os dados são completos e precisos, especialmente depois de serem percorridos de um ponto para outro, e possivelmente lidos por muitos atores. A integridade deve ser mantida para evitar a adulteração dos dados e geralmente é obtida pela assinatura digital de uma mensagem.
Confidencialidade Confidencialidade é a garantia de que uma mensagem não foi lida por ninguém que não seja o leitor pretendido. Por exemplo, um número de cartão de crédito deve ser mantido confidencial à medida que é enviado pela Internet. A confidencialidade geralmente é fornecida pela criptografia de dados usando um esquema de chave pública/chave privada.
Autenticação A autenticação é a verificação de uma identidade reivindicada. Por exemplo, ao usar uma conta bancária, é imperativo que apenas o proprietário real da conta tenha permissão para retirar fundos. A autenticação pode ser fornecida por uma variedade de meios. Um método comum é o sistema de usuário/senha. Um segundo é o uso de um certificado X.509 fornecido por terceiros.

Modos de segurança

O WCF tem vários modos de segurança de transferência, que são descritos na tabela a seguir.

Modo Descrição
Nenhum Nenhuma segurança é fornecida na camada de transporte ou na camada de mensagem. Nenhuma das associações predefinidas usa esse modo por padrão, exceto o <elemento basicHttpBinding> ou, ao usar o código, a BasicHttpBinding classe.
Transporte Usa um transporte seguro, como HTTPS, para integridade, confidencialidade e autenticação mútua.
Mensagem Usa a segurança de mensagens SOAP para integridade, confidencialidade e autenticação mútua. As mensagens SOAP são protegidas de acordo com os padrões de WS-Security.
Modo Misto Usa a segurança de transporte para integridade, confidencialidade e autenticação de servidor. Usa segurança de mensagem (WS-Security e outros padrões) para autenticação de cliente.

(Essa enumeração para esse modo é TransportWithMessageCredential.)
Ambos Executa a proteção e a autenticação em ambos os níveis. Esse modo só está disponível no <elemento netMsmqBinding> .

Credenciais e segurança de transferência

Uma credencial consiste nos dados apresentados para estabelecer uma identidade ou funcionalidades declaradas. A apresentação de uma credencial envolve a apresentação dos dados e a prova de posse dos dados. O WCF dá suporte a uma variedade de tipos de credencial nos níveis de segurança de transporte e de mensagem. Você pode especificar um tipo de credencial para uma associação do WCF.

Em muitos países ou regiões, uma carteira de motorista é um exemplo de credencial. Uma licença contém dados que representam a identidade e os recursos. Contém prova de posse na forma da imagem do possuidor. A licença é emitida por uma autoridade confiável, geralmente um departamento de licenciamento governamental. A licença está lacrada e pode conter um holograma, mostrando que ela não foi adulterada ou falsificada.

Por exemplo, considere dois tipos de credenciais com suporte no WCF: nome de usuário e credenciais de certificado (X.509).

Para a credencial de nome de usuário, o nome de usuário representa a identidade reivindicada e a senha apresenta a prova de posse. A autoridade confiável nesse caso é o sistema que valida o nome de usuário e a senha.

Na credencial do certificado, o nome da entidade, o nome alternativo da entidade ou determinados campos dentro do certificado podem ser usados para representar a identidade reivindicada e/ou as capacidades. A prova de posse dos dados na credencial é estabelecida usando a chave privada associada para gerar uma assinatura.

Para obter mais informações sobre segurança de transferência de programação e especificação de credenciais, consulte Associações e Comportamentos de Segurança e Segurança.

Tipos de credencial de cliente de transporte

A tabela a seguir mostra os valores possíveis usados ao criar um aplicativo que usa a segurança de transferência. Você pode usar esses valores em configurações de código ou associação.

Configurações Descrição
Nenhum Especifica que o cliente não precisa apresentar nenhuma credencial. Isso se traduz em um cliente anônimo.
Básico Especifica a autenticação básica. Para obter mais informações, consulte RFC2617"Autenticação HTTP: Autenticação Básica e Digest".
Resumo Especifica a autenticação Digest. Para obter mais informações, consulte RFC2617"Autenticação HTTP: Autenticação Básica e Digest".
Ntlm Especifica a autenticação do Windows usando a negociação de SSPI em um domínio do Windows.

A negociação do SSPI resulta no uso de um dos protocolos: Kerberos ou NT LanMan (NTLM).
Windows Especifica a autenticação do Windows usando SSPI em um domínio do Windows. O SSPI escolhe entre o protocolo Kerberos e o NTLM como serviço de autenticação.

A SSPI tenta primeiro o protocolo Kerberos; se isso falhar, ele usará NTLM.
Certificado Executa a autenticação do cliente usando um certificado, normalmente X.509.

Tipos de credencial de cliente de mensagem

A tabela a seguir mostra os valores possíveis usados ao criar um aplicativo que usa a segurança da mensagem. Você pode usar esses valores em configurações de código ou associação.

Configurações Descrição
Nenhum Permite que o serviço interaja com clientes anônimos.
Windows Permite que as trocas de mensagens SOAP ocorram no contexto autenticado de uma credencial do Windows. Usa o mecanismo de negociação de SSPI para escolher entre o protocolo Kerberos ou o NTLM como um serviço de autenticação.
Nome de usuário Permite que o serviço exija que o cliente seja autenticado com uma credencial de nome de usuário. Observe que o WCF não permite nenhuma operação criptográfica com o nome de usuário, como gerar uma assinatura ou criptografar dados. Dessa forma, o WCF impõe que o transporte seja protegido ao usar credenciais de nome de usuário.
Certificado Permite que o serviço exija que o cliente seja autenticado usando um certificado.
CardSpace Permite que o serviço exija que o cliente seja autenticado usando um CardSpace.

Credenciais de programação

Para cada um dos tipos de credencial do cliente, o modelo de programação do WCF permite especificar os valores de credencial e validadores de credencial usando comportamentos de serviço e comportamentos de canal.

A segurança do WCF tem dois tipos de credenciais: comportamentos de credencial de serviço e comportamentos de credencial de canal. Os comportamentos de credencial no WCF especificam os dados reais, ou seja, as credenciais usadas para atender aos requisitos de segurança expressos por meio de associações. No WCF, uma classe de cliente é o componente de runtime que converte entre a invocação de operação e as mensagens. Todos os clientes herdam da classe ClientBase<TChannel>. A ClientCredentials propriedade na classe base permite que você especifique vários valores de credenciais do cliente.

No WCF, os comportamentos de serviço são atributos aplicados à classe que implementa um contrato de serviço (interface) para controlar programaticamente o serviço. A ServiceCredentials classe permite que você especifique certificados para configurações de credencial de serviço e validação de cliente para vários tipos de credencial de cliente.

Modelo de negociação para segurança de mensagens

O modo de segurança da mensagem permite executar a segurança de transferência para que a credencial de serviço seja configurada no cliente fora da banda. Por exemplo, se você estiver usando um certificado armazenado no repositório de certificados do Windows, deverá usar uma ferramenta como um snap-in do Microsoft Management Console (MMC).

O modo de segurança de mensagem também permite que você implemente a segurança de transferência para que a credencial de serviço seja compartilhada com o cliente como parte de uma negociação inicial. Para habilitar a negociação, defina a NegotiateServiceCredential propriedade como true.

Consulte também