Segurança de mensagens no WCF
O Windows Communication Foundation (WCF) tem dois modos principais para fornecer segurança (Transport
e Message
) e um terceiro modo (TransportWithMessageCredential
) que combina os dois. Este tópico discute a segurança da mensagem e os motivos para usá-la.
O que é segurança de mensagens?
A segurança de mensagens usa a especificação WS-Security para proteger mensagens. A especificação WS-Security descreve aprimoramentos no sistema de mensagens SOAP para garantir confidencialidade, integridade e autenticação no nível da mensagem SOAP (em vez do nível de transporte).
Em resumo, a segurança da mensagem difere da segurança de transporte ao encapsular as credenciais de segurança e as declarações com cada mensagem, juntamente com qualquer proteção de mensagem (assinatura ou criptografia). Aplicar a segurança diretamente à mensagem, modificando seu conteúdo, permite que a mensagem segura seja autocontida em relação aos aspetos de segurança. Isso permite alguns cenários que não são possíveis quando a segurança de transporte é usada.
Razões para usar a segurança de mensagens
Na segurança no nível da mensagem, todas as informações de segurança são encapsuladas na mensagem. Proteger a mensagem com segurança no nível da mensagem em vez da segurança no nível do transporte tem as seguintes vantagens:
Segurança de ponta a ponta. A segurança de transporte, como SSL (Secure Sockets Layer), só protege as mensagens quando a comunicação é ponto-a-ponto. Se a mensagem for encaminhada para um ou mais intermediários SOAP (por exemplo, um router) antes de chegar ao recetor final, a mensagem em si não é protegida quando um intermediário a lê a partir do fio. Além disso, as informações de autenticação do cliente estão disponíveis apenas para o primeiro intermediário e devem ser retransmitidas para o recetor final de forma fora da banda, se necessário. Isso se aplica mesmo se toda a rota usar segurança SSL entre saltos individuais. Como a segurança da mensagem funciona diretamente com a mensagem e protege o XML nela, a segurança permanece com a mensagem, independentemente de quantos intermediários estão envolvidos antes que ela chegue ao recetor final. Isso permite um verdadeiro cenário de segurança de ponta a ponta.
Maior flexibilidade. Partes da mensagem, em vez da mensagem inteira, podem ser assinadas ou criptografadas. Isto significa que os intermediários podem visualizar as partes da mensagem que lhes são destinadas. Se o remetente precisar tornar parte da informação na mensagem visível para os intermediários, mas quiser garantir que ela não seja adulterada, ele pode simplesmente assiná-la, mas deixá-la sem criptografia. Como a assinatura faz parte da mensagem, o recetor final pode verificar se as informações contidas na mensagem foram recebidas intactas. Um cenário pode ter um serviço intermediário SOAP que roteia a mensagem de acordo com o valor do cabeçalho da ação. Por padrão, o WCF não criptografa o valor Action, mas o assina se a segurança da mensagem for usada. Portanto, esta informação está disponível para todos os intermediários, mas ninguém pode alterá-la.
Suporte para vários transportes. Você pode enviar mensagens seguras através de muitos transportes diferentes, como pipes nomeados e TCP, sem ter que confiar no protocolo para segurança. Com a segurança no nível de transporte, todas as informações de segurança têm como escopo uma única conexão de transporte específica e não estão disponíveis no próprio conteúdo da mensagem. A segurança da mensagem torna a mensagem segura, independentemente do transporte que você usa para transmitir a mensagem, e o contexto de segurança é diretamente incorporado dentro da mensagem.
Suporte para um amplo conjunto de credenciais e declarações. A segurança da mensagem é baseada na especificação WS-Security, que fornece uma estrutura extensível capaz de transmitir qualquer tipo de declaração dentro da mensagem SOAP. Ao contrário da segurança de transporte, o conjunto de mecanismos de autenticação, ou declarações, que você pode usar não é limitado pelos recursos de transporte. A segurança de mensagens do WCF inclui vários tipos de autenticação e transmissão de declarações e pode ser estendida para oferecer suporte a tipos adicionais, conforme necessário. Por esses motivos, por exemplo, um cenário de credenciais federadas não é possível sem a segurança da mensagem. Para obter mais informações sobre cenários de federação suportados pelo WCF, consulte Federação e tokens emitidos.
Como a segurança de mensagens e de transporte se comparam
Prós e contras da segurança no nível de transporte
A segurança dos transportes tem as seguintes vantagens:
Não requer que as partes comunicantes compreendam conceitos de segurança no nível XML. Isso pode melhorar a interoperabilidade, por exemplo, quando HTTPS é usado para proteger a comunicação.
Desempenho geralmente melhorado.
Aceleradores de hardware estão disponíveis.
O streaming é possível.
A segurança dos transportes apresenta as seguintes desvantagens:
Apenas hop-to-hop.
Conjunto limitado e inextensível de credenciais.
Dependente do transporte.
Desvantagens da segurança no nível da mensagem
A segurança da mensagem tem as seguintes desvantagens:
Desempenho
Não é possível usar o streaming de mensagens.
Requer a implementação de mecanismos de segurança de nível XML e suporte para a especificação WS-Security. Isso pode afetar a interoperabilidade.