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

使用组织账户从Excel/PowerBI访问Flask应用的认证报错问题

解决方案:修复Excel连接Flask应用的Bearer认证报错

1. 问题核心原因

Excel/Power Query使用Bearer认证时,要求WWW-Authenticate响应头必须明确指定资源标识(对应Azure应用的Application ID URI)。缺少这个标识,Power Query无法向Azure请求匹配的访问令牌,最终导致认证失败。

2. 步骤1:在Azure门户配置Application ID URI

  • 登录Azure门户,进入Azure Active Directory → 应用注册,找到你的目标应用
  • 切换到概述页面,找到「Application ID URI」区域,点击「添加URI」
    • 本地测试场景:可设置为api://localhost或api://{你的应用客户端ID}(客户端ID在概述页面可直接查看)
    • 线上服务场景:设置为与API域名匹配的URI,比如https://your-api-domain.com
  • 保存配置

3. 步骤2:修正Flask的响应头配置

更新after_request函数,在WWW-Authenticate头中添加resource(或scope,适配OAuth2 v2端点)参数,值为你刚在Azure配置的Application ID URI:

from flask import Flask, Response

app = Flask(__name__)

@app.after_request
def after(response: Response):
    # 替换为你在Azure中配置的Application ID URI
    app_id_uri = "api://your-app-client-id"
    # 针对OAuth2 v1端点使用resource参数
    response.headers["WWW-Authenticate"] = f"Bearer authorization_uri=https://login.microsoftonline.com/common/oauth2/v2.0/authorize, resource={app_id_uri}"
    # 若使用Azure AD v2端点,推荐改用scope参数:
    # response.headers["WWW-Authenticate"] = f"Bearer authorization_uri=https://login.microsoftonline.com/common/oauth2/v2.0/authorize, scope={app_id_uri}/.default"
    return response

# 示例API端点
@app.route("/data")
def get_data():
    # 此处添加令牌验证逻辑,验证失败时返回401状态码
    # ...
    return "Excel可读取的数据内容", 200

if __name__ == "__main__":
    app.run(debug=True)

4. 关键说明

  • resource/scope参数的值必须和Azure中配置的Application ID URI完全一致,否则Azure不会颁发正确的访问令牌
  • 使用Azure AD v2端点时,scope={app_id_uri}/.default会请求应用所有已配置的静态权限,更适配现代认证流程
  • 必须确保401响应中包含完整的WWW-Authenticate头,否则Excel无法识别并启动认证流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:52:43