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或公共客户端类型
- 登录Azure Portal,找到对应应用
验证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未被篡改
- 开启Django调试模式,在浏览器跳转至Azure登录页前,查看地址栏中的
排查域名与端口的一致性
- 本地开发时确保使用
http://127.0.0.1:8000访问应用,而非localhost:8000,两者在Azure AD中被视为不同的重定向URI - 若使用反向代理或自定义端口,需保证Azure配置的重定向URI与实际访问的地址完全匹配
- 本地开发时确保使用
确认应用注册类型与权限配置
- 检查应用注册的类型为“Web”,单页应用或公共客户端的重定向URI规则与Web应用不同
- 确认“API权限”中已添加必要的权限(如
User.Read),并完成管理员授权(若需要)
内容的提问来源于stack exchange,提问作者Elman Seferli
相关产品推荐
相关产品推荐

