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

Django对接Azure AD出现AADSTS50011重定向URI不匹配错误求助

Django对接Azure AD时AADSTS50011错误排查方案

在严格遵循文档配置Django与Azure AD认证对接时,触发AADSTS50011错误:请求中指定的重定向URI http://127.0.0.1:8000/oauth2/callback 与应用456b3ef5-cdbe-4d58-aa7b-69f95fffac29配置的重定向URI不匹配。

我的Django项目settings.py配置如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites', 

    'django_auth_adfs',
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
    # third party 
    'django_auth_adfs.middleware.LoginRequiredMiddleware',
]

AUTHENTICATION_BACKENDS = (
    'django_auth_adfs.backend.AdfsAuthCodeBackend',
    'django_auth_adfs.backend.AdfsAccessTokenBackend',
)


# Microsoft Azure AD configuration
AZURE_CLIENT_ID = os.environ.get('AZURE_CLIENT_ID')
AZURE_TENANT_ID = os.environ.get('AZURE_TENANT_ID')
AZURE_CLIENT_SECRET = os.environ.get('AZURE_CLIENT_SECRET')
AZURE_REDIRECT_URI = os.environ.get('AZURE_REDIRECT_URI')
AZURE_AUTHORITY = os.environ.get('AZURE_AUTHORITY')
AZURE_SCOPES = os.environ.get('AZURE_SCOPES').split()

AUTH_ADFS = {
    'AUDIENCE': [f'api://{AZURE_CLIENT_ID}', AZURE_CLIENT_ID],
    'CLIENT_ID': AZURE_CLIENT_ID,
    'CLIENT_SECRET': AZURE_CLIENT_SECRET,
    'CLAIM_MAPPING': {'first_name': 'given_name',
                      'last_name': 'family_name',
                      'email': 'upn'},
    'GROUPS_CLAIM': 'roles',
    'MIRROR_GROUPS': True,
    'USERNAME_CLAIM': 'upn',
    'TENANT_ID': AZURE_TENANT_ID,
    'RELYING_PARTY_ID': AZURE_CLIENT_ID,
    'LOGIN_EXEMPT_URLS': [
        '^api',  
    ],
}


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

以下是可能的故障点及排查方向:

  • 核对Azure AD应用注册的重定向URI

    • 登录Azure Portal,找到对应应用456b3ef5-cdbe-4d58-aa7b-69f95fffac29的注册页面,确认“管理”>“身份验证”下已添加完全一致的重定向URI:http://127.0.0.1:8000/oauth2/callback,注意区分HTTP/HTTPS、域名(127.0.0.1与localhost不通用)、端口号
    • 确保重定向URI的类型选择为Web,不要误选SPA或公共客户端类型
  • 验证Django环境变量与配置参数

    • 检查环境变量AZURE_REDIRECT_URI是否正确设置为目标地址,可通过Django Shell执行import os; print(os.environ.get('AZURE_REDIRECT_URI'))确认值是否准确
    • 确认AUTH_ADFS配置中是否显式指定了REDIRECT_URI参数,若未指定,需补充该参数并指向http://127.0.0.1:8000/oauth2/callback
  • 检查实际请求中的重定向URI参数

    • 开启Django调试模式,在浏览器跳转至Azure登录页前,查看地址栏中的redirect_uri参数,确认其与报错信息中的地址完全一致
    • 使用浏览器开发者工具(F12)查看网络请求,追踪认证发起时的参数,确认redirect_uri未被篡改
  • 排查域名与端口的一致性

    • 本地开发时确保使用http://127.0.0.1:8000访问应用,而非localhost:8000,两者在Azure AD中被视为不同的重定向URI
    • 若使用反向代理或自定义端口,需保证Azure配置的重定向URI与实际访问的地址完全匹配
  • 确认应用注册类型与权限配置

    • 检查应用注册的类型为“Web”,单页应用或公共客户端的重定向URI规则与Web应用不同
    • 确认“API权限”中已添加必要的权限(如User.Read),并完成管理员授权(若需要)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:27:26