具有WS-Security的Php SoapClient无法进行身份验证,SOAPUI可以

时间:2018-08-29 14:13:45

标签: php soap-client ws-security digest

我使用SOAPUI连接到Web服务,我具有正确的凭据。服务器要求使用PasswordDigest(带有 nonce 等)。当我使用SOAPUI调用服务时,它起作用

当我使用https://gist.github.com/silasrm/a57a1e3af165cb43644b712192625a3b

WSSoapClient php类时

https://gist.github.com/Turin86/5569152的改进版本, 我得到了:

  • 发现处理标头时发生错误

  • 安全令牌无法通过身份验证或授权

分别。

MS手册https://msdn.microsoft.com/en-us/library/ms977327.aspx解释:

随机数为16个字节长,并作为base64编码值传递。 那里的例子表明, nonce 是通过base64发送的。

WSSoapClient 的第一个版本中, nonce 是一个随机数(肯定没有16个字节),是pack()和base64()的。

在第二个版本中, nonce 是一个只有sha1的随机数。我认为这可能不正确,因为 nonce 的“原始”内容必须与时间和密码(然后是base64(pack(sha1())))连接在一起。

SOAPUI的正确标头和php soap客户端的错误标头看起来相同,除了计算值:

<wsse:UsernameToken wsu:Id="UsernameToken-01010101010101010101010101">
    <wsse:Username>XXXXXXXX</wsse:Username>
    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">jbpPIWuudp4l/l+ZqoR4iAN08lU=</wsse:Password>
    <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">yXy5R5w6I3km75hha8mYqg==</wsse:Nonce>
    <wsu:Created>2018-08-27T09:07:54.101Z</wsu:Created>

简而言之:您是否在php中有一些ws-security SoapClient 的工作版本?

0 个答案:

没有答案