WCF - Segurança
Um serviço WCF se orgulha de um sistema de segurança robusto com dois modos ou níveis de segurança para que apenas um cliente pretendido possa acessar os serviços. As ameaças de segurança comuns em uma transação distribuída são moderadas em grande parte pelo WCF.
Principais recursos de segurança
O serviço WCF tem quatro recursos de segurança principais, conforme ilustrado na figura abaixo.
Authentication - Aqui a autenticação não se limita a identificar o remetente da mensagem, mas é mútua, ou seja, a autenticação do destinatário da mensagem é necessária para descartar a possibilidade de qualquer tipo de ataque de intermediário.
Authorization- Esta é a próxima etapa realizada por um serviço WCF para garantir a segurança e é determinado aqui se o serviço deve autorizar o chamador a prosseguir ou não. Embora a autorização não dependa da autenticação, ela normalmente segue a autenticação.
Confidentiality- A troca de informações entre um chamador e um serviço é mantida em sigilo para restringir sua interpretação por terceiros para os quais a mensagem não se destina. Para tornar isso possível, a criptografia é usada junto com uma ampla variedade de outros mecanismos.
Integrity - O conceito-chave final é manter a integridade, ou seja, oferecer a garantia de que a mensagem não foi adulterada por ninguém em sua jornada do remetente ao destinatário.
Modo de segurança de transferência
O WCF oferece os seguintes modos de segurança de transferência para garantir uma comunicação segura entre um cliente e um servidor. Os diversos modos de segurança de transferência são mencionados abaixo.
None- Este modo não garante nenhum tipo de segurança da mensagem e o serviço não obtém nenhuma credencial sobre o cliente. Este modo é altamente arriscado, pois pode permitir a adulteração de mensagens e, portanto, não é recomendado.
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "None"/>
</binding>
</wsHttpBinding>
Transport- Este modo é a maneira mais fácil de obter uma transferência segura de mensagem por meio do uso de protocolos de comunicação como TCP, IPC, Https e MSMQ. Este modo é mais eficaz quando a transferência é ponto a ponto e é usada principalmente em um ambiente controlado, ou seja, aplicativos de intranet.
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "Transport"/>
</binding>
</wsHttpBinding>
Message- O modo de segurança permite a autenticação mútua e oferece privacidade em grande parte, pois as mensagens são criptografadas e podem ser transportadas através de http, que não é considerado um protocolo seguro. Aqui, a segurança é fornecida de ponta a ponta, sem considerar quantos intermediários estão envolvidos em uma transferência de mensagem e se há um transporte seguro ou não. O modo é usado normalmente por aplicativos da Internet.
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "Message"/>
</binding>
</wsHttpBinding>
Mixed - Este modo de segurança não é usado com frequência e a autenticação do cliente é oferecida apenas no nível do cliente.
<wsHttpBinding>
<binding name = "WCFSecurityExample">
<security mode = "TransportWithMessageCredential"/>
</binding>
</wsHttpBinding>
Both- Este modo de segurança é composto por segurança de transporte e segurança de mensagem para oferecer uma cobertura de segurança robusta, mas muitas vezes resulta na sobrecarga do desempenho geral. Este é compatível apenas com o MSMQ.
<netMsmqBinding>
<binding name = "WCFSecurityExample">
<security mode = "Both"/>
</binding>
</netMsmqBinding>
Todas as ligações WCF, exceto BasicHttpBinding, têm alguma extensão de segurança de transferência por padrão.
Nível de segurança da mensagem
A segurança de nível de mensagem não depende de protocolos WCF. Ele é empregado com os próprios dados da mensagem, criptografando-os usando um algoritmo padrão. Várias credenciais de cliente estão disponíveis para diferentes ligações para o nível de segurança da mensagem e são discutidas abaixo.
Client credentials for message level security in WCF
None- Aqui, a criptografia é usada para proteger a mensagem, enquanto nenhuma autenticação do cliente é executada, o que significa que o serviço pode ser acessado por um cliente anônimo. Exceto para BasicHttpBinding, todas as ligações WCF oferecem suporte a essa credencial de cliente. No entanto, deve-se observar que para NetNamedPipeBinding, essa credencial de cliente não está disponível.
Windows- Aqui, a criptografia da mensagem e a autenticação do cliente ocorrem para um usuário conectado em tempo real. Nesse caso também, ao contrário de todas as outras associações do WCF, NetNamedPipeBinding não está disponível e BasicHttpBinding não oferece seu suporte.
UserName- Aqui, as mensagens são criptografadas e protegidas, oferecendo um nome de usuário, e os clientes são autenticados quando precisam oferecer uma senha. BasicHttpBinding, assim como as duas credenciais de cliente acima, não oferece suporte a UserName e não está disponível para NetNamedPipeBinding.
Certificate- Junto com a criptografia de mensagem, o cliente e o serviço obtêm uma autenticação com certificado. Essa credencial de cliente está disponível e é suportada por todas as ligações WCF, exceto NetNamedPipeBinding.
IssuedToken- Tokens emitidos por uma autoridade como Cardspace são usados para autenticar as mensagens. A criptografia de mensagens também é realizada aqui.
O código a seguir mostra como as credenciais do cliente são configuradas no nível / modo de segurança da mensagem WCF.
<netTcpBinding>
<binding name = "WCFMessageSecurityExample">
<security mode = "Message">
<message clientCredentialType = "None"/>
</security>
</binding>
</netTcpBinding>
<netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>
Aqui, deve-se observar que o modo de segurança de transporte tem uma vantagem sobre o nível de segurança da mensagem, pois o primeiro é mais rápido. Não requer nenhuma codificação adicional e oferece suporte à interoperabilidade e, portanto, não reduz o desempenho geral.
No entanto, do ponto de vista da segurança, o modo de segurança da mensagem é mais robusto e independente de protocolos e oferece segurança ponta a ponta.