Еще одна проблема MessageSecurityException
Поэтому я создал сервис, который использует базовое Auth Soap 1.2. Конфиг ниже:
<customBinding>
<binding name="MyHttpBinding">
<security authenticationMode="UserNameOverTransport" securityHeaderLayout="Strict"
allowInsecureTransport="false">
<secureConversationBootstrap />
</security>
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport maxReceivedMessageSize="6553600" authenticationScheme="Basic" maxBufferSize="6553600" />
</binding>
</customBinding>
У меня есть несколько клиентов, вызывающих его (WCF и Java). С клиентом WCF у меня нет никаких проблем, но с клиентом Java я получаю следующее исключение на стороне сервера:
System.ServiceModel.Security.MessageSecurityException Обработчику безопасности не удалось найти заголовок безопасности в сообщении. Это может быть связано с тем, что сообщение является незащищенной ошибкой или из-за несоответствия между связывающими сторонами. Это может произойти, если служба настроена для безопасности, а клиент не использует безопасность.
То, что я не знаю, как обойти эту проблему. Система должна использовать базовую аутентификацию и должна использовать Soap 1.2(таким образом, пользовательскую привязку). У меня нет контроля над вызывающим Java-клиентом, но я уверен, что он вызывает службу, используя базовую аутентификацию.
Какие-либо предложения?
2 ответа
Я не эксперт по Java, но, насколько мне известно, клиенты Java не могут реализовать SOAP 1.2 на лету. Клиентам Java необходимы внешние библиотеки для дополнения необходимых заголовков политики / безопасности в сообщении SOAP 1.2.
Я дал указание своим клиентам Java использовать библиотеки Metro для использования моей службы WCF. (Я использую такую же привязку, как и у вас.) Вот блог, как включить библиотеки Metro.
Вот ссылка MSDN для взаимодействия.
Надеюсь это поможет!
Вам нужно настроить клиент java для отправки токена имени пользователя на сервер. включите Fiddler и сравните рабочее мыло (wcf клиент) с нерабочим (java)