diff --git a/architecture/independent-iam-draft.md b/architecture/independent-iam-draft.md index 4f1b650..19d9854 100644 --- a/architecture/independent-iam-draft.md +++ b/architecture/independent-iam-draft.md @@ -4,6 +4,7 @@ status: draft last_reviewed: 2026-09-25 last_verified: null sources: + - https://git.ddupan.top/panxiao81/iam-login/commit/9cf2d235dff0cd33f98012b0a114f14a8f9bfcda - 维护者于 2026-09-25 的架构讨论与草案记录要求 --- @@ -36,7 +37,7 @@ Ayatori 是其消费者,依赖关系类似 OpenStack 其他服务对 Keystone | 部分 | 拟承担的职责 | |---|---| -| 人类认证后端 | 人类登录、MFA、账号生命周期;可选 ZITADEL,过渡期保留 Samba AD | +| 人类认证后端 | 人类登录与 MFA;已选择 Spring Native 方向,首轮 AD 仍为用户与组权威 | | SPIRE | workload 身份证明与 SVID 签发,可辅助 machine 或 agent 认证 | | Login / Consent 与身份授权服务 | 验证不同主体的证明,映射稳定身份,处理登录、授权、组和必要的动态审批 | | Hydra | OAuth2/OIDC 流程、client 与 token 签发 | @@ -134,14 +135,14 @@ Agent 的动态授权需要落到应用可识别的 scope、角色、账号权 映射稳定主体并接受 Hydra login challenge;面向下游的 OAuth2/OIDC 仍由 Hydra 提供。 第一轮通过 Authelia OIDC 的 PoC 保留为已验收基线,尚未部署此替代路径。 -同日的上游接口与源码评估形成两个候选,尚未决定切换: +早期上游接口与源码评估曾形成以下两个候选;后续决定见下方“已确定的实现方向”: | 候选 | 可复用能力 | 尚需承担的接入工作 | |---|---|---| | ZITADEL Session API + Login V2 | 逐步验证认证因素、会话、账号管理;Login V2 有登录编排与 UI | 将登录事务绑定到 Hydra challenge,服务端验证认证结果并接回 Hydra;按选定版本验证 LDAP、MFA 与完整恢复流程 | | Ory Kratos + self-service UI | 登录、MFA、恢复与会话流程;上游已有 Hydra login challenge 集成 | 部署和维护独立 UI,保留主体映射与 consent;Samba AD 不能假设存在开箱即用的 LDAP 认证接入 | -Kratos 在认证与签发的职责分离上更直接,是值得优先验证的替代候选;但若必须继续使用 +早期评估认为 Kratos 在认证与签发的职责分离上更直接;但若必须继续使用 Samba AD 密码登录,LDAP 过渡成本可能使 ZITADEL 更合适。Kratos 本身是 headless 服务, 现成参考 UI 不等于无需维护的内置管理门户,亦不能把 Ory Network 的功能直接视为自托管 开源版能力。此判断是方案评估,不是新的部署决定。 @@ -161,10 +162,33 @@ ZITADEL Session API 返回会话不等于已完成全部认证;需要确认已 [Kratos self-service UI](https://github.com/ory/kratos-selfservice-ui-node)、 [LDAP 功能请求](https://github.com/ory/kratos/issues/274)。 +### 已确定的实现方向 + +维护者已选择 Java、Spring Security 与 GraalVM Native。阻碍 Java 的是 JVM 部署和运行 +开销;能够通过 Native 功能与资源验收时,Java 仍是优先选择,不引入 Kotlin。 +Quarkus、Micronaut 也有相应生态支持;最终选择 Spring 同时考虑了维护者的熟悉程度。 +Keycloak 可参考认证实现,但其服务端模型与 SPI 不直接复用,采用 Quarkus 也不证明 +Keycloak 有 Native 发行或完整原生兼容性。 + +原先薄 OIDC 适配器在 homelab-infra 内维护;现在直接承担 AD、MFA、认证状态与 Native +构建测试,因此按维护者决定拆为独立 [iam-login](https://git.ddupan.top/panxiao81/iam-login) +仓库,独立于 Ayatori。环境部署仍归 homelab-infra。 + +已按维护者提供的 start.spring.io 配置生成 Java 25、Spring Boot 4.1.1、Gradle 与 YAML +项目骨架,包含 LDAP、WebAuthn、校验、Actuator/Prometheus、OpenTelemetry/追踪、 +Testcontainers、UnboundID、Lombok、配置处理器、DevTools 与 Native 插件。依赖存在不表示认证流程已实现;首次实现及 Native +验证由 [issue #1](https://git.ddupan.top/panxiao81/iam-login/issues/1) 跟踪。需在原生二进制上 +验证 AD、MFA、Hydra、持久化及监控,实测资源成本;不能把编译成功等同完整验收。 + +首轮保持 AD 用户与组权威并直接映射组名。LDAP 与 MFA 绑定同一稳定主体;切换前需要 +明确现役 issuer/sub 哈希主体到新主体的连续性映射。MFA 首先验证官方 WebAuthn 集成, +恢复与已有凭据迁移方式仍待实现。维护者接受必要时并存多个登录前端。 +现役 Go/Authelia PoC 保留为已验收基线,尚未切换生产认证路径。 + ### 目录与 DNS 迁移 -人类同样使用这套独立 IAM。过渡期可以保留 Samba AD,通过 ZITADEL 连接 LDAP; -后续可以把人类账号迁出 Samba。ZITADEL 是候选后端,不是本草案已经确定的依赖。 +人类同样使用这套独立 IAM。首轮由 iam-login 直接连接 Samba AD 验证密码、查询用户与组, +按原组名直接映射;之后再推进统一粗粒度组模型与目录迁移,不要求同一步替换目录。 更换认证后端时应保持稳定主体与下游账号关联,避免按可变邮箱或用户名重新识别账号。 维护者认为 Samba AD 使用率较低,长期希望完全删除它。退役需处理 LDAP、Kerberos、 diff --git a/services/hydra.md b/services/hydra.md index 9bac92f..e238d37 100644 --- a/services/hydra.md +++ b/services/hydra.md @@ -5,6 +5,7 @@ evidence: live-verified last_reviewed: 2026-09-25 last_verified: 2026-09-25 sources: + - https://git.ddupan.top/panxiao81/iam-login/commit/9cf2d235dff0cd33f98012b0a114f14a8f9bfcda - https://git.ddupan.top/panxiao81/homelab-infra/pulls/142 - https://git.ddupan.top/panxiao81/homelab-infra/pulls/143 - 2026-09-25 部署、discovery、重定向与网络隔离检查 @@ -17,8 +18,12 @@ sources: 验证上游身份。当前配置的上游是 Authelia,它继续连接 Samba AD 并执行人类 MFA。 适配器没有直接连接 LDAP,也不与 Authelia 专有认证协议绑定。 -本服务独立于 Ayatori。当前代码作为 homelab-infra 中的独立 Go module 保存,未新建 -独立仓库。完整的多主体 IAM 仍是[草案](../architecture/independent-iam-draft.md); +本服务独立于 Ayatori。现役 PoC 代码仍作为 homelab-infra 中的独立 Go module 保存。 +下一阶段直接连接 AD 的 Java/Spring 登录服务已建立独立仓库 +[iam-login](https://git.ddupan.top/panxiao81/iam-login),目前仅生成 Spring Initializr 骨架, +尚未替换现役 Go/Authelia 链路。应用代码、测试与 Native 构建发布归新仓库,环境部署归 +homelab-infra;首轮实现由 [issue #1](https://git.ddupan.top/panxiao81/iam-login/issues/1) 跟踪。 +完整的多主体 IAM 仍是[草案](../architecture/independent-iam-draft.md); 本轮不实现 SPIFFE 登录、agent 专用认证、动态授权或统一组迁移。 ## 入口与首次使用