用 Spring Security 接管登录认证,React 只负责页面 #5

Closed
panxiao81 wants to merge 0 commits from refactor/spring-security-login into feat/ad-login
Owner

已统一收敛至 PR #4,该 PR 直接针对 main 并包含最终代码。本 PR 关闭以保留唯一审阅入口,历史讨论保留。

问题与结果

密码表单原先由 Controller 调用自建 LoginTransaction 状态机,重复维护认证状态、会话轮换与退出。现在 React 只替换 Spring Security 默认登录 UI,原生表单交给 formLogin,认证状态由 SecurityContext 和 FactorGrantedAuthority 表达。

  • 删除 LoginTransaction、BrowserSignInState 和原 SignInService;Controller 只渲染 GET 页面。
  • DirectoryAuthenticationProvider 调用 VerifyPassword,用同一次用户 bind 连接读取 Spring Data LDAP 用户仓储,结束即关闭。领域 User/UserRepository 继续独立于框架。
  • 密码成功保存不含凭据的 principal 和 FACTOR_PASSWORD;待 MFA 页面使用框架的十分钟因素有效期校验。其他应用入口暂时 denyAll,未实现 MFA/Hydra,不凭密码因素放行。
  • Spring Security 负责表单成功/失败、CSRF、SecurityContext 保存、会话轮换和 POST logout。监控 Basic 认证使用独立无状态安全链,与人类认证会话隔离。
  • 删除原事务内两秒提交间隔,它不构成账号/IP 限流;入口限流仍是生产发布前待办。

验证

  • 18 项 JVM 测试通过,覆盖同连接 LDAP 查询、因素保存和过期、会话轮换、CSRF、HTTPS、退出以及监控与人类认证隔离。
  • 前端构建和 bootJar 通过,产物确认没有旧登录状态机类。
  • 更新后的 Tailscale HTTPS 实例通过 1 项 Playwright 回归:原生 POST、失败后清空密码、无 fetch/XHR、移动端布局。
  • 页面显式声明 UTF-8,统一失败提示不暴露目录异常。

本轮不执行 Native 编译/测试;新增安全链需要在阶段性 Native 验收覆盖。真实人类复验待维护者反馈,不把夹具或合成用户名回归视为真实 AD 验收。

部署与文档

生产 Go/Authelia/Gitea 链路不切换。沿用现有 Tailscale HTTPS 开发入口。

本 PR 基于尚未合并的 PR #4,仅包含 Spring Security 职责调整。Wiki 按维护者约定直接同步 main,见 独立 IAM 设计。

> 已统一收敛至 [PR #4](https://git.ddupan.top/panxiao81/iam-login/pulls/4),该 PR 直接针对 main 并包含最终代码。本 PR 关闭以保留唯一审阅入口,历史讨论保留。 ## 问题与结果 密码表单原先由 Controller 调用自建 LoginTransaction 状态机,重复维护认证状态、会话轮换与退出。现在 React 只替换 Spring Security 默认登录 UI,原生表单交给 formLogin,认证状态由 SecurityContext 和 FactorGrantedAuthority 表达。 - 删除 LoginTransaction、BrowserSignInState 和原 SignInService;Controller 只渲染 GET 页面。 - DirectoryAuthenticationProvider 调用 VerifyPassword,用同一次用户 bind 连接读取 Spring Data LDAP 用户仓储,结束即关闭。领域 User/UserRepository 继续独立于框架。 - 密码成功保存不含凭据的 principal 和 FACTOR_PASSWORD;待 MFA 页面使用框架的十分钟因素有效期校验。其他应用入口暂时 denyAll,未实现 MFA/Hydra,不凭密码因素放行。 - Spring Security 负责表单成功/失败、CSRF、SecurityContext 保存、会话轮换和 POST logout。监控 Basic 认证使用独立无状态安全链,与人类认证会话隔离。 - 删除原事务内两秒提交间隔,它不构成账号/IP 限流;入口限流仍是生产发布前待办。 ## 验证 - 18 项 JVM 测试通过,覆盖同连接 LDAP 查询、因素保存和过期、会话轮换、CSRF、HTTPS、退出以及监控与人类认证隔离。 - 前端构建和 bootJar 通过,产物确认没有旧登录状态机类。 - 更新后的 Tailscale HTTPS 实例通过 1 项 Playwright 回归:原生 POST、失败后清空密码、无 fetch/XHR、移动端布局。 - 页面显式声明 UTF-8,统一失败提示不暴露目录异常。 本轮不执行 Native 编译/测试;新增安全链需要在阶段性 Native 验收覆盖。真实人类复验待维护者反馈,不把夹具或合成用户名回归视为真实 AD 验收。 ## 部署与文档 生产 Go/Authelia/Gitea 链路不切换。沿用现有 Tailscale HTTPS 开发入口。 本 PR 基于尚未合并的 PR #4,仅包含 Spring Security 职责调整。Wiki 按维护者约定直接同步 main,见 [独立 IAM 设计](https://git.ddupan.top/panxiao81/homelab-wiki/src/branch/main/architecture/independent-iam-draft.md)。
panxiao81 added 1 commit 2026-09-27 17:34:35 +00:00
panxiao81 closed this pull request 2026-09-27 17:46:15 +00:00

Pull request closed

Please reopen this pull request to perform a merge.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: panxiao81/iam-login#5