fischer-agentkit/tests/unit/admin
Chiguyong d3bd0d3b5f feat(auth): U4 — SSO 集成 (OIDC + SAML + SCIM + RBAC 审计)
实现 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 约束
2026-07-06 04:15:02 +08:00
..
__init__.py feat(admin): U1+U2+U4 — schema v3, department service, context filtering 2026-06-21 15:03:27 +08:00
test_department_service.py feat(admin): U1+U2+U4 — schema v3, department service, context filtering 2026-06-21 15:03:27 +08:00
test_llm_config_service.py feat(admin): U5 — LLM config admin endpoints + department quotas 2026-06-21 15:03:38 +08:00
test_models.py feat(auth): U4 — SSO 集成 (OIDC + SAML + SCIM + RBAC 审计) 2026-07-06 04:15:02 +08:00
test_quota_service.py feat(admin): U5 — LLM config admin endpoints + department quotas 2026-06-21 15:03:38 +08:00
test_skill_service.py feat(admin): U6 — Skill & KB management endpoints + department binding 2026-06-21 16:19:51 +08:00
test_usage_service.py feat(admin): U7 — usage dashboard + quota enforcement 2026-06-21 17:23:20 +08:00
test_user_service.py feat(admin): U3 — user CRUD + password reset + multi-department 2026-06-21 13:45:42 +08:00