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

使用用户分配托管身份获取AccessToken时遇身份未找到错误求助

排查托管身份获取Token失败的问题

针对你遇到的No user-assigned or delegated managed identity found for specified ClientId/ResourceId/PrincipalId错误,结合你的场景(本地账号可正常获取,已分配角色),可以从以下几个方向排查:

  • 确认托管身份与运行环境的关联状态
    如果代码部署在Azure服务(如App Service、VM、Function App等)中,务必检查服务的身份配置:

    1. 进入对应服务的Azure门户页面,找到「身份」选项
    2. 切换到「用户分配的身份」标签,确认目标托管身份已被添加,且状态为「已启用」
    3. 若为本地调试时尝试使用托管身份,需通过Azure CLI登录对应账号,并设置环境变量AZURE_CLIENT_ID为目标托管身份的ClientId,或在Visual Studio的「Azure服务认证」中选择该托管身份
  • 验证ClientId的准确性
    前往Azure AD的「企业应用程序」页面,搜索目标托管身份的名称,核对「应用程序(客户端)ID」是否与代码中传入的clientId完全一致——避免误将托管身份的对象ID、租户ID当作ClientId传入。

  • 检查环境变量与Credential配置冲突
    DefaultAzureCredential会按优先级尝试多种认证源,若环境中存在AZURE_CLIENT_ID以外的相关变量(如AZURE_MANAGED_IDENTITY_CLIENT_ID),可能干扰认证逻辑。可以尝试替换为ManagedIdentityCredential单独测试,排除其他认证源的影响:

    private static async Task<string> GetJwtTokenUsingManagedIdentity(string clientId, string tenantId)
    {
        string resource = "https://management.azure.com/.default";
        var credential = new ManagedIdentityCredential(clientId);
        var tokenRequestContext = new Azure.Core.TokenRequestContext(new[] { resource });
        var token = await credential.GetTokenAsync(tokenRequestContext);
        return token.Token;
    }
    
  • 复核角色分配的有效性
    虽然你已分配角色,仍需确认:

    1. 角色分配的主体是目标托管身份的对象ID(而非ClientId或其他身份)
    2. 角色的作用域(订阅、资源组等)覆盖了你要访问的Azure资源
    3. 角色权限包含https://management.azure.com/相关的操作(如Reader、Contributor等)
  • 排查Azure服务的托管身份基础配置
    部分Azure服务需确保托管身份相关组件正常运行:比如VM/VMSS需确认托管身份扩展已正常安装;App Service需确保服务计划的权限足够加载托管身份配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:06:07