gpt4 book ai didi

api - 在 Postman 中使用 Blob 服务 API 放置 blob - 授权 header

转载 作者:行者123 更新时间:2023-12-03 00:12:19 33 4
gpt4 key购买 nike

我需要帮助构建授权 header 以 PUT block blob。

PUT\n\n\n11\n\n\n\n\n\n\n\n\nx-ms-blob-type:BlockBlob\nx-ms-date:Sat, 25 Feb 2017 22:20:13 GMT\nx-ms-version:2015-02-21\n/myaccountname/mycontainername/blob.txt\n

我接受这个,UTF 8 编码它。然后,我在 Azure 帐户中获取访问 key ,并使用该 key 对该 UTF 8 编码字符串进行 HMAC sha256 处理。然后我以 Base64 输出它。我们将此称为输出字符串。

我的授权 header 如下所示:SharedKey myaccountname:output string

它不工作。

Postman 中的 header 还具有 x-ms-blob-type、x-ms-date、x-ms-version、Content-Length 和 Authorization。 body 现在向世界打招呼。

有人可以帮我在 Postman 中成功发出请求吗?

<?xml version="1.0" encoding="utf-8"?>
<Error>
<Code>AuthenticationFailed</Code>
<Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:cdeb9a5e-0001-0029-5fb5-8f7995000000
Time:2017-02-25T22:22:32.0300016Z</Message>
<AuthenticationErrorDetail>The MAC signature found in the HTTP request 'jiJtirohvi1syXulqkPKESnmQEJI4GpDU5JBn7BM/xY=' is not the same as any computed signature. Server used following string to sign: 'PUT


11

text/plain;charset=UTF-8






x-ms-date:Sat, 25 Feb 2017 22:20:13 GMT
x-ms-version:2015-02-21
/myaccountname/mycontainername/blob.txt'.</AuthenticationErrorDetail>
</Error>

编辑:

首先,我要感谢您和所有回复的人。我真的很感激。我还有最后一个问题,然后我想我就解决了!我没有使用该代码 - 我正在手动完成这一切。如果我有 key :X2iiy6v47j1jZZH5555555555zzQRrIAdxxVs55555555555av8uBUNGcBMotmS7tDqas14gU5O/w==为了匿名而略有改变 - 我是否解码它:使用在线 base64 解码器。然后,当我的字符串现在看起来像这样:PUT\n\n\n11\n\ntext/plain;charset=UTF-8\n\n\n\n\n\n\nx-ms-blob-type:BlockBlob\nx-ms-date:Mon, 27 Feb 2017 21:53:13 GMT\nx-ms-version:2015-02-21\n/myaccount/mycontainer/blob.txt\n所以我在 https://mothereff.in/utf-8 中运行它然后在 HMAC 中使用我的解码 key :https://www.liavaag.org/English/SHA-Generator/HMAC/ - 最后使用 sha256 和 base64。

这就是我如何将正确的字符串放在这里吗?:SharedKey myaccount:<string here>

最佳答案

我认为您在此处指定 StringToSign 的方式存在问题:

PUT\n\n\n11\n\n\n\n\n\n\n\n\nx-ms-blob-type:BlockBlob\nx-ms-date:Sat, 25 Feb 2017 22:20:13 GMT\nx-ms-version:2015-02-21\n/myaccountname/mycontainername/blob.txt\n

如果您注意到从服务器返回的错误消息,服务器要签名的字符串与您的不同,差异在于服务器使用 Content-Type (text/plain; charset=UTF-8) 在签名计算中,而你却没有。请将此内容类型包含在您的代码中,一切都会正常工作。

这是我使用的示例代码(仅部分):

        var requestMethod = "PUT";
var urlPath = "test" + "/" + "myblob.txt";
var storageServiceVersion = "2015-12-11";
var date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
var blobType = "BlockBlob";
var contentBytes = Encoding.UTF8.GetBytes("Hello World");
var canonicalizedResource = "/" + accountName + "/" + urlPath;
var canonicalizedHeaders = "x-ms-blob-type:" + blobType + "\nx-ms-date:" + date + "\nx-ms-version:" + storageServiceVersion + "\n";
var stringToSign = requestMethod + "\n" +
"\n" + //Content Encoding
"\n" + //Content Language
"11\n" + //Content Length
"\n" + //Content MD5
"text/plain;charset=UTF-8" + "\n" + //Content Type
"\n" + //Date
"\n" + //If - Modified - Since
"\n" + //If - Match
"\n" + //If - None - Match
"\n" + //If - Unmodified - Since
"\n" + //Range +
canonicalizedHeaders +
canonicalizedResource;
string authorizationHeader = GenerateSharedKey(stringToSign, accountKey, accountName);


private static string GenerateSharedKey(string stringToSign, string key, string account)
{
string signature;
var unicodeKey = Convert.FromBase64String(key);
using (var hmacSha256 = new HMACSHA256(unicodeKey))
{
var dataToHmac = Encoding.UTF8.GetBytes(stringToSign);
signature = Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac));
}
return string.Format(CultureInfo.InvariantCulture, "{0} {1}:{2}", "SharedKey", account, signature);
}

关于api - 在 Postman 中使用 Blob 服务 API 放置 blob - 授权 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42462746/

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