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

如何使用证书和MSAL保护Flask应用 解决Azure AD回调URL协议错误

问题解决方法

问题根源为Nginx反向代理与后端uWSGI/Flask服务间走HTTP协议,Flask默认会以本地收到的请求协议生成回调地址,导致发送到Azure的redirect_uri为HTTP格式,和Azure后台配置的HTTPS回调地址不匹配,按以下步骤逐一配置即可修复:

  • 第一步:配置Nginx反向代理透传协议和域名信息
    打开你站点的Nginx配置文件,在处理Flask请求的location块中补充以下请求头配置,将外部真实的请求协议、域名信息传递给后端服务:

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/path/to/your/uwsgi.sock; # 替换为你实际的uwsgi套接字路径
        # 新增以下配置
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        uwsgi_param HTTP_X_FORWARDED_PROTO $scheme;
    }
    

    配置保存后执行nginx -s reload重载配置。

  • 第二步:配置Flask信任代理头
    安装ProxyFix中间件处理反向代理透传的头信息,在你的Flask启动文件中添加以下代码:

    from werkzeug.middleware.proxy_fix import ProxyFix
    
    # 你的原有app初始化代码
    app = Flask(__name__)
    
    # 新增ProxyFix配置,x_proto=1代表信任1层反向代理传递的协议头
    app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)
    

    配置完成后重启uWSGI服务。

  • 第三步(可选,兜底方案):手动指定redirect_uri
    如果前两步配置后仍有问题,可直接在调用MSAL生成认证链接的代码中硬编码回调地址,不需要自动生成:
    找到你生成登录跳转链接的代码,将原来的自动生成回调地址的逻辑替换为你在Azure后台配置的HTTPS地址即可,示例:

    # 原来的自动生成逻辑(可能是这样)
    # redirect_uri = url_for("getAtoken", _external=True)
    # 替换为硬编码的HTTPS回调地址
    redirect_uri = "https://<你的服务器地址>/getAtoken"
    
    # 后续构造auth url的逻辑不变
    auth_url = msal_app.get_authorization_request_url(
        scopes=...,
        redirect_uri=redirect_uri
    )
    

配置全部完成后清理浏览器缓存,重新触发登录流程即可解决AADSTS50011报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:00