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

获取系统分配托管身份令牌时租户不匹配,如何指定租户ID?

解决Azure令牌租户不匹配错误

问题背景

你使用系统分配托管身份获取访问令牌的代码如下:

DefaultAzureCredential cred = new DefaultAzureCredential(new DefaultAzureCredentialOptions()
{ 
    ManagedIdentityClientId = Constants.ManagedIdentityId,
});
var accessToken = cred.GetToken(new TokenRequestContext(new[] { "https://management.azure.com" }));

调用API Management REST API时收到错误:

访问令牌来自错误的颁发者'https://sts.windows.net/TENANT_ID1/',它必须与该订阅关联的租户'https://sts.windows.net/TENANT_ID2/'匹配。请使用授权地址(URL)'https://login.windows.net/TENANT_ID2'来获取令牌。

当前你在本地Visual Studio环境运行代码,以下是指定正确租户ID的方法:

解决方法

1. 代码层面强制指定租户ID

修改DefaultAzureCredentialOptions,添加TenantId参数明确指定目标租户(TENANT_ID2):

DefaultAzureCredential cred = new DefaultAzureCredential(new DefaultAzureCredentialOptions()
{ 
    ManagedIdentityClientId = Constants.ManagedIdentityId,
    TenantId = "TENANT_ID2" // 替换为你的目标租户ID
});
var accessToken = cred.GetToken(new TokenRequestContext(new[] { "https://management.azure.com" }));

这个配置会约束DefaultAzureCredential仅从指定租户获取令牌,避免使用默认租户的凭据。

2. 调整Visual Studio登录账户的租户关联

DefaultAzureCredential会自动尝试使用Visual Studio当前登录的账户获取令牌,需确保该账户属于目标租户TENANT_ID2:

  • 点击Visual Studio右上角的用户头像,选择账户设置
  • 在账户列表中,确认当前登录账户已加入TENANT_ID2租户;若未加入,添加对应租户的账户并设为默认
  • 重启Visual Studio使新凭据生效

3. 部署后的托管身份租户一致性检查

若后续将Web应用部署到Azure,需确保系统分配托管身份所在租户与API Management的订阅租户一致。若不一致,需将托管身份迁移至目标租户,或在目标租户内重新创建系统分配托管身份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:00:21