You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Microsoft.WindowsAzure.Storage包中使用MSI进行存储账户认证?

在旧版Microsoft.WindowsAzure.Storage包中使用MSI认证访问Table服务

你遇到的错误是因为旧版Microsoft.WindowsAzure.Storage包中,TokenCredential仅支持Blob和Queue服务,Table服务并不兼容这种认证方式,因此通过StorageCredentials(tokenCredential)构造的凭证无法用于表操作。

方案1:使用WithOAuthToken扩展方法一次性注入令牌

这种方式适合短期场景,但需要注意令牌默认有效期约1小时,过期后需重新获取:

using Microsoft.WindowsAzure.Storage.Table;
using Azure.Identity;

var credential = new DefaultAzureCredential();
// 注意Table服务的专属scope,不要使用通用的storage scope
var accessToken = await credential.GetTokenAsync(new TokenRequestContext(scopes: new string[] { "https://table.core.windows.net/.default" }));

// 初始化Table客户端
var tableClient = new CloudTableClient(new Uri(tableEndpoint));
// 使用扩展方法附加OAuth令牌
tableClient = tableClient.WithOAuthToken(accessToken.Token);

_table = tableClient.GetTableReference(tableName);
await _table.CreateIfNotExistsAsync(tableRequestOptions);

方案2:通过SendingRequest事件动态刷新令牌(推荐)

这种方式会在每次发送请求前自动获取最新令牌,避免过期失效问题:

using Microsoft.WindowsAzure.Storage.Table;
using Azure.Identity;
using System.Net.Http.Headers;

var credential = new DefaultAzureCredential();
var tableClient = new CloudTableClient(new Uri(tableEndpoint));

// 注册请求发送前的事件,动态添加最新令牌
tableClient.SendingRequest += async (sender, e) =>
{
    var token = await credential.GetTokenAsync(new TokenRequestContext(scopes: new string[] { "https://table.core.windows.net/.default" }));
    e.Request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.Token);
};

_table = tableClient.GetTableReference(tableName);
await _table.CreateIfNotExistsAsync(tableRequestOptions);

注意事项

  • 确保你的MSI身份已被授予目标存储账户的Storage Table Data Contributor(或对应读写权限)角色;
  • tableEndpoint必须是Table服务的专属端点,格式为https://<你的存储账户名>.table.core.windows.net/;
  • 必须引用Microsoft.WindowsAzure.Storage.Table NuGet包,WithOAuthToken扩展方法属于该命名空间。

内容的提问来源于stack exchange,提问作者Demo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:52:20