feat/ad-login
main
为独立 iam-login 接入 Samba AD 第一因素与真实浏览器登录页面。React + Vite 只替换 Spring Security 默认 UI:Spring 返回带上下文的 HTML,浏览器原生表单 POST 交给 formLogin,不引入 SPA 路由、fetch 登录流程、模板引擎或 Node 运行服务。
Spring Security 负责表单认证、因素状态、SecurityContext、会话轮换与退出。DirectoryAuthenticationProvider 调用目录用例,Spring Data LDAP 用户仓储复用本次用户 bind 连接查询账号、objectGUID 与直接 memberOf,查询完成即关闭,不新增读取账号,不将密码或连接保存到 session。
领域层保留 User/UserRepository,应用层编排目录认证和读取。没有自建 LoginTransaction 或并行浏览器认证状态机,也不保留选型 preview 功能。AD 组保持原样,不展开嵌套组或主组,不映射为本服务权限。
密码成功仅保存 FACTOR_PASSWORD,待 MFA 页面要求十分钟内的密码因素;其他应用入口暂时 denyAll,尚未接入 MFA 或 Hydra challenge。监控 Basic 认证使用独立无状态安全链。
默认关闭 AD,启用时使用受信 LDAPS CA 与 HTTPS。仅更新已有 Tailscale 开发入口,生产 Go/Authelia/Gitea 链路未切换。生产入口限流、审计、MFA 与 Hydra 集成仍待实现。
使用说明见 docs/ad-login.md;Wiki 设计与边界直接维护于 main。
本 PR 直接针对 main,统一包含原 #3、#4、#5 的最终代码;#3、#5 由本 PR 替代。代码持续更新于此 PR,未合并到 main。
@@ -0,0 +7,4 @@
/** Owns first-factor ordering, lifetime and the identity to which further factors must bind. */
public final class LoginTransaction {
private static final Duration LIFETIME = Duration.ofMinutes(10);
这里怎么写死了啊 留个config注入进来
@@ -0,0 +6,4 @@
import java.util.UUID;
说到底是靠什么在绑定session?时间戳?这可不太可靠吧?
No dependencies set.
The note is not visible to the blocked user.
问题与结果
为独立 iam-login 接入 Samba AD 第一因素与真实浏览器登录页面。React + Vite 只替换 Spring Security 默认 UI:Spring 返回带上下文的 HTML,浏览器原生表单 POST 交给 formLogin,不引入 SPA 路由、fetch 登录流程、模板引擎或 Node 运行服务。
Spring Security 负责表单认证、因素状态、SecurityContext、会话轮换与退出。DirectoryAuthenticationProvider 调用目录用例,Spring Data LDAP 用户仓储复用本次用户 bind 连接查询账号、objectGUID 与直接 memberOf,查询完成即关闭,不新增读取账号,不将密码或连接保存到 session。
领域层保留 User/UserRepository,应用层编排目录认证和读取。没有自建 LoginTransaction 或并行浏览器认证状态机,也不保留选型 preview 功能。AD 组保持原样,不展开嵌套组或主组,不映射为本服务权限。
密码成功仅保存 FACTOR_PASSWORD,待 MFA 页面要求十分钟内的密码因素;其他应用入口暂时 denyAll,尚未接入 MFA 或 Hydra challenge。监控 Basic 认证使用独立无状态安全链。
验证
Review 处理
部署与文档
默认关闭 AD,启用时使用受信 LDAPS CA 与 HTTPS。仅更新已有 Tailscale 开发入口,生产 Go/Authelia/Gitea 链路未切换。生产入口限流、审计、MFA 与 Hydra 集成仍待实现。
使用说明见 docs/ad-login.md;Wiki 设计与边界直接维护于 main。
本 PR 直接针对 main,统一包含原 #3、#4、#5 的最终代码;#3、#5 由本 PR 替代。代码持续更新于此 PR,未合并到 main。
接入真实 AD 密码与直接所属组,停在待 MFA 状态to 按 DDD 接入 AD 第一因素与 Spring Data LDAP 用户仓储@@ -0,0 +7,4 @@/** Owns first-factor ordering, lifetime and the identity to which further factors must bind. */public final class LoginTransaction {private static final Duration LIFETIME = Duration.ofMinutes(10);这里怎么写死了啊
留个config注入进来
@@ -0,0 +6,4 @@import java.util.UUID;/** Owns first-factor ordering, lifetime and the identity to which further factors must bind. */public final class LoginTransaction {说到底是靠什么在绑定session?时间戳?这可不太可靠吧?
按 DDD 接入 AD 第一因素与 Spring Data LDAP 用户仓储to 接入 AD 第一因素与 React 登录页面,由 Spring Security 管理认证