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

Azure DevOps管道单元测试中托管标识认证失败问题排查

问题排查:Azure DevOps管道中托管标识获取令牌失败

问题背景

单元测试通过Managed Identity生成令牌连接SQL数据库,核心代码如下:

string[] scope = new string[] { "https://database.windows.net/" };
var credential = new ManagedIdentityCredential(managedIdentityId);
var accessToken = await credential.GetTokenAsync(new TokenRequestContext(scope)); // 该行抛出异常
// ...
// 后续代码中这样使用令牌
SqlConnection connection = new SqlConnection(connectionString);
connection.AccessToken = accessToken.Token;
connection.Open();

执行await credential.GetTokenAsync(...)时抛出异常:

System.AggregateException: One or more errors occurred. ---> Azure.Identity.CredentialUnavailableException: ManagedIdentityCredential authentication unavailable. The requested identity has not been assigned to this resource.
Status: 400 (Bad Request)
Content:
{"error":"invalid_request","error_description":"Identity not found"}
Headers:
Content-Length: 68
Content-Type: application/json; charset=utf-8

已完成SQL数据库侧用户创建(CREATE USER <Azure_AD_principal_name> FROM EXTERNAL PROVIDER),且在sys.database_principals中能找到对应托管标识条目,OBJECTID与代码中使用的Managed Identity一致:

name    principal_id    type    type_desc   SID OBJECTID
MYSMI-Integration   6   E   EXTERNAL_USER   0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

疑问解答

1. 报错中的“Identity not found”指哪个身份?

这个错误指向的是代码中指定的managedIdentityId对应的托管标识。
原因是:调用ManagedIdentityCredential(managedIdentityId)时,请求使用该特定ID的托管标识获取令牌,但当前运行管道的代理环境无法找到或访问这个标识——可能是标识ID填写错误、标识本身不存在,或者代理所在资源(如自托管代理的VM)未被授予使用该标识的权限。
注意:这和Azure DevOps管道自身的服务身份(如管道服务连接的身份)无关,错误明确指向你代码里显式指定的托管标识。

2. Azure DevOps管道中使用Managed Identity是否受限?

分两种代理场景说明:

  • 微软托管代理:默认无关联用户分配的托管标识,无法直接访问自定义托管标识。若要使用,需通过Azure资源服务连接,结合AzurePowerShell/AzureCLI任务先获取令牌再传递给单元测试;或用AzureLogin任务登录到指定托管标识,让后续任务在该身份上下文下运行。
  • 自托管代理:若代理部署在Azure VM上,可给VM分配用户托管标识,此时单元测试代码可直接访问该标识(需确保代码中managedIdentityId与VM分配的标识ID一致)。同时要确认该标识已被添加到SQL数据库的对应角色(如db_datareader、db_datawriter),具备获取数据库令牌的权限。

额外注意:ManagedIdentityCredential构造函数接受的是标识的客户端ID、资源ID或对象ID,需确认传入的managedIdentityId格式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:43:15