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

使用用户分配托管身份生成Azure AD应用微服务令牌失败求助

排查思路与解决方法
  • 检查范围名称拼写:你指定的范围AllowAnonymus疑似拼写错误,正确应为AllowAnonymous,拼写错误会导致Azure AD无法识别该范围,修正后重试。
  • 验证托管身份的API权限配置:
    1. 进入Azure门户中MyApplication的应用注册页面
    2. 切换到「API权限」选项卡,点击「添加权限」→「我的API」,选中MyApplication
    3. 选择「应用权限」类型,勾选对应AllowAnonymous(或正确拼写的范围)权限,点击「添加权限」
    4. 点击「授予管理员同意」(租户级权限需管理员操作)
  • 确认运行环境支持托管身份:
    • 在Azure服务(如VM、AKS、App Service)运行时,需确保该服务已启用用户分配托管身份,且关联了你指定的身份
    • 本地测试时,需先通过Azure CLI登录(az login),且当前账号有权访问该托管身份
  • 核对Client ID与应用ID URI:
    • 确认代码中clientId是用户分配托管身份的客户端ID(而非对象ID/资源ID),可在Azure门户托管身份详情页查看
    • 确认范围中的api://axxxxxxxxxx与MyApplication的「应用ID URI」完全一致,无拼写或格式错误
  • 添加异常捕获排查具体错误:修改代码增加异常处理,获取详细错误信息,这是定位问题最直接的方式:
try
{
    string clientId = "XXXX";
    AccessToken token = await new DefaultAzureCredential(
        new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = clientId
        })
        .GetTokenAsync(
            new TokenRequestContext(
                new[] { "api://axxxxxxxxxx/AllowAnonymous" } // 修正拼写
            ));
}
catch (AuthenticationFailedException ex)
{
    Console.WriteLine($"认证失败: {ex.Message}");
    Console.WriteLine($"错误详情: {ex.Details}");
}
  • 指定目标租户(跨租户场景):如果MyApplication与托管身份不在同一Azure AD租户,需在TokenRequestContext中指定租户ID:
new TokenRequestContext(
    new[] { "api://axxxxxxxxxx/AllowAnonymous" })
{
    TenantId = "目标租户ID"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:43:29