Flask部署Azure Webapp报AADSTS50011 重定向URI返回HTTP而非HTTPS
问题根因
这个问题和GitHub Actions部署流程无关,也不需要给Flask本身配置SSL证书。
Azure Web App的HTTPS终止是在平台前置负载均衡层完成的,公网HTTPS流量到了负载均衡之后,会被转成HTTP请求转发到后端运行Flask的实例。Flask默认不会识别代理转发的特殊请求头,生成Azure AD认证回调地址的时候会错误使用http协议,自然和AAD应用注册里配置的HTTPS重定向URI不匹配,触发AADSTS50011错误。你之前尝试加的ssl_context='adhoc'参数在生产环境完全无效:一方面Azure不会把公网流量直接打到Flask监听的端口,另一方面生产环境默认用gunicorn这类WSGI服务器托管应用,根本不会执行你写的app.run()逻辑。
修复步骤
- 配置Flask正确识别反向代理头
用werkzeug自带的ProxyFix中间件修正请求头识别逻辑,代码加在Flask实例初始化之后、所有路由注册之前:
配置完成后Flask会读取Azure负载均衡带过来的from werkzeug.middleware.proxy_fix import ProxyFix app = Flask(__name__) # 新增下面这行 app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1)X-Forwarded-Proto头,生成所有站内链接、回调地址的时候会自动匹配外部访问的HTTPS协议。 - 开启Azure Web App的HTTPS强制跳转
进入Azure Web App门户的「配置-常规设置」页,打开「HTTPS Only」开关,平台会自动把所有HTTP请求跳转到HTTPS地址,避免非加密访问。Azure默认会转发所有X-Forwarded-*系列代理头,不需要额外做站点配置修改。 - 清理无效配置
把app.run()里添加的ssl_context='adhoc'参数删掉,这个配置只在本地直接运行Flask调试服务器的时候生效,放到生产环境没有任何作用,反而可能引发启动异常。 - 校验AAD配置
确认AAD应用注册里配置的重定向URI格式为https://<你的站点域名>/getAToken,路径、域名、协议完全和代码里配置的回调地址一致,不要带多余后缀或斜杠。
补充说明
本地调试时localhost用HTTP能正常通过认证,是AAD对本地回环地址做了特殊放行,生产环境AAD会严格校验重定向URI的协议、域名、路径全匹配,只要Flask正确识别代理头,生成的回调地址就会和配置值匹配,不会再触发50011错误。不需要在GitHub Actions流程里加任何HTTPS相关配置,CI流程只负责代码构建和部署,HTTPS能力是Azure平台侧原生提供的。
内容的提问来源于stack exchange,提问作者Omar Moreira
相关产品推荐
相关产品推荐

