多租户Django应用Azure AD认证异常:AuthCanceled错误排查
问题解决:外部租户Azure AD登录触发AuthCanceled及400 Token请求错误
问题核心
已部署的Django+Nginx+MySQL应用中,Azure认证、Graph/EWS邮件功能正常,开发/生产环境的redirect URI均可正常工作,但**外部租户账号(已添加至宿主AD并分配访问角色)**完成MFA后,在/social-auth/complete/azuread-oauth2/路径触发AuthCanceled异常(提示“Authentication process canceled”),同时请求https://login.microsoftonline.com/common/oauth2/token返回400 Bad Request错误。
配置问题分析(针对提供的aad.config.json)
给出的配置存在几个关键错误:
- authority路径错误:
client.authority不应指向token请求端点,而应是多租户的基础授权端点 - redirect_uri未配置:设置为
null会导致认证流程无法正确回调 - scopes为空:缺少基础认证所需的权限范围,导致token请求无效
修正后的配置示例
{ "type": { "client_type": "CONFIDENTIAL", "authority_type": "MULTI_TENANT", "framework": "DJANGO" }, "client": { "authority": "https://login.microsoftonline.com/common/" }, "auth_request": { "redirect_uri": "https://your-production-domain.com/social-auth/complete/azuread-oauth2/", "scopes": ["openid", "email", "profile"], "response_type": "code" }, "flask": null, "django": { "id_web_configs": "MS_ID_WEB_CONFIGS", "auth_endpoints": { "prefix": "auth", "sign_in": "sign_in", "edit_profile": "edit_profile", "redirect": "redirect", "sign_out": "sign_out", "post_sign_out": "post_sign_out" } } }
额外检查项
- 开发环境适配:将
redirect_uri替换为开发环境的地址,比如http://localhost:8000/social-auth/complete/azuread-oauth2/,确保和Azure AD应用注册中配置的redirect URI完全一致(包括协议、域名、路径) - Azure AD应用注册设置:确认应用的“账户类型”设置为任何组织目录中的账户和个人Microsoft账户,匹配配置中的
MULTI_TENANT类型 - 权限分配验证:外部租户账号在宿主AD中分配的角色需包含
User.Read等基础认证权限,确保能正常获取用户信息 - social-auth配置对齐:检查Django的social-auth配置中,Azure AD provider的
REDIRECT_URI是否和aad.config.json中的设置一致,避免回调路径冲突
内容的提问来源于stack exchange,提问作者Vinnie Esposito
相关产品推荐
相关产品推荐

