2017-03-09 98 views
0

我正在使用以下代碼爲使用Storage Client SDK版本8.0.0的blob容器生成SAS以匹配AzCopy正在使用的內容。Azure Blob容器SAS在代碼而不是AzCopy中運行

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("myconnectionstring"); 

     CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

     CloudBlobContainer container = blobClient.GetContainerReference("mycontainer"); 

     SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy(); 
     sasConstraints.SharedAccessStartTime = DateTime.Now.AddHours(-24); 
     sasConstraints.SharedAccessExpiryTime = DateTime.Now.AddHours(24); 
     sasConstraints.Permissions = SharedAccessBlobPermissions.List | SharedAccessBlobPermissions.Read; 

     string sas = container.GetSharedAccessSignature(sasConstraints, null); 

     Console.WriteLine(sas); 

     Console.WriteLine(container.Uri); 

     StorageCredentials creds = new StorageCredentials(sas); 

     var sasContainer = new CloudBlobContainer(new Uri(container.Uri + sas)); 

     var items = sasContainer.GetBlobReference("items.txt"); 

這一切都在代碼工作正常,但是當我複製SAS令牌到AzCopy下載一個blob的「SourceSAS」參數,我得到一個403稱該簽名不匹配(通過提琴手)。用於創建簽名的參數對我來說很合適。我很困惑,爲什麼這可以在代碼中工作,但不通過AzCopy。

如果我使用Azure存儲資源管理器工具創建SAS令牌,它工作正常。此SAS令牌以不同版本的服務爲目標,但我無法強制SDK更改該參數。有誰知道爲什麼會發生這種情況?我將在更新中發佈Fiddler內容。

+0

請提供Fiddler跟蹤。同時告訴我們你使用的是什麼版本的AzCopy。 –

回答

0

正如你所做的那樣,我做了一個測試,生成與應用程序中的訪問策略關聯的SAS令牌,並安裝WindowsAzure.Storage v8.0.0,我可以通過我的容器中生成的SAS令牌下載blob應用程序。 AzCopy v5.0.0和最新版本(5.2.0)都可以識別這個有效的SAS令牌。

生成SAS令牌後,請檢查您的瀏覽器是否可以訪問https://{storageaccount}.blob.core.windows.net/{mycontainer}/items.txt?{sas token}

此外,請嘗試升級SDK並增加ExpiryTime,或者創建一個新容器並進行相同的測試以檢查是否會出現相同的問題。

+0

我打算接受這個,這完全在我身上。我的密鑰混合存儲帳戶。 –