Мне нужно связаться с веб-службой, написанной на .Net, используя SOAP. Для этого веб-сервиса требуется аутентификация ws-security с сертификатом и пользователем/паролем. Аутентификация определяется следующим образом:PHP SOAP ws-security
<security mode="Message">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" />
</security>
Есть ли библиотека, которая реализует ws-security для PHP? Или, может быть, где-то можно найти хороший пример того, как реализовать это с помощью SoapClient от PHP? Все, что я нашел отрывок, который работает только с UserNameToken
:
$ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
$token = new \stdClass();
$token->Username = new \SoapVar('<username>', XSD_STRING, null, null, null, $ns);
$token->Password = new \SoapVar('<password>', XSD_STRING, null, null, null, $ns);
$wsec = new \stdClass();
$wsec->UsernameToken = new \SoapVar($token, SOAP_ENC_OBJECT, null, null, null, $ns);
$headers = new \SoapHeader($ns, 'Security', $wsec, true);
$this->soapClient = new \SoapClient('<wsdlurl>',array());
$this->soapClient->__setSoapHeaders($headers);
Но служба отвечает
The security context token is expired or is not valid. The message was not processed.
К сожалению, NuSoap не поддерживает WS-Security – Timur
О, извините, я подумал :( – Billy2mates
Что-то вроде https://code.google.com/p/wse-php/source/browse /soap-wsse.php будет к трюку. Он поддерживает клавиши X509 и т. д. – Timur