SOAP 要求 (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 を使用したさらにいくつかのテスト。
同じユーザー ID と passwd、passwordtype を passwordtext に設定します
そしてそれは働いています。
soapUI がナンスを計算する方法を知っている人はいますか? または、soapUI が ws-security を渡す方法を知っていますか?