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

Azure托管身份委托权限配置及用户模拟令牌获取咨询

Azure托管标识与委托权限相关问题解答

问题场景

我在Azure微服务场景中实施托管标识,负责的API-1已通过系统分配托管标识获取数据库等资源的访问权限,但该API需要通过委托的user_impersonation权限调用API-2获取数据。目前我已通过应用注册(ClientId/ClientSecret)实现了代表用户获取令牌的代码:

var builder = ConfidentialClientApplicationBuilder
    .Create(clientInformation.ClientId)
    .WithAuthority($"https://login.microsoftonline.com/{clientInformation.TenantId}")
    .WithClientSecret(clientSecret);

var userAssertion = new UserAssertion(currentAccessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer");

var application = builder.Build();
var onBehalfOfBuilder = application.AcquireTokenOnBehalfOf(scopes, userAssertion);
var authenticationResult = await onBehalfOfBuilder.ExecuteAsync(cancellationToken).ConfigureAwait(false);
return authenticationResult.AccessToken;

我们希望通过托管标识减少ClientSecret的使用,目前仅找到通过PowerShell脚本为托管标识配置应用权限的方法,因此有两个技术问题:

  1. 是否可以为托管标识分配委托权限?
  2. 尝试通过委托权限从后端API获取令牌是否存在概念错误?

问题解答

1. 是否可以为托管标识分配委托权限?

不行。托管标识是Azure AD中的特殊服务主体,仅支持配置应用权限(Application Permissions),无法分配委托权限(Delegated Permissions)。委托权限的核心是代表终端用户发起请求,而托管标识没有关联的终端用户身份,它本身就是独立的服务身份,因此Azure AD不支持为其配置委托权限。

2. 尝试通过委托权限从后端API获取令牌是否存在概念错误?

需结合业务场景判断:

  • 如果API-1确实需要代表终端用户调用API-2(比如要携带用户身份信息、权限上下文),那么使用On-Behalf-Of(OBO)流程+委托权限是正确设计,但这种场景下无法用托管标识替代ClientSecret——因为OBO流程要求调用方(API-1)必须是具备客户端凭据的应用注册,托管标识没有支持OBO流程的客户端凭证机制。
  • 如果API-1不需要代表用户,仅以自身服务身份调用API-2,那应该为API-2配置应用权限,让API-1的托管标识获取带有应用权限的令牌即可,这种场景不需要委托权限,用托管标识完全可行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:41:11