PHP Soap клиент с ws-безопасностью

Как мне реализовать клиент SOAP, который использует сервис, используя ws-security?

У меня есть эта обязательная информация

<wsHttpBinding>
<binding name="WSHttpBinding_Service" closeTimeout="00:01:00"openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>

Насколько я понимаю, это. NET конфигурации и должны быть сопоставлены с соответствующими определениями в PHP.

WsHttpBinding для моего понимания означает, что SOAP1.1 должен использоваться, и это, кажется, работает нормально.

Однако в настройках безопасности это большая проблема.

Есть ли PHP-библиотека, которая поддерживает WS Security?

Я попытался добавить заголовок безопасности для вызова PHP:

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>username</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
</wsse:UsernameToken></wsse:Security>

Однако это не помогает. Я что-то пропустил?

В Stackoverflow есть много вопросов по PHP и WS-Security, но я не нашел ни одного из них полезным.

РЕДАКТИРОВАТЬ: Оказалось, что были проблемы на стороне сервера.

0

Решение

Вы можете использовать ванильный PHP SoapClient (и друзья) с помощью SoapVar установить заголовки SOAP. Например;

$objSoapClient = new \SoapClient([...]);

$strXML = <<<XML
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
XML;
$objAuthVar = new \SoapVar($strXML, XSD_ANYXML);
$objAuthHeader = new \SoapHeader("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", 'Security', $objAuthVar, false);

$objSoapClient->__setSoapHeaders(array($objAuthHeader));
1

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

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

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