我一直在研究概念證明,並正在嘗試針對Azure存儲REST API進行測試。但是,我無法驗證。我一整天都在嘗試閱讀,調整和改寫,但仍然無法正常工作。我一直在逐步完成文檔。Azure Blob存儲REST API簽名
我希望找到管理這個的人。大量的硬編碼位,它只是讓它工作。我不斷收到此錯誤迴響應
在HTTP請求「中發現的MAC簽名」是不一樣的任何計算簽名
任何人都可以看到什麼是可能的盯着我的臉?這讓我很生氣。
var requestDateString = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
var StorageAccountName = "<account removed>";
var StorageKey = "<key removed>";
using (var client = new HttpClient())
{
var stringToSign = new List<string>(){
"GET" /*HTTP Verb*/
,"" /*Content-Encoding*/
,"" /*Content-Language*/
,"" /*Content-Length (include value when zero)*/
,"" /*Content-MD5*/
,"" /*Content-Type*/
,"" /*Date*/
,"" /*If-Modified-Since */
,"" /*If-Match*/
,"" /*If-None-Match*/
,"" /*If-Unmodified-Since*/
,"" /*Range*/
,$"x-ms-date:{requestDateString}\nx-ms-version:2015-02-21" /*CanonicalizedHeaders*/
,$"/{StorageAccountName}/ " + _containerName + "\ncomp:metadata\nrestype:container\ntimeout:20" /*CanonicalizedResource*/
};
string signature;
using (var hmac = new HMACSHA256(Convert.FromBase64String(StorageKey)))
{
var compiledStringToSign = (string.Join("\n", stringToSign));
byte[] dataToHmac = Encoding.UTF8.GetBytes(compiledStringToSign);
signature = Convert.ToBase64String(hmac.ComputeHash(dataToHmac));
}
//Send Request
client.DefaultRequestHeaders.Add("x-ms-date", requestDateString);
client.DefaultRequestHeaders.Add("x-ms-version", " 2015-02-21");
client.DefaultRequestHeaders.Add("Authorization", $"SharedKey {StorageAccountName}:" + signature);
var response = client.SendAsync(request);
//編輯 請求的URL是https://account.blob.core.windows.net/testcontainer/blobtest/blob1234
的錯誤是非常具體的關於身份驗證失敗,所以我認爲,誤差必須在簽名,我真的不能看到它雖然。我檢查了所有的輸出與小提琴手,以確保它們匹配
我可以問你爲什麼不使用Azure存儲SDK爲C#? –
當沒有SDK時,我曾經在Python中實現過這個功能。 AFAIK C#SDK在GitHub上是開源的,您可以查看代碼 - 兩年前,我發現該實現非常易讀 –
您是否也可以共享請求URL? –