Azure Table 存储 - 从只读 SAS 令牌创建连接字符串

Azure Table Storage - Create Connection String from a read-only SAS token

我获得了具有只读访问权限的 Azure table 存储 SAS 令牌。我可以使用 Azure 存储资源管理器浏览它而不会出现问题。在尝试通过控制台应用程序访问它时,我能够将带有 SAS 令牌的连接字符串解析为 Table 端点,但是当我尝试创建 Table 客户端时,我得到:

System.InvalidOperationException: No credentials provided. at Microsoft.WindowsAzure.Storage.CloudStorageAccount.CreateCloudTableClient()

我用于连接字符串(带有替换值)的语法是:

<add key="StorageConnectionString" value ="TableEndpoint=https://myaccount.table.core.windows.net/Table?sv=2015-04-05&amp;tn=Table&amp;sig=Signature&amp;se=2099-99-99T12%3A00%3A00Z&amp;sp=r" />

最后,我的控制台应用程序代码:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

我认为你需要使用 StorageCredentials class。这是一个示例:

StorageCredentials accountSAS = new StorageCredentials(sasToken);
CloudStorageAccount accountWithSAS = new CloudStorageAccount(accountSAS, "account-name", endpointSuffix: null, useHttps: true);
CloudTableClient tableClientWithSAS = accountWithSAS.CreateCloudTableClient();

您可以参考以下示例代码,使用table 服务端点和共享访问签名来初始化CloudTableClient class 的新实例,方法是使用new CloudTableClient(Uri, StorageCredentials)

StorageCredentials creds = new StorageCredentials("your SAStoken");

CloudTableClient tableClient = new CloudTableClient(new Uri("your table endpoint"), creds);

遇到同样的问题时偶然发现了这个。使用 StorageCredentials 的解决方案似乎没问题,但后来我发现提到的连接字符串也有问题。

为了使连接字符串有效,它需要包含'SharedAccessSignature=',所以你的连接字符串应该是:

TableEndpoint=https://myaccount.table.core.windows.net;SharedAccessSignature=sv=2015-04-05&amp;tn=Table&amp;sig=Signature&amp;se=2099-99-99T12%3A00%3A00Z&amp;sp=r

我用这个来解决我的情况,它对我有用。

另请参阅 https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string

中有关 SAS 令牌的部分