实现 U4 SSO 集成,按 R1a 多 IDP 信任边界(按 (idp_name, idp_subject)
主键关联,禁止邮箱合并)、R1b 过渡期手动 deprovisioning、R1c 单租户假设。
- OIDC 适配器 (authlib):redirect flow + JIT 用户创建(KTD-2)
GET /auth/oauth/{provider}/redirect → IDP authorize
GET /auth/oauth/{provider}/callback → token + userinfo + 关联本地用户
- SAML 适配器 (python3-saml):ACS endpoint
POST /auth/saml/{provider}/acs → 解析 NameID + JIT 用户创建
- IDPRegistry (idp_registry.py):多 IDP 注册 + 热证书切换 + 健康隔离
- SCIM 2.0 minimal:bearer token 认证 + push 失败告警
POST /scim/v2/Users (create)
PATCH /scim/v2/Users/{id} (disable)
GET /scim/v2/Users (filter/list)
- 手动 deprovisioning (R1b):operator/admin RBAC + OTel 审计
POST /admin/users/{user_id}/deprovision
POST /admin/users/{user_id}/role (RBAC 角色变更审计 KTD-8)
- AuthDB schema V5:user_idp_links + auth_audit_log(additive)
- middleware 白名单:auth/oauth/、auth/saml/、scim/v2/ 走前缀匹配
测试:31 个单元测试全部通过(OIDC 8 + SAML 7 + SCIM 9 + Audit 6 + 1 schema)
ponytail 简化:
- _StateCache 进程内 dict + TTL 5min(多实例需 Redis 共享 state)
- OneLogin_Saml2_Auth 同步解析走 asyncio.to_thread 避免阻塞
- SCIM alert 走 OTel span event(无独立告警通道)
- 邮箱冲突时使用 fallback 邮箱(@sso.{provider}.local)保留 UNIQUE 约束
|
||
|---|---|---|
| .. | ||
| __init__.py | ||
| test_department_service.py | ||
| test_llm_config_service.py | ||
| test_models.py | ||
| test_quota_service.py | ||
| test_skill_service.py | ||
| test_usage_service.py | ||
| test_user_service.py | ||