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

如何在FastAPI应用中通过fastapi_msal将重定向URI从HTTP改为HTTPS?

FastAPI + Azure AD认证:解决重定向URI HTTP转HTTPS问题

问题背景

用FastAPI搭建Web应用,通过fastapi_msal实现Azure AD认证。登录后系统提示重定向URI以HTTP开头,但Azure要求非本地场景下必须用HTTPS开头。项目代码与ms-identity-python-webapp示例基本一致,已知Flask项目可通过ProxyFix解决该问题,求FastAPI的实现方式。

解决方案

FastAPI基于Starlette(ASGI框架),可通过以下两种方式让应用识别反向代理后的实际HTTPS协议,生成合规的重定向URI:

方法1:使用Starlette原生ForwardedMiddleware

Starlette自带的中间件可处理反向代理传递的头信息,自动识别请求协议:

from fastapi import FastAPI
from starlette.middleware.forwarded import ForwardedMiddleware

app = FastAPI()

# 添加中间件,信任反向代理传递的协议与主机头
# 注意:trusted_hosts建议设置为你的实际域名,而非通配符,避免安全风险
app.add_middleware(ForwardedMiddleware, trusted_hosts=["your-domain.com"])

方法2:适配Werkzeug的ProxyFix

如果偏好Flask的实现思路,可将FastAPI的ASGI应用转为WSGI后使用ProxyFix,再转回ASGI:

from fastapi import FastAPI
from werkzeug.middleware.proxy_fix import ProxyFix
from asgiref.wsgi import WsgiToAsgi

app = FastAPI()

# 转换应用类型并应用ProxyFix
wsgi_app = WsgiToAsgi(app)
app = ProxyFix(wsgi_app, x_proto=1, x_host=1)

必要配置前提

无论使用哪种方法,都需要确保你的反向代理(如Nginx、Azure App Service等)已配置传递以下头信息:

  • X-Forwarded-Proto:传递实际请求的协议(HTTPS)
  • X-Forwarded-Host:传递实际请求的主机名

以Nginx为例,需在代理配置中添加:

proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;

完成配置后,fastapi_msal生成的重定向URI会自动使用HTTPS协议,符合Azure的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:05:25