Мне нужно связаться с веб-сервисом, написанным на .Net, используя SOAP. Этот веб-сервис требует аутентификации ws-security с сертификатом и пользователем / паролем. Аутентификация определяется так:
<security mode="Message">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" />
</security>
Есть ли библиотека, которая реализует ws-security для PHP? Или, может быть, где-то можно найти хороший пример того, как реализовать это с помощью PHP SoapClient? Все, что я нашел, это фрагмент кода, который работает только с 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.