Так недавно мы открыли сервис для Java-клиента. Наш сервис использует безопасность транспорта наряду с проверкой имени пользователя и пароля.
При попытке вызвать наш сервис клиент получал исключение из заголовков безопасности. Дальнейшие исследования показали, что WCF ожидает, что временная метка будет включена в заголовок SOAP, переданный от клиента. Если этого нет (или отклонение больше 5 минут), это вызовет исключение.
Мы также обнаружили, что клиенты Java не пропускают временную метку WCF. Единственным обходным решением, которое мы нашли, было внедрение CustomBinding и установка IncludeTimestamp в false. Это позволило клиенту успешно вызвать службу.
Сегодня, просматривая рекомендации по безопасности с WCF, я вижу следующее в MSDN:
Установить SecurityBindingElement.IncludeTimestamp в True на пользовательских привязках
При создании пользовательской привязки вы должны установить IncludeTimestamp для правда. В противном случае, если для параметра IncludeTimestamp установлено значение false, а клиент использует асимметричный токен на основе ключа, такой как сертификат X509, сообщение не будет подписано.
Итак, мой вопрос заключается в том, что является наилучшей практикой при экспонировании служб WCF (и, в конечном итоге, Web API) для внешнего мира при использовании SSL (Transport) для не-NET-клиентов???