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

Django集成Microsoft认证时出现重定向URI不匹配错误

Django Auth ADFS 重定向URI不匹配问题排查与解决

问题描述

在Azure Web App部署的Django应用中使用django_auth_adfs集成Microsoft认证时,遭遇重定向URI不匹配错误。已按官方文档在Azure门户注册应用并添加http://localhost:8000/oauth2/callback到Web重定向URL列表,但认证时收到如下错误:

The redirect URI 'http://127.0.0.1:8000/oauth2/callback' specified in the request does not match the redirect URIs configured for the application. Make sure the redirect URI sent in the request matches one added to your application in the Azure portal.

相关Django配置(settings.py):

INSTALLED_APPS = [
    ...
    'django_auth_adfs',
]

MIDDLEWARE = [
    ...
    'django_auth_adfs.middleware.LoginRequiredMiddleware',
]

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'django_auth_adfs.backend.AdfsAccessTokenBackend',
]

LOGIN_REDIRECT_URL = '/'
LOGIN_URL = 'django_auth_adfs:login' 
LOGOUT_REDIRECT_URL = '/'

# django-auth-adfs settings
AUTH_ADFS = {
    'AUDIENCE': config('MICROSOFT_AUTH_CLIENT_ID'),
    'CLIENT_ID': config('MICROSOFT_AUTH_CLIENT_ID'),
    'CLIENT_SECRET': config('MICROSOFT_AUTH_CLIENT_SECRET'),
    'CLAIM_MAPPING': {'first_name': 'given_name', 'last_name': 'family_name', 'email': 'upn'},
    'GROUPS_CLAIM': 'roles', # or None
    'MIRROR_GROUPS': True,
    'USERNAME_CLAIM': 'upn',
    'TENANT_ID': config('MICROSOFT_AUTH_TENANT_ID'),
    'RELYING_PARTY_ID': config('MICROSOFT_AUTH_CLIENT_ID'),
}
ADFS_REDIRECT_URI = 'http://localhost:8000/oauth2/callback'

核心原因

Azure AD对重定向URI采用严格的字符串匹配规则,http://localhost:8000/oauth2/callback和http://127.0.0.1:8000/oauth2/callback会被判定为两个完全不同的URI。本地开发时,Django默认启动服务绑定127.0.0.1,导致请求中发送的重定向URI以127.0.0.1开头,与Azure配置的localhost版本不匹配。

解决步骤

1. 补充Azure门户的重定向URI

登录Azure门户,找到目标应用注册,在「管理」→「认证」→「Web」平台下,添加http://127.0.0.1:8000/oauth2/callback到重定向URL列表,保存更改。

2. 调整Django配置匹配请求域名

  • 本地开发场景:

    • 方案一:修改ADFS_REDIRECT_URI为http://127.0.0.1:8000/oauth2/callback,与请求发送的URI保持一致。
    • 方案二:启动Django服务时指定绑定localhost,执行命令:
      python manage.py runserver localhost:8000
      
      此时请求中的域名会是localhost,匹配已配置的重定向URI。
  • 生产部署(Azure Web App)场景:

    • 在Azure门户添加生产环境重定向URI:https://<你的WebApp名称>.azurewebsites.net/oauth2/callback
    • 修改Django配置中的ADFS_REDIRECT_URI为生产环境地址,或直接移除该配置项,让django_auth_adfs自动从请求中推导(需确保Django能正确识别外部请求域名)。同时添加以下配置处理Azure反向代理的请求头:
      SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
      ALLOWED_HOSTS = ['<你的WebApp名称>.azurewebsites.net']
      

3. 额外检查项

  • 确认重定向URI添加在「Web」平台下,而非单页应用、移动应用等其他平台。
  • 清除浏览器缓存和Cookie,避免旧认证会话残留导致的URI不匹配。
  • 检查ALLOWED_HOSTS配置,确保包含本地开发的localhost、127.0.0.1或生产环境的域名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:13:20