WCF-клиенты WCF и IncludeTimestamp

Так недавно мы открыли сервис для Java-клиента. Наш сервис использует безопасность транспорта наряду с проверкой имени пользователя и пароля.

При попытке вызвать наш сервис клиент получал исключение из заголовков безопасности. Дальнейшие исследования показали, что WCF ожидает, что временная метка будет включена в заголовок SOAP, переданный от клиента. Если этого нет (или отклонение больше 5 минут), это вызовет исключение.

Мы также обнаружили, что клиенты Java не пропускают временную метку WCF. Единственным обходным решением, которое мы нашли, было внедрение CustomBinding и установка IncludeTimestamp в false. Это позволило клиенту успешно вызвать службу.

Сегодня, просматривая рекомендации по безопасности с WCF, я вижу следующее в MSDN:

Установить SecurityBindingElement.IncludeTimestamp в True на пользовательских привязках

При создании пользовательской привязки вы должны установить IncludeTimestamp для правда. В противном случае, если для параметра IncludeTimestamp установлено значение false, а клиент использует асимметричный токен на основе ключа, такой как сертификат X509, сообщение не будет подписано.

Итак, мой вопрос заключается в том, что является наилучшей практикой при экспонировании служб WCF (и, в конечном итоге, Web API) для внешнего мира при использовании SSL (Transport) для не-NET-клиентов???

Ответ 1

Лучшая практика действительна только тогда, когда она может быть применена. Если у вас нет контроля над клиентом, и они не могут отправить отметку времени, то, во что бы то ни стало, установите includeetimestamp в false.