2016-11-07 31 views
0

Azure Storage Explorerまたは通常のブラウザによる読み取りアクセスは、手元のSASトークンで機能します。コンソールアクセスで禁止(403)例外がスローされています。Azure CloudTableClientの理解:禁止(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."); 
+0

私は混乱しています - 事前に生成されたSASトークンを取得し、それをさまざまな接続に追加していますか?もしそうなら、それはSASの仕組みではありません。 –

+0

私は提供された読み取り専用のSASトークンを使用して、コンソールアプリケーションを介してテーブルストレージへの接続を確立しようとしています。 – Joel

答えて

1

私の経験から、403エラーは、それはそれを行うには権限を持っていないことを示しています。これは、テーブルが存在するかどうかを確認する権限を持たないService(table)SASを使用していることを意味します。テーブルが存在するかどうかを確認するには、アカウントレベルのSASが必要ですが、サービス(テーブル)SASは必要ありません。詳細はtypes of shared access signaturesを参照してください。テーブルが存在するかどうかを確認する権限はありませんが、SASが割り当てたアクセス権はまだあります。テーブルクエリを使用してテーブルレコードを取得することもできます。例えばvar result = table.ExecuteQuery(new TableQuery {TakeCount =5});通常のブラウザと同様の結果が得られます。

関連する問題