Considerações de segurança para sessões seguras
Você deve considerar os itens a seguir que afetam a segurança ao implementar sessões seguras. Para obter mais informações sobre considerações de segurança, consulte Considerações de segurança e Melhores práticas para segurança.
Sessões e metadados seguros
Quando uma sessão segura é estabelecida e a propriedade RequireCancellationestá definida como false
, o Windows Communication Foundation (WCF) envia uma declaração mssp:MustNotSendCancel
como parte dos metadados no documento da linguagem WSDL para o ponto de extremidade do serviço. A declaração mssp:MustNotSendCancel
informa aos clientes que o serviço não responde às solicitações para cancelar a sessão segura. Quando a propriedade RequireCancellation é definida como true
, o WCF não emite uma declaração mssp:MustNotSendCancel
no documento da WSDL. Espera-se que os clientes enviem uma solicitação de cancelamento para o serviço quando não precisarem mais da sessão segura. Quando um cliente é gerado usando a Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe), o código do cliente reage adequadamente à presença ou ausência da declaração mssp:MustNotSendCancel
.
Proteger conversas e tokens personalizados
Há alguns problemas com a combinação de tokens personalizados e chaves derivadas devido à maneira como ela é definida na especificação WS-SecureConversation. A especificação diz que wsse:SecurityTokenReference
é um elemento opcional que faz referência ao token derivado: "/wsc:DerivedKeyToken/wsse:SecurityTokenReference
Esse elemento opcional é usado para especificar o token de contexto de segurança, o token de segurança ou a chave/segredo compartilhado usado para a derivação. Se não for especificado, supõe-se que o destinatário possa determinar a chave compartilhada do contexto da mensagem. Se o contexto não puder ser determinado, uma falha como wsc:UnknownDerivationSource
deve ser gerada."
Isso significa que, se quiser que um token personalizado seja derivado, você deverá encapsular seu tipo de cláusula em um elemento SecurityTokenReference
. Há uma opção para desativar a derivação, mas o padrão é derivar chaves. Se você não conseguir encapsular a chave, a serialização do token de chave derivada terá sucesso, mas tentar desserializá-la gerará uma exceção.