在 php 中对 soap headers 进行数字签名
Digitally Sign soap headers in php
我正在使用本机 php SoapClient 创建一个客户端来使用 Web 服务。我需要签署 soap 请求 headers 以向服务器发出请求。有没有人这样做过?我找不到最新信息。有一个名为 WSF 的 php 扩展,但它很旧(已经 6 年没有更新了。)。如果您以前做过此操作,请告诉我。提前谢谢你。
用于 PHP 的 WSF 暂时不受支持,很难让它与最新的 PHP 版本一起工作(请详细说明您的开发环境)。
Axis2/c PHP 的 WSF 背后的主要 Soap 框架始终得到维护,但并不活跃。 (并且充满了 1.6.0 的内存泄漏)但是,有些人正在处理发布 1.7.0.
当我们谈论签名时,我们指的是实施 WS-Security 策略。在后台这是一个名为 Rampart/c 的 Axis2/c 模块。 Rampart/c 是 ATTIC(参见 http://attic.apache.org/),意思是已弃用,但仍然可以与最新的 Axis2/c(svn trunk)
不清楚你要签署什么。如果您指的是实现用户名令牌,您可以尝试自己为 PHP 安装 WSF。您将需要根据您的 soap 合同设置 WSUsernameToken 和 WSPolicy objects,分别使用凭据和策略。否则,如果您指的是签署您的肥皂的某些部分 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,您可以尝试使用此解决方案并提供一些额外的反馈。我向后移植了 header、SecurityToken、Policy、Fault、Client、Message.. 我会继续改进它,但仍有一些缺失的功能。安装不容易,需要全部编译
现在关于在原生中完成这项工作 PHP.. 不知道。
我正在使用本机 php SoapClient 创建一个客户端来使用 Web 服务。我需要签署 soap 请求 headers 以向服务器发出请求。有没有人这样做过?我找不到最新信息。有一个名为 WSF 的 php 扩展,但它很旧(已经 6 年没有更新了。)。如果您以前做过此操作,请告诉我。提前谢谢你。
用于 PHP 的 WSF 暂时不受支持,很难让它与最新的 PHP 版本一起工作(请详细说明您的开发环境)。 Axis2/c PHP 的 WSF 背后的主要 Soap 框架始终得到维护,但并不活跃。 (并且充满了 1.6.0 的内存泄漏)但是,有些人正在处理发布 1.7.0.
当我们谈论签名时,我们指的是实施 WS-Security 策略。在后台这是一个名为 Rampart/c 的 Axis2/c 模块。 Rampart/c 是 ATTIC(参见 http://attic.apache.org/),意思是已弃用,但仍然可以与最新的 Axis2/c(svn trunk)
不清楚你要签署什么。如果您指的是实现用户名令牌,您可以尝试自己为 PHP 安装 WSF。您将需要根据您的 soap 合同设置 WSUsernameToken 和 WSPolicy objects,分别使用凭据和策略。否则,如果您指的是签署您的肥皂的某些部分 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,您可以尝试使用此解决方案并提供一些额外的反馈。我向后移植了 header、SecurityToken、Policy、Fault、Client、Message.. 我会继续改进它,但仍有一些缺失的功能。安装不容易,需要全部编译
现在关于在原生中完成这项工作 PHP.. 不知道。