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

C# Azure/Entra ID认证API:管理员能否模拟其他用户获取Bearer Token

可行,无需重写现有应用,具体实现方案如下

你的需求完全可以实现,而且不需要修改现有依赖HttpContext.User的代码——因为模拟生成的Bearer Token会携带目标用户的完整身份信息,API验证令牌后会自动将HttpContext.User填充为目标用户的身份。

核心原理与配置

要实现管理员模拟其他用户,需要依赖Entra ID的**令牌交换(Token Exchange)机制,配合用户模拟(User Impersonation)**权限完成:

  1. 权限配置

    • 在Entra ID的应用注册中,为你的API/前端应用添加User Impersonation委托权限(可选择Microsoft Graph权限或自定义API权限,根据令牌受众确定)。
    • 将该权限分配给管理员用户(或其所在的安全组),确保管理员拥有模拟其他用户的权限。
  2. 具体步骤

    • 管理员先通过正常流程(授权码/PKCE)完成登录,获取自身的访问令牌bearer1(该令牌必须包含User Impersonation权限的scope)。
    • 调用Entra ID的令牌端点,用bearer1交换目标用户的访问令牌bearer2。

使用的端点与请求参数

令牌端点

https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token

请求参数(POST表单格式)

  • grant_type: urn:ietf:params:oauth:grant-type:token-exchange
  • client_id: 你的应用注册ID
  • client_secret: 应用密钥(仅机密客户端需提供,比如后端API;前端应用用PKCE时无需此参数)
  • subject_token: 管理员的访问令牌bearer1
  • subject_token_type: urn:ietf:params:oauth:token-type:access_token
  • requested_token_type: urn:ietf:params:oauth:token-type:access_token
  • requested_subject: 目标用户的UPN(如user2@domain.tld)或对象ID
  • resource: 目标API的受众URI(如api://your-api-client-id,即API应用注册的标识符)

注意事项

  • 管理员的原始令牌必须包含User Impersonation权限,否则交换请求会被Entra ID拒绝。
  • 前端应用(React/Angular)需要添加令牌交换的逻辑:管理员选择目标用户后,触发交换请求,将返回的bearer2替换当前会话的令牌,后续所有请求使用新令牌即可。
  • 模拟生成的令牌有效期与正常令牌一致,到期后需重新执行交换流程。

内容的提问来源于stack exchange,提问作者Michiel van Vaardegem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:31:27