接入 WebAuthn MFA、Hydra 授权与客户端管理 #6

Merged
panxiao81 merged 3 commits from feat/webauthn-mfa into main 2026-09-29 15:30:44 +00:00
Owner

AD 密码验证后通过 Spring Security WebAuthn 完成 MFA,接入 Hydra Login/Consent 与统一注销;新增受 MFA、直接管理组及 CSRF 保护的客户端 CRUD API。Hydra 继续承担 OAuth2/OIDC 签发和客户端持久化,不公开管理端口,不直接读写其数据库。

  • authorization 按领域、应用、基础设施与 Web 分层,核对 client、scope、audience、主体、原始请求及浏览器绑定;AD authority + objectGUID 显式映射旧 sub,避免账号迁移误关联。
  • 客户端持久化契约为领域层 ClientRepository,由 HydraClientRepository 实现。
  • clients 模块限制第一方 confidential authorization-code 客户端;创建仅返回一次 secret,更新保留原密钥,启用标记写入 Hydra metadata,授权时重新查询;无标记旧客户端暂兼容配置 allowlist。
  • 保留 Hydra 登录会话以关联注销,issuer remembered login 不能绕过本地 MFA、主体匹配和授权确认。注销确认保留 CSRF,Spring 清除当前 session,Hydra 执行登记的注销通知。
  • React 仅作展示和 WebAuthn 浏览器交互,密码、授权和退出使用原生表单;Spring Security 管理因素和会话。
  • WebAuthn 使用官方 JDBC 仓储与 PostgreSQL,恢复 Boot 数据源/连接池自动配置;注册行锁与事务封装在持久化实现。Login/Consent/Logout 统一使用 HydraGateway,HTTP client 由 Boot builder 装配,超时可配置。
  • AD 管理沿用 RSAT/CLI,全部 MFA 遗失人工恢复,不扩展完整 self-service。

验证:37 项 JVM 测试全部通过,bootJar 构建成功;隔离浏览器完成 AD → passkey → Hydra code/token 验签 → 再次授权确认 → RP logout → back-channel token 验签与 sid 核对 → Spring session 失效。真实 PostgreSQL 测试覆盖 client CRUD、Hydra 重启持久化与更新保留密钥。wiki 文档检查通过。

生产 Go/Authelia/Gitea 链路未切换;新增 Hydra 路径仅在隔离环境验证。真实 subject 映射、正式 auth.ddupan.top 路由和新链路人类验收尚待完成;本轮按约定未运行 Native。

文档:docs/webauthn.md、docs/hydra-login.md、docs/client-management.md。关联 #1,承接已合并的 #4。

本轮 review 重构新增跨连接注册锁、事务回滚和 Hikari 属性绑定验证;日常 JVM 验证跳过测试 AOT,因其夹具 LDAP 监听线程阻止进程退出。测试 AOT/Native 仍待阶段性验证,记录在 docs/native-validation.md。

AD 密码验证后通过 Spring Security WebAuthn 完成 MFA,接入 Hydra Login/Consent 与统一注销;新增受 MFA、直接管理组及 CSRF 保护的客户端 CRUD API。Hydra 继续承担 OAuth2/OIDC 签发和客户端持久化,不公开管理端口,不直接读写其数据库。 - authorization 按领域、应用、基础设施与 Web 分层,核对 client、scope、audience、主体、原始请求及浏览器绑定;AD authority + objectGUID 显式映射旧 sub,避免账号迁移误关联。 - 客户端持久化契约为领域层 `ClientRepository`,由 `HydraClientRepository` 实现。 - clients 模块限制第一方 confidential authorization-code 客户端;创建仅返回一次 secret,更新保留原密钥,启用标记写入 Hydra metadata,授权时重新查询;无标记旧客户端暂兼容配置 allowlist。 - 保留 Hydra 登录会话以关联注销,issuer remembered login 不能绕过本地 MFA、主体匹配和授权确认。注销确认保留 CSRF,Spring 清除当前 session,Hydra 执行登记的注销通知。 - React 仅作展示和 WebAuthn 浏览器交互,密码、授权和退出使用原生表单;Spring Security 管理因素和会话。 - WebAuthn 使用官方 JDBC 仓储与 PostgreSQL,恢复 Boot 数据源/连接池自动配置;注册行锁与事务封装在持久化实现。Login/Consent/Logout 统一使用 `HydraGateway`,HTTP client 由 Boot builder 装配,超时可配置。 - AD 管理沿用 RSAT/CLI,全部 MFA 遗失人工恢复,不扩展完整 self-service。 验证:37 项 JVM 测试全部通过,bootJar 构建成功;隔离浏览器完成 AD → passkey → Hydra code/token 验签 → 再次授权确认 → RP logout → back-channel token 验签与 sid 核对 → Spring session 失效。真实 PostgreSQL 测试覆盖 client CRUD、Hydra 重启持久化与更新保留密钥。wiki 文档检查通过。 生产 Go/Authelia/Gitea 链路未切换;新增 Hydra 路径仅在隔离环境验证。真实 subject 映射、正式 auth.ddupan.top 路由和新链路人类验收尚待完成;本轮按约定未运行 Native。 文档:docs/webauthn.md、docs/hydra-login.md、docs/client-management.md。关联 #1,承接已合并的 #4。 本轮 review 重构新增跨连接注册锁、事务回滚和 Hikari 属性绑定验证;日常 JVM 验证跳过测试 AOT,因其夹具 LDAP 监听线程阻止进程退出。测试 AOT/Native 仍待阶段性验证,记录在 docs/native-validation.md。
panxiao81 added 1 commit 2026-09-27 18:30:46 +00:00
panxiao81 added 1 commit 2026-09-28 12:30:41 +00:00
panxiao81 changed title from 接入 WebAuthn 第二因素与 PostgreSQL 凭据仓储 to 接入 WebAuthn MFA、Hydra 授权与客户端管理 2026-09-28 12:31:27 +00:00
panxiao81 added 1 commit 2026-09-29 13:21:37 +00:00
panxiao81 merged commit 5f49a7c7c6 into main 2026-09-29 15:30:44 +00:00
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#6