Соображения о защите безопасных сеансов
Необходимо принять во внимание следующие элементы, влияющие на безопасность при реализации безопасных сеансов. Дополнительные сведения о рекомендациях по безопасности см. в разделе "Рекомендации по безопасности" и "Рекомендации по обеспечению безопасности".
Безопасные сеансы и метаданные
При установке безопасного сеанса и RequireCancellation установке false
свойства Windows Communication Foundation (WCF) отправляет mssp:MustNotSendCancel
утверждение как часть метаданных в документе языка описания веб-служб (WSDL) для конечной точки службы. Проверочное утверждение mssp:MustNotSendCancel
информирует клиентов о том, что служба не отвечает на запросы, чтобы отменить безопасный сеанс. RequireCancellation Если для свойства задано true
значение, WCF не выдает mssp:MustNotSendCancel
утверждение в документе WSDL. Предполагается, что если безопасный сеанс клиентам больше не требуется, они передают службе запрос отмены. При создании клиента с помощью средства служебной программы метаданных ServiceModel (Svcutil.exe)код клиента реагирует соответствующим образом на наличие или отсутствие mssp:MustNotSendCancel
утверждения.
Безопасные диалоги и пользовательские маркеры
Из-за определения, сделанного в спецификации WS-SecureConversation, существует несколько проблем, связанных со смешиванием пользовательских маркеров и производных ключей. Спецификация говорит, что wsse:SecurityTokenReference
является необязательным элементом, ссылающимся на производный маркер: "/wsc:DerivedKeyToken/wsse:SecurityTokenReference
Этот необязательный элемент используется для указания маркера контекста безопасности, маркера безопасности или общего ключа или секрета, используемого для производного выражения. Если указанные компоненты не заданы, предполагается, что получатель может определить общий ключ из контекста сообщения. Если контекст не может быть определен, то возникает ошибка, например wsc:UnknownDerivationSource
, должна быть вызвана".
Это означает, что если требуется получить пользовательский маркер, необходимо зашифровать его тип предложения в элементе SecurityTokenReference
. Формирование ключей можно отключить, но по умолчанию ключи формируются. Если ключ не шифруется, сериализация маркера производного ключа происходит успешно, но при попытке десериализовать его вызывается исключение.