2012-02-09 1 views
3

Мне нужно связаться с веб-службой, написанной на .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. 

ответ

0

Посмотрите NuSoap

Я использовал его много лет назад, это было более продвинутым чем клиент php soap по умолчанию. Особенно при общении с кросс-платформой

+0

К сожалению, NuSoap не поддерживает WS-Security – Timur

+0

О, извините, я подумал :( – Billy2mates

+0

Что-то вроде https://code.google.com/p/wse-php/source/browse /soap-wsse.php будет к трюку. Он поддерживает клавиши X509 и т. д. – Timur