gpt4 book ai didi

php - 如何计算wsse nonce?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:01:01 28 4
gpt4 key购买 nike

我在尝试向服务器发送 soap 请求 (soapCall) 时遇到错误。

Fatal error: Uncaught SoapFault exception: [ns1:InvalidSecurity] An error was discovered processing the <wsse:Security> header

我需要发送 ws-security header

<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>

经过大量研究,我认为我遇到的问题是随机数不符合要求。当我制作 soap header 时,它看起来就像我得到的例子。唯一未知的因素是计算这个随机数......

从我得到的随机数示例中,它是一组 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?

最佳答案

尝试这样的事情

        string usn = "MyUsername";
string pwd = "MyPassword";

DateTime created = DateTime.Now.ToUniversalTime();
var nonce = getNonce();
string nonceToSend = Convert.ToBase64String(Encoding.UTF8.GetBytes(nonce));
string createdStr = created.ToString("yyyy-MM-ddTHH:mm:ssZ");
string passwordToSend = GetSHA1String(nonce + createdStr + pwd);

和函数:

protected string getNonce()
{
string phrase = Guid.NewGuid().ToString();
return phrase;

}

protected string GetSHA1String(string phrase)
{
SHA1CryptoServiceProvider sha1Hasher = new SHA1CryptoServiceProvider();
byte[] hashedDataBytes = sha1Hasher.ComputeHash(Encoding.UTF8.GetBytes(phrase));
string test = Convert.ToString(hashedDataBytes);
return Convert.ToBase64String(hashedDataBytes);
}

关于php - 如何计算wsse nonce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117695/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com