如何在StorageCredentials上使用SAS进行Azure表存储?

时间:2014-01-29 21:15:03

标签: azure azure-table-storage

我使用.NET API在给定的表上创建SAS:

        var tablePolicy = new SharedAccessTablePolicy()
        {
            SharedAccessExpiryTime = DateTime.Now.Add(TimeSpan.FromHours(2)),
            Permissions = SharedAccessTablePermissions.Query
        };
        var permissions = new TablePermissions();

        permissions.SharedAccessPolicies.Add("myPolicy", tablePolicy);

        var credentials = new StorageCredentials(
            "#my account here#",
            "#my account secondary key here#");
        var tableClient = new CloudTableClient(
            new Uri("https://#my account here#.table.core.windows.net/"),
            credentials);
        var logTable = tableClient.GetTableReference("WADLogsTable");

        logTable.SetPermissions(permissions);

        var sas = logTable.GetSharedAccessSignature(tablePolicy, "myPolicy", null, null, null, null);

然后,我接受最后一个'sas'变量并使用它来创建凭据并执行查询:

        var credentials = new StorageCredentials(sas);
        var tableClient = new CloudTableClient(
            new Uri("#my account URI here#"),
            credentials);
        var logTable = tableClient.GetTableReference("WADLogsTable");
        var rows = logTable.ExecuteQuery(new TableQuery()).ToArray();

然后我收到403(禁止)错误。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我认为您收到此错误是因为您在创建SAS时同时定义SharedAccessTablePolicyPolicy Name。因此,如果您使用以下任何一个应该工作:

var sas = logTable.GetSharedAccessSignature(tablePolicy, null, null, null, null, null);

var sas = logTable.GetSharedAccessSignature(null, "myPolicy", null, null, null, null);