如何使用 Microsoft.WindowsAzure.Storage.Table.CloudTableClient 授权托管标识访问 Azure 表存储

Posted

技术标签:

【中文标题】如何使用 Microsoft.WindowsAzure.Storage.Table.CloudTableClient 授权托管标识访问 Azure 表存储【英文标题】:How to Authorize a Managed Identity to access Azure Table Storage using Microsoft.WindowsAzure.Storage.Table.CloudTableClient 【发布时间】:2021-12-14 18:01:32 【问题描述】:

我正在使用Microsoft.WindowsAzure.Storage C# 库通过存储凭据访问我的Azure Table Storage 帐户,如下所示。

_CloudStorageAccount = new CloudStorageAccount(
                new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(
                azureStorageAccountName, azureStorageAccountKey),
                true
            );
_CloudTableClient = _CloudStorageAccount.CreateCloudTableClient();

不过,微软最近表示,现在可以使用Managed Identities (Authorize access to tables using Azure Active Directory (preview)) 访问 ATS 服务,他们在此处分享了以下代码示例,说明如何使用托管身份创建表:

public static void CreateTable(string accountName, string tableName)

    // Construct the table endpoint from the arguments.
    string tableEndpoint = string.Format("https://0.table.core.windows.net/",
                                                accountName);

    // Get a token credential and create a service client object for the table.
    TableClient tableClient = new TableClient(new Uri(tableEndpoint), 
                                                tableName, 
                                                new DefaultAzureCredential());

    try
    
        // Create the table.
        tableClient.Create();

    
    catch (RequestFailedException e)
    
        Console.WriteLine("Exception: 0", e.Message);
    

这很好,但此示例使用 Azure.Data.Tables.TableClient 而不是我当前使用的 Microsoft.WindowsAzure.Storage.Table.CloudTableClient,所以有没有办法使用托管标识显式使用 CloudTableClient 访问 Azure Table Storage 服务?

【问题讨论】:

我有一个使用旧 SDK 下载 blob 的示例:github.com/juunas11/Joonasw.ManagedIdentityDemos/blob/…。这是此示例存储库中较旧的提交。不知道这是否适用于表格。 【参考方案1】:

您可以使用下面的代码通过 Microsoft.WindowsAzure.Storage.Table.CloudTableClient 使用托管标识在 Azure 表存储中创建一个表

public static async Task createTable(string accountName, string tableName)

            string tableEndpoint = string.Format("https://0.table.core.windows.net/",accountName);
            var token = await new AzureServiceTokenProvider().GetAccessTokenAsync("https://storage.azure.com/");
            var tokenCredential = new TokenCredential(token);
            var storageCredentials = new StorageCredentials(tokenCredential);
            var tableClient = new CloudTableClient(new Uri(tableEndpoint), storageCredentials);
            var table = tableClient.GetTableReference(tableName);
            table.CreateIfNotExistsAsync().Wait();

【讨论】:

以上是关于如何使用 Microsoft.WindowsAzure.Storage.Table.CloudTableClient 授权托管标识访问 Azure 表存储的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?