Расширение php SoapClient для аутентификации администратора сайта

Краткая версия

Я хочу расширить SoapClient , чтобы он делал это изнутри при доступе к WSDL:

curl -L -E /location/of/cert.pem -c /tmp/location/of/cookie.jar https://web-service-provider/servicename?wsdl

Длинная версия

У меня есть запрос SOAP, подобный этому:

$serviceUrl = 'https://service-url';
$wsdl = $serviceUrl . '?wsdl';

$proxyServiceUrl = 'http://localhost/myproxy.php?url=$serviceUrl';
$proxyWsdl = 'http://localhost/myproxy.php?url=$wsdl';

$options = array(
  'cache_wsdl'    => WSDL_CACHE_NONE,
  'encoding'      => 'utf-8',
  'soap_version'  => SOAP_1_1,
  'exceptions'    => true,
  'trace'         => true,
  'location'      => $proxyServiceUrl
);

$client = new SoapClient($proxyWsdl, $options);

$params = array( /* */ );
$client->someOperation($params);

Как видите, все довольно стандартный, за исключением бита прокси.

Причина для прокси

Я написал прокси, чтобы выполнить требование поставщика веб-услуг, чтобы все конечные точки, включая WSDL, обрабатывались через систему аутентификации, называемую siteminder.

Функция прокси довольно проста, если бы она была написана в командной строке linux curl, это было бы примерно так:

curl -L -E /location/of/cert.pem -c /tmp/location/of/cookie.jar https://web-service-provider/servicename?wsdl

Чтобы быть точным:

* Follow all redirections
* specify location of .pem file (and password)
* specify location of cookie jar

Все это работает нормально: )

НО недавно поставщик услуг решил изменить его WSDL.

Теперь он импортирует файлы схемы ( .xsd ), что не так уж и плохо, за исключением того, что это относится к WSDL.

Относительно файла WSDL означает, что синтаксический анализатор SoapClient теперь ищет файлы схемы из расположения прокси. ОШИБКА, не могу найти!

Подробнее об этой проблеме здесь:

php SoapClient не работает при передаче wsdl со схемами относительного пути

Итак, мой вопрос:

Как я могу переписать SoapClient (Разумеется, путем расширения), чтобы по-прежнему проходить аутентификацию Siteminder, но без необходимости проходить через этот дополнительный прокси?

Мои первоначальные мысли заключаются в том, что мне нужно каким-то образом переписать функцию доступа URI (если она существует) но без большой документации в этой области я не уверен, с чего начать.

В качестве альтернативы, мне, возможно, придется как-то взломать SoapServer .

Я буду признателен за любую помощь, которую я могу получить, включая указатели на любую документацию внутри SoapClient .

5
задан Community 23 May 2017 в 12:08
поделиться