Попытка заставить клиента WCF работать с безопасностью токена имени пользователя wss 1.0 - PullRequest
3 голосов
/ 01 мая 2010

Я пытаюсь использовать клиент WCF для вызова стороннего веб-сервиса. Веб-служба использует аутентификацию токена имени пользователя WSS-Security 1.0 Soap Message Security

Вот пример заголовка проверки подлинности мыла для того, что ожидает веб-служба

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<wsse:Security soap:mustUnderstand="1">
<wsse:UsernameToken namespaces>
<wsse:Username>username</wsse:Username>
<wsse:Password Type="type info">password</wsse:Password>
<wsse:Nonce>nonce</wsse:Nonce>
<wsu:Created>date created</wsu:Created>
</wsse:UsernameToken>
<wsse:Security>
</soap:Header>
<soap:Body>
<WebServiceMethodName xmlns="Web Service Namespace" />

Я настроил клиента следующим образом

<basicHttpBinding>
<binding name="Binding1">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Basic"/>
</security>
</basicHttpBinding>

, но получил ошибку о том, что в заголовке отсутствуют атрибуты nonce и datecreated. Кто-нибудь знает, как настроить клиент WCF для работы с

WSS-Security 1.0 Проверка подлинности с помощью токена имени пользователя Security Soap Message Security?

Ответы [ 2 ]

3 голосов
/ 30 марта 2011

У меня была такая же проблема. Вместо настраиваемого серлайзера токенов я использовал MessageInspector для добавления правильного UsernameToken в методе BeforeSendRequest. Затем я применил собственное поведение, чтобы применить исправление.

Весь процесс документирован (с помощью демонстрационного проекта ) в моем блоге Поддержка дайджеста пароля базового профиля WS-I в прокси-клиенте WCF . Кроме того, вы можете просто прочитать PDF .

Если вы хотите проследить мой прогресс до решения, вы найдете его в StackOverflow под названием « Ошибка в клиенте WCF, использующем веб-сервис Axis 2 с WS-Security Имя пользователяToken PasswordDigest схема »

1 голос
/ 03 мая 2010

Я смотрел на ту же проблему, и мои выводы заключаются в том, что, к сожалению, WCF не поддерживает значения Nonce.

Если вы хотите отправить имя пользователя и пароль (временная метка включена по умолчанию), измените конфигурацию на

     <basicHttpBinding>
        <binding name="BasicHTTP">
          <!-- UsernameToken over Transport Security -->
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType ="UserName" />
          </security>
        </binding>
      </basicHttpBinding>

Также имейте в виду, что это, кажется, дефект (по крайней мере, другая интерпретация стандартов) в отношении UserNameToken при обмене между WCF и WSS4J, см. http://social.msdn.microsoft.com/Forums/en/wcf/thread/6bc1b0e4-424b-4e2a-909c-815095be631f

WSSConfig.getDefaultWSConfig () setAllowNamespaceQualifiedPasswordTypes (истина). может быть обходной путь на стороне WSS4J.

ОБНОВЛЕНИЕ: Со стороны WCF вы можете обойти проблему, внедрив ссылку на CustomCredential и CustomTokenSerializer в последнем сообщении на http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/4df3354f-0627-42d9-b5fb-6e880b60f8ee

Dagfinn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...