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

问题描述:

通过Azure存储资源管理器读取访问权限或常规浏览器适用于手头SAS令牌。控制台访问正在抛出Forbidden(403)异常。下面所引用的AppConfig了解Azure CloudTableClient:禁止(403)异常

代码:

<?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."); 
+0

我很困惑 - 您是否正在使用预生成的SAS令牌并将其附加到您的各种连接?如果是这样的话:那不是SAS的工作原理。 –

+0

我只是试图建立一个连接到表存储通过控制台应用程序使用我提供的只读SAS令牌。 – Joel

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