我使用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 的工作版本?