gpt4 book ai didi

c# - Shopify C# HMAC SHA256 OAuth 验证

转载 作者:行者123 更新时间:2023-12-02 15:04:05 27 4
gpt4 key购买 nike

我尝试在 OAUTH 请求期间验证 Shopify HMAC,但我生成的哈希与请求中提供的哈希不匹配。

我发现了一些其他线程,但它们是 either outdated ,正如文档现在所说,它使用 GET 请求而不是 POST,或 unanswered在java中。

我的C#代码如下:

string key = "mysecretkey";

string message = string.Format("shop={0}&timestamp={1}", shop, timestamp);

System.Text.ASCIIEncoding encoding = new ASCIIEncoding();

byte[] keyBytes = encoding.GetBytes(key);

byte[] messageBytes = encoding.GetBytes(message);

System.Security.Cryptography.HMACSHA256 cryptographer = new System.Security.Cryptography.HMACSHA256(keyBytes);

byte[] bytes = cryptographer.ComputeHash(messageBytes);

string digest = BitConverter.ToString(bytes).Replace("-", "");

bool valid = digest == hmac.ToUpper();

我猜测该消息的构建不正确,但我遵循了 official documentation运气不好。

有人可以帮忙吗?

最佳答案

好的,Shopify 的开发人员给了我答案。看来您需要按字母顺序散列查询字符串的整个内容,除了签名和 hmac 之外。我有自己的参数(rlr),我正在附加该参数以及文档(状态)中未提及的参数。

 string message = "";// "code=7af66fd73427a1634cee3103297230b8&rlr=9DFD5EA9-7747-4142-97D9-2D44BBA442F1&shop=appswiz.myshopify.com&state=fa992b8f-762e-4813-b707-6044e71ad3b5&timestamp=1448856806";
message = "code=xxxxxxxx";
message += "&rlr=xxxxx";
message += "&shop=xxx.myshopify.com";
message += "&state=xxxxxxxx";
message += "&timestamp=1449111190";
hmac = "xxxxxxx";
System.Text.ASCIIEncoding encoding = new ASCIIEncoding();
byte[] keyBytes = encoding.GetBytes(key);
byte[] messageBytes = encoding.GetBytes(message);
System.Security.Cryptography.HMACSHA256 cryptographer = new System.Security.Cryptography.HMACSHA256(keyBytes);

byte[] bytes = cryptographer.ComputeHash(messageBytes);

string digest = BitConverter.ToString(bytes).Replace("-", "");
return digest == hmac.ToUpper();

现在可以了。

关于c# - Shopify C# HMAC SHA256 OAuth 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33992392/

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