我需要与一个使用SOAP编写的.Net Web服务进行通信。该Web服务需要使用证书和用户名/密码进行WS-Security身份验证。身份验证定义如下:
<security mode="Message">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" />
</security>
有没有一个实现PHP ws-security的库?或者,在哪里可以找到使用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.