Проект, над которым я работаю, включает корпоративную конечную точку SOAP (Oracle SOA). Здесь используется SOAP 1.2.
Через SoapUI у меня есть полный набор требований, которые мне нужно воспроизвести. В частности, исходящая безопасность:
Должен иметь токен временной метки с точностью до миллисекунды.
Должен иметь токен имени пользователя с одноразовым номером.
Должен иметь подпись (BinarySecurityToken с использованием единого сертификата для подписи и элемента подписи в заголовке безопасности для UsernameToken, Timestamp и Body — с использованием определенной пары секретный ключ/сертификат.
Должно быть зашифровано с использованием открытого ключа сервера (который у меня есть), а симметричный ключ должен быть зашифрован в EncryptedKey — в частности, необходимо зашифровать токен имени пользователя и текст.
[*]Существует входящая безопасность, поскольку ну, значит, сообщение придется расшифровать с помощью открытого ключа сервера.
Проблема:
Я совершенно не понимаю, как мне воспроизвести это на Python. Тестовая среда (которая не использует учетные данные) отлично работает с Zeep, поэтому я знаю, что структура моего сообщения в порядке, но Zeep не поддерживает. mustUnderstand, и я не могу понять, как зашифровать части XML.
Я думал о написании выходных плагинов Zeep для обработки частей шифрования, но мне кажется, что это будет напрашиваться на проблемы.
Suds-Community — еще один высоко оцененный вариант, поддерживающий дополнительные настройки безопасности, но я не думаю, что он сработает. поскольку для этого требуется SOAP 1.2, а Suds-Community, похоже, поддерживает только SOAP 1.1. Он также, похоже, не поддерживает BinarySecurityTokens без py-wsse, и py-wsse не может быть установлен из pip.
Другой сервис, написанный и использующий это, использует Apache Axis 2 с Rampart, но это мне не помогает. у меня есть файл policy.xml, но, похоже, нет никакого способа использовать эту информацию в Python. Есть ли какой-либо другой подход, который я мог бы использовать, кроме ручного создания XML-запроса? В идеале решение должно использовать Python и должно быть дружественным к Mac (наша компания использует Mac для разработки).
Сценарий: [list] [*]Проект, над которым я работаю, включает корпоративную конечную точку SOAP (Oracle SOA). Здесь используется SOAP 1.2.
[*]Через SoapUI у меня есть полный набор требований, которые мне нужно воспроизвести. В частности, исходящая безопасность:
Должен иметь токен временной метки с точностью до миллисекунды.
[*]Должен иметь токен имени пользователя с одноразовым номером.
[*]Должен иметь подпись (BinarySecurityToken с использованием единого сертификата для подписи и элемента подписи в заголовке безопасности для UsernameToken, Timestamp и Body — с использованием определенной пары секретный ключ/сертификат.
[*]Должно быть зашифровано с использованием открытого ключа сервера (который у меня есть), а симметричный ключ должен быть зашифрован в EncryptedKey — в частности, необходимо зашифровать токен имени пользователя и текст.
[/list]
[*]Существует входящая безопасность, поскольку ну, значит, сообщение придется расшифровать с помощью открытого ключа сервера.
Проблема: [list] [*]Я совершенно не понимаю, как мне воспроизвести это на Python. Тестовая среда (которая не использует учетные данные) отлично работает с Zeep, поэтому я знаю, что структура моего сообщения в порядке, но Zeep не поддерживает. mustUnderstand, и я не могу понять, как зашифровать части XML.
[*]Я думал о написании выходных плагинов Zeep для обработки частей шифрования, но мне кажется, что это будет напрашиваться на проблемы.
[*]Suds-Community — еще один высоко оцененный вариант, поддерживающий дополнительные настройки безопасности, но я не думаю, что он сработает. поскольку для этого требуется SOAP 1.2, а Suds-Community, похоже, поддерживает только SOAP 1.1. Он также, похоже, не поддерживает BinarySecurityTokens без py-wsse, и py-wsse не может быть установлен из pip.
[/list] Другой сервис, написанный и использующий это, использует Apache Axis 2 с Rampart, но это мне не помогает. у меня есть файл policy.xml, но, похоже, нет никакого способа использовать эту информацию в Python. Есть ли какой-либо другой подход, который я мог бы использовать, кроме ручного создания XML-запроса? В идеале решение должно использовать Python и должно быть дружественным к Mac (наша компания использует Mac для разработки).