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

获取Azure Access Token的最佳实践及部署环境获取失败问题咨询

Azure 获取Access Token 最佳实践

问题根因

你当前使用的AzureServiceTokenProvider来自已停止维护的Microsoft.Azure.Services.AppAuthentication库,本地能正常运行是因为库默认读取了Visual Studio的登录凭证,部署环境不存在该登录上下文,也没有配置其他可用认证源时就会抛出异常。

行业通用最佳实践

1. 统一使用Azure.Identity库替换旧认证库

Azure官方现在推荐用Azure.Identity作为唯一的身份认证SDK,适配所有本地、云端部署场景,不需要针对不同环境修改业务代码:

  • 本地开发阶段:自动依次尝试读取Visual Studio、VS Code、Azure CLI、PowerShell的登录凭证,和你之前的本地使用体验完全一致
  • 云端部署阶段:自动读取托管标识凭证,不需要手动维护任何密钥
  • 非Azure部署阶段:自动读取环境变量配置的服务主体信息、本地Azure CLI登录凭证等认证源

示例代码如下:

using Azure.Core;
using Azure.Identity;

// 初始化凭证,可通过选项指定租户ID、排除不需要的认证流
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions 
{ 
    TenantId = "替换为你的租户ID" 
});

// 异步请求访问令牌,作用域按需替换为目标API的资源标识
var accessToken = await credential.GetTokenAsync(
    new TokenRequestContext(new[] { "https://management.azure.com/.default" })
);
string token = accessToken.Token;

注意:尽量避免用.Result同步调用异步方法,容易引发线程死锁,必须同步获取时直接调用同步方法GetToken即可

2. 部署环境适配方案

  • 部署到Azure官方服务(App Service、Function、VM、AKS等):优先使用托管标识,给对应服务的系统分配/用户分配托管标识授予目标API的访问权限即可,不需要任何额外代码或配置修改
  • 部署到非Azure环境:
    • 方案1:创建服务主体,将租户ID、客户端ID、客户端密钥/证书配置到进程的环境变量中,DefaultAzureCredential会自动读取完成认证
    • 方案2:部署环境安装Azure CLI,登录有权限的服务账号,DefaultAzureCredential会自动读取CLI的登录上下文完成认证

3. 旧库临时兼容方案

如果暂时无法迁移到Azure.Identity,可以给部署环境配置AzureServicesAuthConnectionString环境变量,填入服务主体的认证信息,旧版AzureServiceTokenProvider也能正常读取凭证拿到令牌,不过仍然建议尽快迁移到新库,旧库已经不再接收功能更新和安全补丁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:06:08