Еще одна проблема MessageSecurityException - PullRequest
0 голосов
/ 22 марта 2012

Итак, я создал сервис, который использует базовое 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 Security процессор не смог найти заголовок безопасности в сообщении. это может быть потому, что сообщение является незащищенной ошибкой или потому что обязательное несоответствие между связывающимися сторонами. Это может произойти если служба настроена для безопасности, а клиент не использует безопасность.

Что я не знаю, так это как обойти эту проблему. Система должна использовать базовую аутентификацию и должна использовать Soap 1.2 (таким образом, пользовательскую привязку). У меня нет контроля над вызывающим Java-клиентом, но я уверен, что он вызывает службу с использованием базовой аутентификации.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Я не эксперт по Java, но, насколько мне известно, клиенты Java не могут реализовать SOAP 1.2 на лету. Клиентам Java необходимы внешние библиотеки для дополнения необходимых заголовков политики / безопасности в сообщении SOAP 1.2.

Я поручил своим клиентам Java использовать библиотеки Metro для использования моей службы WCF. (Я использую такую ​​же привязку, как и у вас.) Вот блог , как включить Metro библиотеки.

Вот ссылка MSDN для совместимости .

Надеюсь, это поможет!

0 голосов
/ 12 апреля 2012

вам необходимо настроить java-клиент для отправки токена имени пользователя на сервер.включите Fiddler и сравните рабочее мыло (wcf клиент) с нерабочим (java)

...