Клиенту веб-службы необходимо добавить атрибут type в заголовок password security

#wcf #soap #ws-security #usernametoken

#wcf #soap #ws-security #usernametoken

Вопрос:

Я пишу .NET-клиент (WCF), который будет использовать веб-сервис, реализованный с использованием Apache CXF (Java), и, что удивительно, невероятно сложно заставить WCF установить атрибут Type тега Password в PasswordText. Т.е. Я бы хотел, чтобы заголовок SOAP выглядел примерно так:

   <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
     <wsse:UsernameToken wsu:Id="UsernameToken-11" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username>test</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">a287645857cfaaddf82e2d333651b3e0</wsse:Password>
        <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">oKGlwEkbkhYJH6upsbiqeQ==</wsse:Nonce>
        <wsu:Created>2011-10-25T13:10:11.958Z</wsu:Created>
     </wsse:UsernameToken>
  </wsse:Security>
 

но фактический заголовок выглядит так:

   <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
     <o:UsernameToken u:Id="uuid-5acb0b47-1b52-4535-bfaf-b9e76621b7eb-1">
        <o:Username>test</o:Username>
        <o:Password>a287645857cfaaddf82e2d333651b3e0</o:Password>
     </o:UsernameToken>
  </o:Security>
 

Как вы можете видеть, атрибут Type отсутствует в теге Password. Некоторые исследования в Интернете, похоже, указывают на то, что мне, возможно, придется написать перехватчик, чтобы исправить это. Я подумал, что есть простое решение, то есть настройка конфигурации, чтобы исправить это, но, возможно, его нет. Во всяком случае, я надеюсь на некоторые разъяснения, опубликовав этот вопрос.

Сервер WS отклоняет запрос из-за отсутствия атрибута Type. Некоторая функция, проверяющая соответствие спецификации BSP (не уверен, что это такое), выдает исключение.

С уважением, Ola

Комментарии:

1. Как вы создали клиент? «Добавить ссылку на службу»

2. Вам также нужны одноразовые номера и Created? Реализация профиля токена имени пользователя WCF не предоставляет их, поэтому она приводит либо к пользовательскому токену, либо к пользовательскому заголовку сообщения.

3. Да, создан с помощью «Добавить ссылку на службу», а затем немного изменил файл конфигурации.

Ответ №1:

Хорошо, реализация требует использования WSE 2.0 SP3. Будьте осторожны, НЕ WSE 3.0.

WCF не может вам помочь.

Все, что вам нужно, здесь.

Это лучший пример.

Комментарии:

1. -1: Почему в мире вы рекомендуете такое устаревшее программное обеспечение.

2. ВАШ отрицательный отзыв смешон. Вы не сказали, что это неверно, только то, что это старое программное обеспечение — да, потому что OASIS 2004 является устаревшим, поэтому для его использования вам нужно использовать инструмент obselete. И WSE — ЕДИНСТВЕННЫЙ, который его поддерживает. Вместо того, чтобы голосовать против, предложите иное. ВЫ НИЧЕГО НЕ ЗНАЕТЕ ОБ OASIS 2004, НЕ ТАК ЛИ?

3. Предложите удалить приложение, для которого требуется устаревшее программное обеспечение в процессе производства. Это должно быть очень чертовски важное приложение, требующее использования устаревшего программного обеспечения в производстве.

4. Он не «старый», он устарел и не поддерживается.

5. Опять же, убедившись, что никто не считает это хорошей идеей. Возможно, это необходимая идея для этого конкретного человека, но никоим образом это не хорошая идея.