【发布时间】:2016-07-09 14:12:56
【问题描述】:
我正在使用本机 php SoapClient 创建一个客户端来使用 Web 服务。我需要签署肥皂请求标头以向服务器发出请求。有没有人这样做过?我找不到最新的信息。有一个名为 WSF 的 php 扩展,但它很旧(已经 6 年没有更新了。)。如果你之前做过这个,请告诉我。提前谢谢你。
【问题讨论】:
标签: php soap soap-client ws-security soapheader
我正在使用本机 php SoapClient 创建一个客户端来使用 Web 服务。我需要签署肥皂请求标头以向服务器发出请求。有没有人这样做过?我找不到最新的信息。有一个名为 WSF 的 php 扩展,但它很旧(已经 6 年没有更新了。)。如果你之前做过这个,请告诉我。提前谢谢你。
【问题讨论】:
标签: php soap soap-client ws-security soapheader
WSF for PHP 已经有一段时间不支持了,让它与最新的 PHP 版本一起工作很痛苦(请详细说明您的开发环境)。 WSF for PHP 背后的主要 Soap 框架 Axis2/c 始终得到维护,但并不活跃。 (并且对 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。您将需要根据您的肥皂合同分别设置 WSUsernameToken 和 WSPolicy 对象,以及凭据和策略。否则,如果您指的是对 Soap Headers 的某些部分进行签名(例如 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 >= 5.6 下运行,您可以尝试使用此解决方案并提供一些额外的反馈。我对标头、SecurityToken、Policy、Fault、Client、Message 进行了反向移植。我会继续改进它,但仍然缺少一些功能。安装并不容易,需要编译所有东西
现在关于在原生 PHP 中完成这项工作.. 不知道。
【讨论】: