Запрос SOAP с аутентификацией по имени пользователя и паролю в SoapUI

#soap #soapui #ws-security

#soap #soapui #ws-безопасность

Вопрос:

Я пытаюсь сделать SOAP-запрос в SoapUI, для которого требуется аутентификация с помощью имени пользователя и пароля. Я позволяю SoapUI сгенерировать тест на основе файла wsdl и пытаюсь вызвать службу. Я выполнил шаги на веб-сайте SoapUI, чтобы использовать аутентификацию (https://www.soapui.org/soap-and-wsdl/authenticating-soap-requests.html ), но я не могу заставить это работать. Я новичок в SOAP, так что, вероятно, я упускаю что-то основное. Я получил имя пользователя и пароль для службы, поэтому я предполагаю, что это базовая аутентификация. Но когда я пытаюсь сделать запрос, я всегда получаю исключение PolicyViolationException, в котором говорится, что «Требуемые политики не были предоставлены: {http://docs.oasis-open.org/ns/opencsa/sca/200912 }Проверка подлинности клиента».

Вот, как выглядят запрос и ответ (я скрыл ссылку на сервис и изменил имя пользователя). Я также добавил пользователя в свой проект и настройки WS-Security.

Запрос и ответ SoapUI

Настройка проекта

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

Отредактированный заголовок вручную

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

1. Либо в wsdl, либо в документации поставщик услуг должен был предоставить информацию, какой тип механизма аутентификации требуется для вызова данной службы.

2. В wsdl я могу найти определения только для тела, а в документации там говорится, что в заголовке требуется UsernameToken с полями имени пользователя и пароля. Есть также примеры запросов, которые выглядят как на моей последней картинке.

3. Хорошо, тогда, скорее всего, им нужна только WSSecurity.

4. И что это значит? Как я уже сказал, я новичок в SOAP и SoapUI. Итак, как я должен иметь возможность отправить запрос? Какие настройки мне нужны или я должен иметь возможность отправлять запрос без каких-либо настроек и просто вручную изменять повторный запрос с именем пользователя и паролем?

Ответ №1:

Я пока не могу добавить комментарий, поэтому пишу в качестве ответа. Мне кажется, что некоторые пространства имен отсутствуют. Попробуйте выполнить запрос следующим образом, изменив одноразовые, созданные поля. образец-токен может быть любым, каким вы захотите. Если службе, которую вы пытаетесь вызвать, нужен пароль в виде обычного текста, то пространства имен в примере кода будет достаточно. Также я предлагаю вам ознакомиться с документацией по этой ссылке.

 <soap:Header>
    <Security
        xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <wsse:UsernameToken wsu:Id="sample-token"
            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsse:Username>user</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
            <wsse:Nonce>some-base64</wsse:Nonce>
            <wsu:Created>yyyy-MM-ddThh:mm:ssZ</wsu:Created>
        </wsse:UsernameToken>
    </Security>
</soap:Header>