尝试向服务器发送肥皂请求 (soapCall) 时出现错误。
Fatal error: Uncaught SoapFault exception: [ns1:InvalidSecurity] An error was discovered processing the <wsse:Security> header
我需要发送 ws-security 标头
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>userID</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">passwd</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">ZTQ3YmJjZmM1ZTU5ODg3YQ==</wsse:Nonce>
<wsu:Created>2013-07-05T19:55:36.458Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
经过大量研究,我认为我得到的问题是随机数不符合要求。当我制作肥皂头时,它看起来就像我得到的例子。唯一未知的元素是计算这个随机数......
从我得到的示例随机数中,它是一组 24 个数字 + 字母 + 特殊字符
像这样的东西
ZTQ3YmJjZmM1ZTU5ODg3YQ==
但是,我不太确定你如何从 php 计算 wsse nonce ......有什么标准吗?
我的代码
$nonce = sha1(mt_rand());
结果
dabddf9dbd95b490ace429f7ad6b55c3418cdd58
这与示例完全不同......我相信这就是这段代码不起作用的原因。
所以我正在做更多的研究,现在我正在使用这个
$NASC = substr(md5(uniqid('the_password_i_am _using', true)), 0, 16);
$nonce = base64_encode($NASC);
结果
NzJlMDQ4OTAyZWIxYWU5ZA==
现在,它看起来与示例相似,但我仍然从一开始就显示该错误。
有人可以帮帮我吗?
使用soapUI 进行一些进一步的测试。
相同的userID和passwd,设置passwordtype为passwordtext
它正在工作。
有谁知道soapUI如何计算nonce?或者知道soapUI如何通过ws-security?