我正在使用以下代码使用 Storage Client SDK 版本 8.0.0 为 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 表示签名不匹配(通过 Fiddler)。用于创建签名的参数对我来说看起来不错。我很困惑为什么这在代码中有效,而不是通过 AzCopy。
如果我使用 Azure 存储资源管理器工具创建 SAS 令牌,它可以正常工作。此 SAS 令牌针对不同版本的服务,但我无法强制 SDK 更改该参数。有人知道为什么会这样吗?我将在更新中发布 Fiddler 内容。