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

基于Django与Azure AD的单点登录(SSO)架构实现咨询

Django + Azure AD 集中式SSO实现方案

1. 最佳架构设计

采用Azure AD作为统一身份提供者(IdP),三个Django应用作为独立的服务提供者(SP),基于OAuth2/OpenID Connect(OIDC)协议实现单点登录,核心架构要点:

  • 统一身份源:所有应用共享Azure AD作为唯一验证入口,用户一次登录即可访问所有授权的Django应用。
  • 独立应用注册:在Azure AD中为每个Django应用单独注册应用程序,获取专属的Client ID、Client Secret(或证书),并配置对应应用的重定向URI。
  • 本地会话+云端凭证:每个Django应用维护自身本地会话,身份验证凭证由Azure AD颁发(ID Token、Access Token),应用通过验证Token合法性确认用户身份。
  • 集中权限管控:利用Azure AD的角色、组功能分配用户对不同应用的访问权限,Django应用可解析ID Token中的角色声明,实现细粒度权限控制。

2. 推荐库与实用教程

推荐库

  • django-auth-adfs:专为Django集成Azure AD打造的库,封装了OIDC/ADFS验证逻辑,支持SSO、角色映射、Token刷新等核心功能,配置简洁高效。
  • django-allauth:通用第三方身份验证库,支持Azure AD作为OIDC提供者,灵活性强,适合需要同时集成多种身份源的场景。

实用教程(以django-auth-adfs为例)

步骤1:安装依赖

pip install django-auth-adfs

步骤2:Azure AD应用注册配置

  • 在Azure门户创建应用注册,记录Client ID、Tenant ID。
  • 配置重定向URI:例如https://your-django-app-1.com/adfs/callback/(每个应用对应自身的回调地址)。
  • 生成并保存Client Secret(或使用证书替代)。

步骤3:Django项目配置

在settings.py中添加以下配置:

INSTALLED_APPS = [
    # 原有应用
    'django_auth_adfs',
]

AUTHENTICATION_BACKENDS = [
    'django_auth_adfs.backend.AdfsAuthCodeBackend',
    'django.contrib.auth.backends.ModelBackend',  # 保留本地登录作为备选
]

AUTH_ADFS = {
    'CLIENT_ID': '你的Azure AD应用Client ID',
    'CLIENT_SECRET': '你的Azure AD应用Client Secret',
    'TENANT_ID': '你的Azure AD租户ID',
    'LOGIN_REDIRECT_URL': '/dashboard/',
    'LOGIN_URL': '/adfs/login/',
    'LOGOUT_REDIRECT_URL': '/',
}

在urls.py中添加路由:

urlpatterns = [
    # 原有路由
    path('adfs/', include('django_auth_adfs.urls')),
]

步骤4:验证SSO功能

  • 启动Django应用,访问/adfs/login/会跳转至Azure AD登录页面。
  • 登录成功后自动回调至应用,系统自动创建本地用户(若不存在)并建立会话。
  • 访问其他已注册的Django应用登录地址,会自动复用Azure AD登录会话,实现单点登录。

多应用SSO注意事项

  • 所有应用需注册在同一个Azure AD租户下。
  • 确保每个应用的重定向URI与Azure AD注册信息完全匹配。
  • 可通过Azure AD企业应用功能,统一管理所有Django应用的用户访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:55:38