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

使用django-microsoft-auth对接Azure AD SSO出现AADSTS90102错误如何解决

问题成因

  • 反向代理链路(NGINX → uvicorn)传递的X-Forwarded-Proto请求头存在重复值:请求经过NGINX转发时,若未主动清理客户端传入的同名头,新增的协议值会和原始值通过逗号拼接为https,https
  • django-microsoft-auth 2.4.0版本生成重定向URI时,直接读取了该拼接后的异常协议值作为URI前缀,最终生成https,https://example.org/microsoft/auth-callback/格式的非法重定向地址,触发Azure接口校验报错。

解决办法

1. 修正NGINX反向代理配置

在站点的NGINX配置块的location /段强制覆盖转发头,避免继承客户端传入的非法头导致值拼接:

location / {
    proxy_pass http://127.0.0.1:8000; # 替换为你实际的uvicorn监听地址
    proxy_set_header Host $host;
    # 强制设置协议头,不继承原始请求的X-Forwarded-Proto值
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    # 清空客户端传入的X-Forwarded-Host头,防止伪造或拼接
    proxy_set_header X-Forwarded-Host "";
}

修改后执行nginx -s reload重载配置生效。

2. 修正Django配置

在项目settings.py中添加以下配置,让Django信任反向代理传递的头信息:

# 配置SSL协议头校验规则
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# 允许读取反向代理传递的Host头
USE_X_FORWARDED_HOST = True

3. 修正uvicorn启动参数

启动uvicorn时添加允许转发IP的配置,避免uvicorn忽略NGINX传递的代理头:

uvicorn 你的项目名.asgi:application --forwarded-allow-ips="*"

若使用systemd等托管服务,将上述参数添加到启动命令中即可。

备选兼容方案

若以上配置后问题仍未解决,可在settings.py中硬编码指定重定向地址,覆盖库的自动生成逻辑:

MICROSOFT_AUTH_REDIRECT_URI = "https://example.org/microsoft/auth-callback/"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:09:01