[英]How to call REST API for azure file storage using postman?
我想通過郵遞員調用與天藍色的文件存儲相關的REST API。 這是我提出要求的方式:
我正在請求列出文件存儲帳戶中的所有共享,如此處所述: https : //docs.microsoft.com/zh-cn/rest/api/storageservices/list-shares
我得到以下錯誤:
“請求中的日期標頭不正確。” 我應該做出什么改變?
編輯1:
當我以正確的格式提供日期時,出現如下錯誤:
我收到以下錯誤消息:“在HTTP請求中找到的MAC簽名”與任何計算出的簽名都不相同。服務器使用以下字符串簽名:“ GET”
如何解決呢?
使用更新的屏幕截圖,看來您的問題不再與x-ms-date有關。 出現此403錯誤的原因是標頭中的“授權”屬性,其格式為
Authorization =“ [SharedKey | SharedKeyLite] [帳戶名]:[簽名]”
您不應將Azure Portal上的訪問密鑰直接用作授權的簽名部分,而應通過對UTF-8編碼使用HMAC-SHA256算法來構造它來編碼請求字符串。 格式化為
簽名= Base64的(HMAC-SHA256(UTF8(StringToSign)))
在正式文件中提到的。
下面的示例Java代碼向您展示了如何構造授權的簽名部分:
String stringToSign = "GET\n"
+ "\n" // content encoding
+ "\n" // content language
+ "\n" // content length
+ "\n" // content md5
+ "\n" // content type
+ "\n" // date
+ "\n" // if modified since
+ "\n" // if match
+ "\n" // if none match
+ "\n" // if unmodified since
+ "\n" // range
+ "x-ms-date:" + date + "\nx-ms-version:2015-02-21\n" // headers
+ "/" + <your account name> + "/"+"\ncomp:list"; // resources
String auth = getAuthenticationString(stringToSign);
private static String getAuthenticationString(String stringToSign) throws Exception {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(Base64.decode(key), "HmacSHA256"));
String authKey = new String(Base64.encode(mac.doFinal(stringToSign.getBytes("UTF-8"))));
String auth = "SharedKey " + account + ":" + authKey;
return auth;
}
代碼中的auth參數是由您上面提到的簽名生成的,然后您可以將其填寫在Authorization屬性中,然后在Postman中重新發送請求。
重要的提醒:
在上面的代碼中,您不應在// resources行中錯過“ \\ ncomp:list”,否則也會返回403錯誤。 您可以在“ 構造規范化資源字符串”中找到規則。
您指向的鏈接包含以下示例:
PUT http://myaccount/mycontainer?restype=container&timeout=30 HTTP/1.1
x-ms-version: 2015-02-21
x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Content-Length: 0
您使用的日期格式不正確:
所有經過身份驗證的請求必須包含該請求的協調世界時(UTC)時間戳。 您可以在x-ms-date標頭或標准HTTP / HTTPS Date標頭中指定時間戳。 如果在請求上指定了兩個標頭,則將x-ms-date的值用作請求的創建時間。
編輯:
在授權標頭上,鏈接中的文章中的“ Azure存儲服務的身份驗證”鏈接指出以下內容:
要驗證請求,您必須使用發出請求的帳戶的密鑰對請求進行簽名,並將該簽名作為請求的一部分傳遞。
Authorization
標頭的格式如下:
Authorization =“ [SharedKey | SharedKeyLite]:”
其中,SharedKey
或SharedKeyLite
是授權方案的名稱,AccountName
是請求資源的帳戶的名稱,Signature
是根據請求構造並使用SHA256算法計算的基於哈希的消息身份驗證代碼(HMAC),然后通過使用Base64編碼進行編碼。
這是有關基於哈希的消息身份驗證代碼(HMAC)的更多信息
由於您評論了:
您好,金鑰與我的azure門戶帳戶的“訪問金鑰”標簽中提供的相同。 你有什么建議?
那就是問題所在。 您不應將密鑰用作郵件的Signature
,而需要根據密鑰來計算 Signature
。
簡而言之:
Signature
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.