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

升级至Azure.Identity后GetTokenAsync抛出资源主体未找到异常

解决Azure.Identity调用GetTokenAsync时的"资源主体未找到"问题

从ADAL升级到Azure.Identity时出现该错误,核心是两个库在令牌请求参数格式、权限配置要求上存在差异,以下是需要检查的关键配置项:

1. 修正令牌请求的Scope格式

ADAL中直接使用资源URI(如https://lookupcityservice.dataserviceproviderxx.com.au),但Azure.Identity的TokenRequestContext要求传入Scope数组,格式必须为{资源URI}/.default——这是获取应用级权限令牌的固定格式。

错误示例:

var context = new TokenRequestContext(new[] { "https://lookupcityservice.dataserviceproviderxx.com.au" });
await credential.GetTokenAsync(context);

正确示例:

var context = new TokenRequestContext(new[] { "https://lookupcityservice.dataserviceproviderxx.com.au/.default" });
await credential.GetTokenAsync(context);

2. 确认租户标识的正确性

构造Credential(如ClientSecretCredential、DefaultAzureCredential)时,确保指定的租户ID准确:

  • 优先使用租户GUID(避免域名解析问题),也可使用租户域名dataserviceproviderxx.com.au
  • 若用DefaultAzureCredential,需确认环境变量AZURE_TENANT_ID设置正确,或在代码中显式指定租户参数

示例:

var credential = new ClientSecretCredential(
    "你的租户GUID或域名",
    "你的客户端ID",
    "你的客户端密钥"
);

3. 检查应用注册的API权限配置

如果复用旧ADAL的应用注册:

  • 确认目标资源(lookupcityservice)的API权限已添加到应用中,且应用级权限已完成管理员同意
  • 若使用新应用注册,需重新添加目标资源的API权限并完成同意流程

4. 验证资源的应用ID URI完全匹配

检查Azure AD中注册的lookupcityservice资源的应用ID URI,确保和你在Scope中使用的资源URI完全一致(包括大小写、结尾斜杠等细节)——Azure.Identity对标识符的匹配校验比ADAL更严格。

5. 确认Credential类型的权限范围

根据使用的Credential类型,核对对应权限配置:

  • 若用ManagedIdentityCredential:确保托管身份(系统分配/用户分配)已被授予访问目标资源的权限
  • 若用ClientSecretCredential:确认客户端密钥未过期,应用注册的客户端ID、密钥与代码参数完全一致

内容的提问来源于stack exchange,提问作者R.A 1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:44:53