Я подключаюсь к веб-сервису с 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?