Flask经gunicorn+nginx部署后向Azure AD发HTTP地址报AADSTS50011错误如何解决?
问题根因
你的场景属于Nginx反向代理HTTPS请求后,后端Flask应用未正确识别原始请求的协议:Nginx对外提供HTTPS服务,但和后端Gunicorn/Flask应用之间走的是HTTP协议,Flask默认根据当前收到的请求协议生成回调地址,最终传给Azure AD的重定向URI就变成了HTTP格式,和你在Azure注册的HTTPS回调地址不匹配,触发AADSTS50011错误。
修复步骤
1. 修正Nginx反向代理配置
在Nginx的location /配置块中新增X-Forwarded-Proto请求头,将原始请求的协议传递给后端应用,修改后配置如下:
location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 新增以下行传递原始请求协议 proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:8000; proxy_redirect off; }
修改后执行nginx -s reload生效配置。
2. 配置Flask信任代理头
需要给Flask添加配置,允许应用读取代理传递的X-Forwarded-*头识别原始请求信息,在你的应用启动代码(如app.py)中添加以下配置:
from flask import Flask from werkzeug.middleware.proxy_fix import ProxyFix app = Flask(__name__) # 新增ProxyFix中间件处理代理头 app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1) # 强制URL生成使用HTTPS协议 app.config['PREFERRED_URL_SCHEME'] = 'https'
如果你的应用使用示例项目的默认配置,也可以直接在app_config.py中追加上述配置项。
可选:直接手动指定重定向地址
如果不想修改代理和应用配置,可以直接在调用MSAL认证流程的代码中手动写死完整的HTTPS回调地址,避免自动生成协议错误:
找到项目中调用initiate_auth_flow的位置,显式传入redirect_uri参数:
result = msal_app.initiate_auth_flow( scopes=SCOPE, redirect_uri="https://myserver.mycompany.com/getAToken", # 其余原有参数保持不变 )
额外注意项
你贴出的systemd服务配置文件中,Environment行末尾缺少闭合引号,修正后如下:
Environment="PATH=/home/myuser/ms-identity-python-webapp-master/msflaskenv/bin"
修改后执行systemctl daemon-reload再重启服务生效。
内容的提问来源于stack exchange,提问作者itinneed
相关产品推荐
相关产品推荐

