我使用本机php SoapClient创建一个客户端来使用Web服务。我需要签署soap请求标头以向服务器发出请求。有没有人这样做过?我找不到最新的信息。有一个名为WSF的PHP扩展,但它已经过时了(它已经有6年没有更新了。)。如果您之前已经这样做,请告诉我。提前谢谢。
答案 0 :(得分:0)
一段时间以来,不支持WSF for PHP,并且使用最新的PHP版本很难(请详细说明您的开发环境)。 Axis2 / c WSF for PHP背后的主要Soap框架始终保持但不主动。 (并且充满了1.6.0的memleak)然而,有些人正在处理发布1.7.0。
当我们谈论签名时,我们指的是实现WS-Security策略。在后台这是一个名为Rampart / c的Axis2 / c模块。 Rampart / c是ATTIC(参见http://attic.apache.org/)意思是弃用,但仍然可以使用最新的Axis2 / c(svn trunk)
目前尚不清楚您想要签名的内容。如果您参考实现用户名令牌,您可以尝试自己安装WSF for PHP。您需要根据您的soap合约分别设置WSUsernameToken和WSPolicy对象,分别使用凭据和策略。否则,如果您要参考签署肥皂标题的某些部分(例如WS-Adressing(replyTo等),请咨询。
因此,如果您正在谈论UsernameToken,那么工作策略将是:
<wsp:Policy wsu:Id="RmPolicy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sanc="http://ws.apache.org/sandesha2/c/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding>
<wsp:Policy>
</wsp:Policy>
</sp:TransportBinding>
<sp:SignedSupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken10 />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SignedSupportingTokens
</wsrm:RMAssertion>
</wsp:All>
</wsp:ExactlyOne>
我决定使用PHPCPP为Axis2 / c(只有客户端)重写一个Php扩展。 Here you will find the project
如果您在Ubuntu和PHP&gt; = 5.6下运行,您可以尝试使用此解决方案并提供一些额外的反馈。我向后移动了标题,SecurityToken,Policy,Fault,Client,Message ..我将继续改进它,但仍然有一些缺失的功能。安装并不容易,需要编译所有内容
现在关于在本地PHP中完成这项工作..不知道。