WS-Security и как пройти аутентификацию

Документация сервиса говорит, что мне нужно использовать WS-Security.
От их поддержки я получил файл p12, который я должен использовать.

Что я сделал до сих пор
Я запустил приложение SoapUI, настроил его, добавил wsdl и т. Д., И получил сообщение
<faultstring>These policy alternatives can not be satisfied: (...)</faultstring>

Поэтому я обнаружил, что мне нужно добавить базовый Auth к запросу. И я получил свой правильный ответ.
введите описание изображения здесь

Что мне нужно сейчас
Мне нужно использовать это для запросов SOAP в моем приложении PHP.
Во-первых, я изменился p12 подать в pemи попробовал:

$soapClient = new SoapClient('https://int.pz.gov.pl/pz-services/tpSigning?wsdl',
array('location' => 'https://int.pz.gov.pl/pz-services/tpSigning?wsdl',
'trace' => 1,"exceptions" => 1,
'local_cert'=>'path/cert_file.pem',
'passphrase'=>'cert_password'
));

Но я все еще получаю такое же сообщение об отказе политик:

These policy alternatives can not be satisfied:
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}AsymmetricBinding: Received Timestamp does not match the requirements
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}X509Token: The received token does not match the token inclusion requirement
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}SignedParts: Soap Body is not SIGNED in (...)

Помогите?
Это возможно даже с помощью PHP? Я попробовал несколько решений, нашел какой-то класс, расширяющий SoapClient (используя user / password, а не файл p12 / pem), нашел даже решение в c # (которое я слишком готов использовать, если это то, что мне нужно сделать — отправка xml на c # с помощью WebSocket и отправив его обратно в браузер), но ни один из них не сработал.

0

Решение

Изменение сертификата в формат pem является правильным способом. Родной PHP-класс мыльного клиента не может обрабатывать сертификаты p12. Вы пробовали следующее?

try {
$oClient = new SoapClient(
'https://int.pz.gov.pl/pz-services/tpSigning?wsdl',
[
'authentication' => SOAP_AUTHENTICATION_DIGEST,
'exceptions' => true,
'local_cert' => dirname(__FILE__) . 'mycert.pem',
'passphrase' => 'my_passphrase',
'trace' => true,
]
);
} catch (SoapFault $oSoapFault) {
echo "<pre>";
var_dump($oSoapFault);
echo "</pre>";
}

Класс PHP-клиента SOAP по умолчанию использует SOAP_AUTHENTICATION_BASIC. Возможно, DIGEST auth — правильный путь? Обычно сертификат включает в себя все данные.

Вам не нужна опция местоположения. Опция location просто необходима, когда используется диалог не-wsdl с целевым пространством имен в качестве опции uri без прямого файла wsdl.

И всегда имейте в виду: то, что работает с SoapUI, не должно работать с собственным клиентом PHP. 😉

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]