Considerações de segurança para sessões seguras
Você deve considerar os seguintes itens 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 práticas recomendadas de segurança.
Sessões e metadados seguros
Quando uma sessão segura é estabelecida e a propriedade é definida como false
, o RequireCancellation Windows Communication Foundation (WCF) envia uma mssp:MustNotSendCancel
declaração como parte dos metadados no documento WSDL (Web Services Description Language) para o ponto de extremidade do serviço. A mssp:MustNotSendCancel
asserção informa aos clientes que o serviço não responde a solicitações para cancelar a sessão segura. Quando a RequireCancellation propriedade é definida como true
, o WCF não emite uma mssp:MustNotSendCancel
asserção no documento 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 ServiceModel Metadata Utility Tool (Svcutil.exe), o código do cliente reage adequadamente à presença ou ausência da mssp:MustNotSendCancel
asserção.
Conversas seguras e tokens personalizados
Há alguns problemas com a mistura de tokens personalizados e chaves derivadas devido à maneira como ele é definido 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
Este elemento opcional é usado para especificar token de contexto de segurança, token de segurança ou chave/segredo compartilhado usado para a derivação. Se não for especificado, presume-se que o destinatário pode determinar a chave compartilhada a partir do contexto da mensagem. Se o contexto não puder ser determinado, então uma falha como a que wsc:UnknownDerivationSource
deve ser levantada."
Isso significa que, se você quiser que um token personalizado seja derivado, deverá encapsular seu tipo de cláusula em um SecurityTokenReference
elemento . 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 será bem-sucedida, mas a tentativa de desserializá-lo lançará uma exceção.