我有一個私人的Azure存儲容器,正在嘗試使用Azure存儲SAS,以便我可以上傳和下載文件。 我能夠生成簽名,但它總是拋出我的身份驗證失敗的錯誤Azure存儲SAS身份驗證失敗
AuthenticationFailed
服務器無法驗證請求。確保授權標頭的值正確形成,包括 簽名。 RequestId:a9dce486-0001-0021-23f7-d8f6dc000000 Time:2017-05-30T03:45:56.6617677Z 簽名不符。使用的字符串是r 2017-05-30T03:40:48Z 2017-05-30T03:55:48Z /blob/{myaccount}/{mycontainer}/11e1575f-d3ad-40cc-b1ce-32e24dc20324.jpg2016年5月31日
這是我有產生對我來說,使用簽名的代碼,並返回完整的URI來訪問文件。
var accountAndKey = new StorageCredentials("******", "*********************");
var storageAccount = new CloudStorageAccount(accountAndKey, true);
var sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5);
sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10);
sasConstraints.Permissions = SharedAccessBlobPermissions.Read;
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("*****");
CloudBlockBlob blockBlob = container.GetBlockBlobReference("11e1575f-d3ad-40cc-b1ce-32e24dc20324.jpg");
var sasBlobToken = blockBlob.GetSharedAccessSignature(sasConstraints);
var sas = blockBlob.Uri + sasBlobToken;
return sas;
這是它產生
?SV = 2016年5月31日& SR = B & SIG = 9fUwDWfdtUifv9iZXJKgILEM7Yx1uP3Ku0vrspjWyz8%3D & ST = 2017-05-30T03%3A40%3A43Z &簽名se = 2017-05-30T03%3A55%3A43Z & sp = r
我使用Azure門戶來生成簽名,它工作正常。我追加它,並能像往常一樣下載文件。 這是它產生
SV = 2016年5月31日& SS = B & SRT = SCO & SP = R & SE = 2017-05-30T03簽名:57:25Z & ST = 2017- 05-30T03:52:25Z & SPR = HTTPS & SIG = JOnhkge0QWNdv8sXJjb5GazTo9c34KH1IvZBvcNgjHo%3D
我高度懷疑其與時間戳的問題。因爲我可以看到從代碼生成的內容與從門戶生成的內容之間的時間戳差異。
任何想法非常感謝。謝謝。
編輯 我更新的代碼添加一天忙到到期並取消了開始時間,這是簽名現在
?SV = 2016年5月31日& SR = B & SIG = 73立方米%2BJ%2BUsFk537vd8a7F%2BdpdON1Pg2RZ1IRynMH4zGA%3D & SE = 2017-05-31T06%3A12%3A07Z & SP = R
,但它仍然犯規讓我下載的文件。相同的錯誤消息。
簽名不符。串籤使用爲r 2017-05-31T06:12:07Z/BLOB/{MyAcc}/{我的容器} /11e1575f-d3ad-40cc-b1ce-32e24dc20324.jpg 2016年5月31日
你的代碼對我來說看起來很好。你能通過刪除開始時間並增加代碼中的到期時間(比如說一天)來嘗試嗎? –
@GauravMantri我編輯了代碼來完成更改,但仍然沒有運氣 –
您使用什麼版本的SDK生成SAS令牌? –