了解 Azure CloudTableClient:禁止 (403) 异常

Understanding Azure CloudTableClient: Forbidden(403) Exception

通过 Azure 存储资源管理器或常规浏览器进行读取访问适用于现有的 SAS 令牌。控制台访问引发 Forbidden (403) 异常。

引用的 appconfig 的代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <appSettings>
      <add key="SASToken" value="sv=[REMOVED]&amp;tn=[REMOVED]&amp;sig=[REMOVED]&amp;se=[REMOVED]&amp;sp=r" />
    </appSettings>
</configuration>

控制台应用代码如下:

StorageCredentials accountSAS = new StorageCredentials(CloudConfigurationManager.GetSetting("SASToken"));
CloudStorageAccount accountWithSAS = new CloudStorageAccount(storageCredentials: accountSAS, accountName: "acccount-name",  endpointSuffix: "core.windows.net", useHttps: true);
CloudTableClient tableClient = accountWithSAS.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("TableName");

if (table.Exists() == true)
{
    Console.WriteLine("Table Exists.");
}
else
    Console.WriteLine("Table Does not Exist.");

根据我的经验,403 错误表示它没有权限这样做。这意味着使用 Service (table) SAS 无权检查 table 是否存在。如果我们想检查 table 是否存在,我们需要存储帐户级别的 SAS 而不是服务 (table) SAS。更多信息请参考types of shared access signatures。虽然我们没有检查 table 是否存在的权限,但我们仍然拥有 SAS 分配的访问权限。我们也可以使用 table 查询来检索 table 条记录。例如var result = table.ExecuteQuery(new TableQuery {TakeCount =5});它会得到与常规浏览器类似的结果。