我正在尝试访问 blob 存储帐户并使用 SAS 令牌简单地列出容器的内容。我正在生成访问策略(根据此文档)并在我的访问令牌中引用该访问策略。
不幸的是,当我的代码尝试运行该ListBlobsSegmented
函数时,我收到 403(禁止)错误。
这是尝试获取 blob 列表的代码:
string storageAccountName = "ringclone";
string containerName = "ringcentral-archives";
string authenticationKey = "?sv=2018-03-28&si=ringclone-access-policy&sr=c&sig=************************";
StorageCredentials creds;
CloudStorageAccount account;
CloudBlobClient blobClient;
CloudBlobContainer cloudBlobContainer;
creds = new StorageCredentials(authenticationKey);
account = new CloudStorageAccount(creds, storageAccountName, endpointSuffix: null, useHttps: true);
blobClient = account.CreateCloudBlobClient();
cloudBlobContainer = blobClient.GetContainerReference(containerName);
BlobContinuationToken blobContinuationToken = null;
var containerSegment = blobClient.ListBlobsSegmented("", blobContinuationToken); // 403 error;
这些是我用来生成访问策略并生成引用该访问策略的 SAS 令牌的步骤:
- 在 Azure 存储资源管理器中,我浏览到 Blob 存储并找到我要授予访问权限的特定容器。我右键单击并选择“管理访问策略”。
- 然后,我提供此策略的所有权限,并提供从现在起 20 年的结束日期。
- 单击“保存”后,我返回容器列表并再次右键单击该容器并选择“获取共享访问签名”。
- 在共享访问签名对话框中,我引用了我的访问策略。
- 单击“创建”后,我的共享访问签名带有附加策略。
- 然后,我只需将我的存储帐户名称、容器名称和身份验证密钥复制/粘贴到上面显示的代码中。对于身份验证密钥,我使用 SAS 签名对话框中显示的“查询字符串”字段。例如:
根据文档,查询字符串字段用作身份验证键
string storageAccountName = "ringclone";
string containerName = "ringcentral-archives";
string authenticationKey = "?sv=2018-03-28&si=ringclone-access-policy&sr=c&sig=************************"; // retrieved from the "Query String" field in storage explorer.
但是,尝试列出容器中的 blob 时出现 403 错误。我究竟做错了什么?