认证与单点登录(SSO)配置
平台支持多种登录方式,全部由 myapp/views/view_login.py 实现,配置集中在 myapp/config.py。
默认是账号密码登录(/login/db,密码不匹配时可回退 LDAP bind);另支持 6 种第三方单点登录。
各端点细节、回调流程与自动注册逻辑以 myapp/views/view_login.py、myapp/config.py 为准。
支持的登录方式
| 方式 | 登录入口 | 对应视图类 | 配置块 |
|---|---|---|---|
| 账号密码(+LDAP 兜底) | /login/db |
Myauthdbview |
AUTH_LDAP_* |
| OAuth2 / OIDC | /login/oauth2/ |
OAuth2LoginView |
OAUTH2_* |
| CAS | /login/cas/ |
CASLoginView |
CAS_* |
| 飞书 | /login/feishu/ |
FeishuLoginView |
FEISHU_* |
| 企业微信 | /login/wecom/ |
WeComLoginView |
WECOM_* |
| 钉钉 | /login/dingtalk/ |
DingTalkLoginView |
DINGTALK_* |
| 微信开放平台 | /login/wechat/ |
WeChatLoginView |
WECHAT_* |
启用某种登录方式
平台默认入口跳转由 project.py 的 MyCustomRemoteUserView.login() 控制。启用某种 SSO 时,
把该方法的跳转目标改为对应入口即可(见 myapp/config.py:107-110 的说明):
# project.py MyCustomRemoteUserView.login()
return redirect('/login/oauth2/') # 例:启用 OAuth2;CAS 改为 /login/cas/,飞书 /login/feishu/ ...
各方式配置项(config.py)
以下配置项默认在
myapp/config.py中以注释给出模板(约:112-152),按需取消注释并填写。 各 SSO 的*_REDIRECT_URI留空时会自动拼接/(login)/<type>/callback,一般无需手填。
- OAuth2 / OIDC:
OAUTH2_PROVIDER(填github/google可自动补全各端点 URL;其他 IdP 如 Keycloak/Okta/Azure AD 留空并手填)、OAUTH2_CLIENT_ID/OAUTH2_CLIENT_SECRET、OAUTH2_AUTHORIZE_URL/OAUTH2_TOKEN_URL/OAUTH2_USERINFO_URL、OAUTH2_SCOPES、OAUTH2_USERNAME_FIELD/OAUTH2_EMAIL_FIELD(从 userinfo 取用户名/邮箱的字段)、OAUTH2_LOGOUT_URL。 - CAS:
CAS_SERVER_URL、CAS_SERVICE_URL(回调,留空自动拼)、CAS_LOGOUT_URL。 - 飞书:
FEISHU_APP_ID、FEISHU_APP_SECRET、FEISHU_REDIRECT_URI。 - 企业微信:
WECOM_CORPID、WECOM_AGENTID、WECOM_CORPSECRET、WECOM_REDIRECT_URI。 - 钉钉:
DINGTALK_APP_KEY、DINGTALK_APP_SECRET、DINGTALK_REDIRECT_URI。 - 微信开放平台:需先在 open.weixin.qq.com 创建「网站应用」并过审;
WECHAT_APP_ID、WECHAT_APP_SECRET、WECHAT_REDIRECT_URI。 - LDAP 兜底(账号密码登录时密码不匹配则尝试 LDAP bind):
AUTH_LDAP_SERVER、AUTH_LDAP_PORT、AUTH_LDAP_USE_TLS、AUTH_LDAP_BASE_DN。
通用对接步骤
- 在对应 IdP / 三方开放平台创建应用,拿到
client_id/secret(或 CAS server 地址)。 - 在三方平台配置回调地址为
<平台域名>/login/<type>/callback(与留空自动拼接的地址一致)。 - 在
config.py填写对应配置块(上一节)。 - 修改
project.py的MyCustomRemoteUserView.login()跳转到该方式入口。 - 重启后端生效。首次通过 SSO 登录的用户会自动注册,默认角色由
AUTH_USER_REGISTRATION_ROLE决定(默认Gamma,见myapp/config.py:94)。
三方登录的回调与「自动注册或登录」由
view_login.py中通用函数_sso_login_or_register完成; 角色到平台权限的映射、用户名取值规则等以代码为准。