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

Azure Web App Easy Auth与Python azure.identity SDK适配问题咨询

适配Easy Auth与Azure SDK的解决方案

你可以通过OnBehalfOfCredential实现两者的兼容,无需放弃Easy Auth或Azure SDK。核心思路是利用Easy Auth注入到请求头中的用户令牌,通过OBO(代表用户)流程获取Azure资源API的访问令牌,供SDK使用。

具体步骤

  • 提取请求头令牌:Easy Auth会在Web App的请求头中注入X-MS-TOKEN-AAD-ACCESS-TOKEN(用户的访问令牌),直接从当前请求中提取该值。
  • 初始化OnBehalfOfCredential:用你的应用注册信息(租户ID、客户端ID、客户端密钥/证书)加上提取到的用户令牌,创建凭证实例。Python示例代码如下:
from azure.identity import OnBehalfOfCredential
from azure.mgmt.compute import ComputeManagementClient

# 从请求头获取用户访问令牌
user_token = request.headers.get("X-MS-TOKEN-AAD-ACCESS-TOKEN")

# 创建OBO凭证
credential = OnBehalfOfCredential(
    tenant_id="你的Azure租户ID",
    client_id="Web App对应的应用注册客户端ID",
    client_secret="应用注册的客户端密钥",
    user_assertion=user_token
)

# 初始化SDK客户端(以虚拟机管理为例)
compute_client = ComputeManagementClient(credential, "你的订阅ID")
# 正常调用SDK方法,比如列出租户下所有VM
for vm in compute_client.virtual_machines.list_all():
    print(vm.name)
  • 配置必要权限:
    1. 给应用注册添加对应的委托权限(比如Microsoft.Compute/virtualMachines/read、Microsoft.Compute/virtualMachines/write等),并完成管理员同意。
    2. 在Web App的Easy Auth配置中,确保用户登录时请求了这些权限(配置认证设置里的“允许的令牌受众”和“权限范围”),保证拿到的用户令牌包含足够的scope。

为什么其他凭证不适用

  • DefaultAzureCredential:会尝试本地环境变量、CLI令牌等多种方式,和Web App上Easy Auth的代理认证场景不匹配,所以报错。
  • SharedTokenCacheCredential:依赖本地缓存的用户令牌,不适用于Web App后端的无状态场景。
  • AuthorizationCodeCredential:需要用户授权后的授权码,而Easy Auth已经完成了授权流程,没有授权码可供使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:53:19