Php SoapClient с WS-Security не может аутентифицироваться, а SOAPUI может - PullRequest
0 голосов
/ 29 августа 2018

Я подключаюсь к веб-сервису с SOAPUI, у меня правильные учетные данные. Сервер требует PasswordDigest с nonce и т. Д. Когда я вызываю сервис с SOAPUI, он работает .

Когда я использую WSSoapClient php класс из https://gist.github.com/silasrm/a57a1e3af165cb43644b712192625a3b

или немного разработанная версия от https://gist.github.com/Turin86/5569152, Я получаю:

  • Обнаружена ошибка при обработке заголовка

  • Маркер безопасности не может быть аутентифицирован или авторизован

соответственно.

Руководство по MS https://msdn.microsoft.com/en-us/library/ms977327.aspx объясняет:

Одноразовый номер имеет длину 16 байтов и передается как закодированное в base64 значение. Приведенные здесь примеры показывают, что nonce отправляется base64'd.

В первой версии WSSoapClient nonce - это случайное число (не обязательно имеет 16 байтов), это pack () 'd и base64 ()' d.

Во второй версии nonce является случайным числом только sha1'd. Я не думаю, что это может быть правильным, поскольку «оригинальное» содержимое nonce должно быть объединено с временем и паролем, а затем base64 (pack (sha1 ())).

Правильный заголовок из SOAPUI и ошибочный заголовок из мыльных клиентов php выглядят одинаково, за исключением вычисляемых значений:

<wsse:UsernameToken wsu:Id="UsernameToken-01010101010101010101010101">
    <wsse:Username>XXXXXXXX</wsse:Username>
    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">jbpPIWuudp4l/l+ZqoR4iAN08lU=</wsse:Password>
    <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">yXy5R5w6I3km75hha8mYqg==</wsse:Nonce>
    <wsu:Created>2018-08-27T09:07:54.101Z</wsu:Created>

Короче говоря: у вас есть рабочая версия некоторого ws-security SoapClient в php?

...