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

运行于IaaS的Django Web应用如何实现Azure AD身份认证

Django 应用接入 Azure AD 身份认证落地方案

一、Azure AD 租户侧前置配置

  • 登录企业所属的Azure AD管理中心,新建应用注册:填写应用自定义名称,重定向URI选择「Web」类型,填写你的应用回调地址,格式为https://<你的应用公网域名>/azure/callback/,本地调试阶段可以额外添加http://localhost:8000/azure/callback/作为测试回调地址。
  • 应用注册完成后,复制三个核心参数留存:应用程序(客户端)ID、目录(租户)ID,后续Django配置需要用到。
  • 进入应用的「证书和密码」页面,新建客户端密钥,根据企业安全要求设置过期时间,密钥生成后立刻复制保存,页面关闭后无法再次查看密钥值。
  • 进入「API权限」页面,添加Microsoft Graph的委托权限User.Read,配置完成后点击「授予管理员同意」,避免普通用户登录时弹出无意义的权限申请提示。
  • 如果需要限制仅企业自有租户内的账号可登录,直接在应用「身份验证」页将「支持的账户类型」设置为「仅此组织目录中的账户」即可,无需额外写域名校验逻辑。

二、Django 应用侧改造

  • 先安装适配依赖:执行pip install django-auth-azure-ad,这个库完全适配Django原生认证体系,不用自己手写OAuth2全流程逻辑,减少出bug概率。
  • 修改项目settings.py配置:
    生产环境不要把密钥类参数硬编码在代码里,通过服务器环境变量读取,避免代码泄露引发安全问题
INSTALLED_APPS = [
    # 保留原有已配置的app
    'azure_ad',
]

# 保留原有ModelBackend,方便本地超级用户后台登录
AUTHENTICATION_BACKENDS = (
    'azure_ad.backends.AzureADBackend',
    'django.contrib.auth.backends.ModelBackend',
)

# 替换为你之前从Azure AD后台复制的对应参数
AZURE_AD_CLIENT_ID = "从Azure后台复制的客户端ID"
AZURE_AD_CLIENT_SECRET = "生成的客户端密钥值"
AZURE_AD_TENANT_ID = "从Azure后台复制的租户ID"
# 登录成功后默认跳转的首页地址
LOGIN_REDIRECT_URL = "/"
# 未登录访问受保护页面时,自动跳转到Azure AD登录入口
LOGIN_URL = "/azure/login/"
  • 修改项目根路由文件urls.py,加入Azure AD的认证路由:
from django.urls import path, include

urlpatterns = [
    # 保留原有业务路由
    path('azure/', include('azure_ad.urls')),
]
  • 业务视图的权限控制直接复用Django原生的login_required装饰器即可,所有需要登录后才能访问的视图加上该装饰器后,用户未登录访问时会自动跳转至Azure AD登录页,认证通过后自动回跳至原访问页面。
  • 用户首次通过Azure AD登录时,插件会自动在Django本地的auth_user表创建对应用户,默认用户名为Azure AD内的用户邮箱。如果需要同步用户部门、岗位、权限组等额外信息,可以写一个信号接收器监听user_logged_in信号,调用Graph接口拉取对应字段同步到本地用户表即可。

三、IaaS 服务器侧适配

  • 因为应用部署在自管IaaS服务器上,不需要额外做特殊网络打通,只要保证服务器出方向可以正常访问Azure AD的登录端点、Microsoft Graph接口即可,入方向仅需要开放应用Web服务端口给终端用户访问。
  • 如果IaaS服务器前挂了Nginx等反向代理,记得在反向代理配置中添加HTTPS头透传,避免回调时出现HTTP/HTTPS协议不匹配的报错,Nginx对应配置参考:
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
  • 生产环境必须给域名配置合法HTTPS证书,Azure AD的OAuth2认证流程不接受HTTP协议的回调地址(本地localhost调试除外)。

四、效果验证

  • 配置部署完成后,直接访问任意加了登录校验的业务页面,会自动跳转至企业Azure AD统一登录页。
  • 用户输入企业域账号完成校验后,会自动回跳至原访问的业务页面,全程不需要应用侧处理密码校验逻辑,认证有效性完全由Azure AD保障。
  • 如果需要做细粒度权限控制(比如仅特定部门、特定用户组可以访问某些模块),可以在登录回调环节拉取用户的Azure AD组信息,同步到Django原生权限体系中,后续视图直接复用Django原生的权限判断逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:42:29