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

使用ManagedIdentityCredential获取用户分配托管身份令牌遇400错误排查

问题:Azure App Service中使用用户分配托管身份获取令牌时请求缺失client_id参数

我有一个配置了用户分配托管身份(已禁用系统分配托管身份)的Azure App Service。在ASP.NET Core Web应用中使用ManagedIdentityCredential获取访问令牌时抛出异常,依赖遥测显示托管身份端点返回400 Bad Request。

调用凭据对象的代码如下:

var clientID = "<user-assigned-identity-client-id>";
var resourceUrl = "https://<resource-to-be-accessed>";

var credential = new ManagedIdentityCredential(clientID);
var context = new TokenRequestContext(new[] { resourceUrl });
return (await credential.GetTokenAsync(context)).Token;

这段代码严格遵循官方文档示例。

遥测显示执行代码时,发送到令牌端点的请求为:

http://127.0.0.1:41776/msi/token/?api-version=2019-08-01&resource=REDACTED

根据REST端点参考文档,该请求应包含client_id查询参数,但实际并未包含。

令人困惑的是:

  • 本地设置与生产环境相同的环境变量模拟运行时,请求Uri包含预期的client_id参数:
http://127.0.0.1:41776/msi/token/?api-version=2019-08-01&resource=https%3A%2F%2F<resource>&client_id=<client-id>
  • 在Azure门户的App Service控制台中发送包含client_id的请求,令牌端点能正常返回有效令牌:
curl -H "X-IDENTITY-HEADER: <header-secret>" -i -s -X GET "http://127.0.0.1:41776/msi/token/?api-version=2019-08-01&resource=https%3A%2F%2F<resource>&client_id=<client-id>"

为何ManagedIdentityCredential类在生产环境中不发送client_id?显然包含该参数就能正常工作。


更新说明

该代码实际可正常工作,问题出在代码中另一处未传入client_id的地方,导致仍能看到“异常”遥测,我错误将其归因于正在修改的代码。留存此内容供他人参考实现方式与验证方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:22:29