2017-03-09 69 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

我打算接受这个,这完全在我身上。我的密钥混合存储帐户。 –