Skip to content

Feature/ldap authentication#552

Open
xuebkgithub wants to merge 3 commits intoWei-Shaw:mainfrom
xuebkgithub:feature/ldap-authentication
Open

Feature/ldap authentication#552
xuebkgithub wants to merge 3 commits intoWei-Shaw:mainfrom
xuebkgithub:feature/ldap-authentication

Conversation

@xuebkgithub
Copy link

feat(auth): 集成 LDAP 认证功能

实现完整的 LDAP 认证系统,支持企业用户通过 LDAP 服务器登录。

后端实现

数据模型

  • 新增 ldap_configs 表存储 LDAP 服务器配置
  • 新增 ldap_users 表关联 LDAP 用户与本地用户
  • 使用 Ent ORM 生成完整的 CRUD 代码

核心服务

  • LdapService: 实现 LDAP 连接、用户搜索、密码验证
  • 支持 AES-256-GCM 加密存储 LDAP 密码
  • 支持从环境变量自动加载配置
  • 自动创建本地用户并关联 LDAP 账号

API 端点

  • POST /api/v1/auth/ldap/login: LDAP 登录接口
  • 集成 TOTP 2FA 验证
  • 返回标准 JWT token

Repository 层

  • LdapConfigRepository: LDAP 配置数据访问
  • LdapUserRepository: LDAP 用户关联数据访问

前端实现

登录页面

  • 新增 /auth/ldap 独立登录页面
  • 支持用户名密码认证
  • 完整的错误处理和加载状态

国际化

  • 添加中英文 LDAP 相关翻译
  • 支持动态语言切换

主登录页面集成

  • 根据 ldap_enabled 配置显示/隐藏 LDAP 入口
  • 添加"使用 LDAP 登录"按钮

安全增强

  • 防止用户名枚举攻击(统一错误消息)
  • LDAP 登录强制执行 TOTP 2FA
  • 敏感信息日志脱敏
  • 密码加密存储

配置管理

  • 支持环境变量配置(优先级最高)
  • 应用启动时自动加载环境变量到数据库
  • 公共设置 API 返回 ldap_enabled 状态

依赖注入

  • 使用 Wire 完成依赖注入
  • 在 provideCleanup 中初始化 LDAP 配置
  • 所有服务正确注册到 ProviderSet

测试环境

  • 更新 docker-compose-test.yml 支持 LDAP 测试
  • 添加数据库迁移脚本

影响范围: 认证系统、用户管理、系统设置

保库(baoku) added 3 commits March 3, 2026 10:31
新增完整的 LDAP 认证功能,支持企业级目录服务集成:

**后端实现**
- 新增 LdapConfig 和 LdapUser 实体及完整 CRUD 操作
- 实现 LDAP 认证服务,支持连接池、TLS、搜索和绑定认证
- 新增插件注册机制,支持动态加载认证插件
- 添加 LDAP 配置和用户仓储层
- 实现 LDAP 认证处理器和路由

**前端实现**
- 新增 LDAP 登录插件和视图组件
- 实现 LDAP 配置管理 API 接口
- 集成 LDAP 登录到主登录流程

**数据库**
- 新增 ldap_configs 和 ldap_users 表结构
- 支持多租户 LDAP 配置

**测试**
- 添加 LDAP 服务单元测试
- 添加 LDAP 用户仓储集成测试
- 更新 docker-compose 测试环境配置

**依赖**
- 新增 go-ldap/ldap/v3 库支持

影响范围:52 个文件,新增 10428 行代码
修复 TestFindOrCreateUser_ConcurrentConflict 测试失败的问题:

问题根因:
- 测试使用的 userRepoStub 的 GetByEmail 方法直接 panic
- 在并发冲突重试场景下,findOrCreateUser 会在每次重试时调用 GetByEmail
- 测试返回的错误类型不正确,无法被识别为约束冲突错误

修复内容:
1. 添加 userRepoStubWithGetByEmail 扩展类型,支持配置 GetByEmail 方法
2. 修改测试 mock,使用新的 stub 类型并配置 GetByEmail 返回预设用户
3. 将简单字符串错误改为 &ent.ConstraintError{},确保重试逻辑能正确识别并发冲突

测试结果:
- TestFindOrCreateUser_ConcurrentConflict 测试通过
- 完整单元测试套件通过
@xuebkgithub xuebkgithub force-pushed the feature/ldap-authentication branch from cea13c0 to 73d3060 Compare March 3, 2026 05:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant