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

启用后端应用注册用户分配后Azure User Impersonation失效求助

Azure应用注册启用用户/组分配后User_impersonation失效问题解决

问题背景

我拥有两个Azure应用注册:一个用于后端,一个用于前端,配置如下:

  • 后端应用注册:已暴露名为User_impersonation的权限范围
  • 前端应用注册:已添加上述User_impersonation权限,且启用了用户/组分配功能,指定一个安全组,仅允许该组成员访问前端

此前用户通过前端应用注册获取的访问令牌请求前端时,前端可正常向后端请求令牌并转发用户请求。但在后端应用注册也启用用户/组分配(添加同一安全组)后,前端无法调用后端,User_impersonation功能失效,请求超时无响应。

相关代码如下:

客户端请求前端代码

from azure.identity import DefaultAzureCredential, ClientSecretCredential

authority="https://login.microsoftonline.com/{TENANT_ID}/v2.0"

credential = DefaultAzureCredential(authority=authority, exclude_shared_token_cache_credential=True)
scope = "api://{frontend_clientid}/.default"
minerva_webapp_access_token = credential.get_token(scope).token

前端请求后端代码

credential = ClientSecretCredential(
    tenant_id=TENANT_ID,
    client_id=WEBAPP_CLIENT_ID,
    client_secret=webapp_client_secret)
scope = "api://{minerva_python39_backend_app_client_id}/.default".format(
                    minerva_python39_backend_app_client_id=MINERVA_PYTHON39_CLIENTID)

access_token = credential.get_token(scope).token

解决方案

核心原因

后端启用用户/组分配后,前端使用ClientSecretCredential的客户端凭据流获取后端令牌时,未携带用户上下文,导致后端的分配验证无法识别用户所属安全组,进而拦截请求。

1. 切换为On-Behalf-Of(OBO)流程获取后端令牌

前端需基于收到的用户令牌,通过OBO流程申请带有用户上下文的后端访问令牌,这样后端才能验证用户是否属于允许的安全组。修改前端请求后端的代码:

from azure.identity import OnBehalfOfCredential

# 前端接收的用户令牌(即客户端请求时传入的minerva_webapp_access_token)
user_access_token = "<客户端传入的用户访问令牌>"

# 初始化OBO凭据
obo_credential = OnBehalfOfCredential(
    tenant_id=TENANT_ID,
    client_id=WEBAPP_CLIENT_ID,
    client_secret=webapp_client_secret,
    user_assertion=user_access_token
)

# 指定User_impersonation权限的scope,不要使用.default
backend_scope = f"api://{MINERVA_PYTHON39_CLIENTID}/User_impersonation"
backend_access_token = obo_credential.get_token(backend_scope).token

2. 确认后端应用注册配置

  • 确保后端User_impersonation权限的“同意权限”设置为允许管理员或用户同意(已配置的话可忽略)
  • 确认后端应用注册的用户/组分配中,目标安全组已正确添加,且组内包含所有需要访问后端的用户

3. 验证后端令牌有效性

使用JWT解析工具检查后端令牌:

  • groups声明需包含目标安全组的ID
  • scp声明需包含User_impersonation
  • oid声明对应用户的Object ID

4. 后端验证逻辑检查

确保后端在验证令牌时执行以下步骤:

  1. 验证令牌的签名、过期时间等基本有效性
  2. 检查scp声明是否包含User_impersonation权限
  3. 验证用户所属groups是否在允许的安全组列表中(或调用Microsoft Graph API查询用户组信息)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:04:58