Я пишу простое клиентское приложение SOAP на Python.
Файл WSDL можно найти здесь: https://clients.nationalmailing.com.au/ServiceTest/OrderService.svc?wsdl
К сожалению, сервер объявил об использовании wsHttpBinding
в своем файле WSDL иМне пришлось узнать, сколько неприятностей это приносит не-.NET-разработчикам.
У меня есть рабочий код C # (и там все довольно просто), и я использовал Fiddler для захвата трафика и анализа сообщений.Теперь я знаю структуру, которой нужно следовать.Клиент отправляет 2 последовательных сообщения.
Мне удалось создать и отправить первый запрос и получить ответ с сервера.НО второй запрос является более сложным.Я нашел библиотеку signxml , которая помогла мне создать структуру <Signature>
со всеми полями, которые должны быть представлены (в соответствии с захваченным трафиком).
Но сервер продолжает отвечать «Ошибка500: при проверке безопасности сообщения произошла ошибка. "
Я понял, что в первом сообщении я поместил только случайные значения для следующей структуры:
<s:Body>
<trust:RequestSecurityToken xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
<trust:TokenType>http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512/sct</trust:TokenType>
<trust:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</trust:RequestType>
<trust:Entropy>
<trust:BinarySecret
u:Id="uuid-0649fd7a-9ae2-4f9f-964c-e3aa5d68e8cd-1"
Type="http://docs.oasis-open.org/ws-sx/ws-trust/200512/Nonce">h/MaeQVSL5Br30Hnt/SAl274flYfZVZyx2Fri9zNuEY=</trust:BinarySecret>
</trust:Entropy>
<trust:KeySize>256</trust:KeySize>
</trust:RequestSecurityToken>
</s:Body>
ЗначениеBinarySecret
- это просто случайная строка, закодированная с помощью Base64 .Я думаю, что это должно быть проблемой на этом этапе.Я также не использую те же параметры из ответа сервера.
Может кто-нибудь объяснить, как я должен использовать Entropy.BinarySecret
- должен ли он участвовать в вычислениях Signature
и как он используется?