基于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
相关产品推荐
相关产品推荐

