Segurança de mensagem no WCF
O WCF (Windows Communication Foundation) 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 da mensagem?
A segurança da mensagem usa a especificação WS-Security para proteger mensagens. A especificação WS-Security descreve aprimoramentos no sistema de mensagens SOAP para garantir a confidencialidade, a integridade e a 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 do transporte encapsulando 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 protegida seja independente em relação aos aspectos de segurança. Isso habilita alguns cenários que não são possíveis quando a segurança do transporte é usada.
Motivos para usar a segurança da mensagem
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 de segurança no nível do transporte tem as seguintes vantagens:
Segurança de ponta a ponta. A segurança do transporte, como o protocolo SSL, só protege as mensagens quando a comunicação é ponto a ponto. Se a mensagem for roteada para um ou mais intermediários SOAP (por exemplo, um roteador) antes de chegar ao destinatário final, a mensagem em si não será protegida depois que um intermediário a lê durante a transmissão. Além disso, as informações de autenticação do cliente estão disponíveis apenas para o primeiro intermediário e devem ser retransmissadas para o receptor final fora de banda, se necessário. Isso se aplica mesmo que toda a rota use a 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 de atingir o receptor final. Isso permite um verdadeiro cenário de segurança de ponta a ponta.
Maior flexibilidade. Partes da mensagem, em vez de toda a mensagem, podem ser assinadas ou criptografadas. Isso significa que os intermediários podem exibir as partes da mensagem que se destinam a elas. Se o remetente precisar tornar parte das informações na mensagem visível para os intermediários, mas quiser garantir que ela não seja adulterada, ele pode apenas assiná-la, mas deixá-la descriptografada. Como a assinatura faz parte da mensagem, o receptor final pode verificar se as informações 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 Action. Por padrão, o WCF não criptografa o valor da ação, mas o assina se a segurança da mensagem for usada. Portanto, essas informações estão disponíveis para todos os intermediários, mas ninguém pode alterá-la.
Suporte para vários transportes. Você pode enviar mensagens protegidas em vários transportes diferentes, como pipes nomeados e TCP, sem precisar contar com o protocolo para segurança. Com a segurança no nível do transporte, todas as informações de segurança têm o escopo de 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 é inserido diretamente dentro da mensagem.
Suporte para um amplo conjunto de credenciais e declarações. A segurança da mensagem tem base 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 do 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 da mensagem do WCF inclui vários tipos de autenticação e transmissão de declaração e pode ser estendida para dar 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 aos quais o WCF dá suporte, consulte Federação e tokens emitidos.
Como comparar a segurança de mensagem e do transporte
Prós e contras da segurança no nível do transporte
A segurança do transporte tem as seguintes vantagens:
Não exige que as partes comunicantes entendam os conceitos de segurança no nível de XML. Isso pode melhorar a interoperabilidade, por exemplo, quando HTTPS é usado para proteger a comunicação.
Desempenho geralmente aprimorado.
Aceleradores de hardware disponíveis.
Possibilidade de streaming.
A segurança do transporte tem as seguintes desvantagens:
Somente salto a salto.
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 no nível de XML e suporte para especificação WS-Security. Isso pode afetar a interoperabilidade.