记录 iam-login 独立仓库与 Spring Native 实现方向
docs / check (push) Successful in 53s

This commit is contained in:
2026-09-25 16:47:18 +00:00
parent 045c28b5c2
commit 90764def8a
2 changed files with 36 additions and 7 deletions
+29 -5
View File
@@ -4,6 +4,7 @@ status: draft
last_reviewed: 2026-09-25 last_reviewed: 2026-09-25
last_verified: null last_verified: null
sources: sources:
- https://git.ddupan.top/panxiao81/iam-login/commit/9cf2d235dff0cd33f98012b0a114f14a8f9bfcda
- 维护者于 2026-09-25 的架构讨论与草案记录要求 - 维护者于 2026-09-25 的架构讨论与草案记录要求
--- ---
@@ -36,7 +37,7 @@ Ayatori 是其消费者,依赖关系类似 OpenStack 其他服务对 Keystone
| 部分 | 拟承担的职责 | | 部分 | 拟承担的职责 |
|---|---| |---|---|
| 人类认证后端 | 人类登录、MFA、账号生命周期;可选 ZITADEL,过渡期保留 Samba AD | | 人类认证后端 | 人类登录与 MFA;已选择 Spring Native 方向,首轮 AD 仍为用户与组权威 |
| SPIRE | workload 身份证明与 SVID 签发,可辅助 machine 或 agent 认证 | | SPIRE | workload 身份证明与 SVID 签发,可辅助 machine 或 agent 认证 |
| Login / Consent 与身份授权服务 | 验证不同主体的证明,映射稳定身份,处理登录、授权、组和必要的动态审批 | | Login / Consent 与身份授权服务 | 验证不同主体的证明,映射稳定身份,处理登录、授权、组和必要的动态审批 |
| Hydra | OAuth2/OIDC 流程、client 与 token 签发 | | Hydra | OAuth2/OIDC 流程、client 与 token 签发 |
@@ -134,14 +135,14 @@ Agent 的动态授权需要落到应用可识别的 scope、角色、账号权
映射稳定主体并接受 Hydra login challenge;面向下游的 OAuth2/OIDC 仍由 Hydra 提供。 映射稳定主体并接受 Hydra login challenge;面向下游的 OAuth2/OIDC 仍由 Hydra 提供。
第一轮通过 Authelia OIDC 的 PoC 保留为已验收基线,尚未部署此替代路径。 第一轮通过 Authelia OIDC 的 PoC 保留为已验收基线,尚未部署此替代路径。
同日的上游接口与源码评估形成两个候选,尚未决定切换: 早期上游接口与源码评估曾形成以下两个候选;后续决定见下方“已确定的实现方向”:
| 候选 | 可复用能力 | 尚需承担的接入工作 | | 候选 | 可复用能力 | 尚需承担的接入工作 |
|---|---|---| |---|---|---|
| ZITADEL Session API + Login V2 | 逐步验证认证因素、会话、账号管理;Login V2 有登录编排与 UI | 将登录事务绑定到 Hydra challenge,服务端验证认证结果并接回 Hydra;按选定版本验证 LDAP、MFA 与完整恢复流程 | | 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 认证接入 | | Ory Kratos + self-service UI | 登录、MFA、恢复与会话流程;上游已有 Hydra login challenge 集成 | 部署和维护独立 UI,保留主体映射与 consent;Samba AD 不能假设存在开箱即用的 LDAP 认证接入 |
Kratos 在认证与签发的职责分离上更直接,是值得优先验证的替代候选;但若必须继续使用 早期评估认为 Kratos 在认证与签发的职责分离上更直接;但若必须继续使用
Samba AD 密码登录,LDAP 过渡成本可能使 ZITADEL 更合适。Kratos 本身是 headless 服务, Samba AD 密码登录,LDAP 过渡成本可能使 ZITADEL 更合适。Kratos 本身是 headless 服务,
现成参考 UI 不等于无需维护的内置管理门户,亦不能把 Ory Network 的功能直接视为自托管 现成参考 UI 不等于无需维护的内置管理门户,亦不能把 Ory Network 的功能直接视为自托管
开源版能力。此判断是方案评估,不是新的部署决定。 开源版能力。此判断是方案评估,不是新的部署决定。
@@ -161,10 +162,33 @@ ZITADEL Session API 返回会话不等于已完成全部认证;需要确认已
[Kratos self-service UI](https://github.com/ory/kratos-selfservice-ui-node)、 [Kratos self-service UI](https://github.com/ory/kratos-selfservice-ui-node)、
[LDAP 功能请求](https://github.com/ory/kratos/issues/274)。 [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 迁移 ### 目录与 DNS 迁移
人类同样使用这套独立 IAM。过渡期可以保留 Samba AD,通过 ZITADEL 连接 LDAP; 人类同样使用这套独立 IAM。首轮由 iam-login 直接连接 Samba AD 验证密码、查询用户与组,
后续可以把人类账号迁出 Samba。ZITADEL 是候选后端,不是本草案已经确定的依赖。 按原组名直接映射;之后再推进统一粗粒度组模型与目录迁移,不要求同一步替换目录。
更换认证后端时应保持稳定主体与下游账号关联,避免按可变邮箱或用户名重新识别账号。 更换认证后端时应保持稳定主体与下游账号关联,避免按可变邮箱或用户名重新识别账号。
维护者认为 Samba AD 使用率较低,长期希望完全删除它。退役需处理 LDAP、Kerberos、 维护者认为 Samba AD 使用率较低,长期希望完全删除它。退役需处理 LDAP、Kerberos、
+7 -2
View File
@@ -5,6 +5,7 @@ evidence: live-verified
last_reviewed: 2026-09-25 last_reviewed: 2026-09-25
last_verified: 2026-09-25 last_verified: 2026-09-25
sources: 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/142
- https://git.ddupan.top/panxiao81/homelab-infra/pulls/143 - https://git.ddupan.top/panxiao81/homelab-infra/pulls/143
- 2026-09-25 部署、discovery、重定向与网络隔离检查 - 2026-09-25 部署、discovery、重定向与网络隔离检查
@@ -17,8 +18,12 @@ sources:
验证上游身份。当前配置的上游是 Authelia,它继续连接 Samba AD 并执行人类 MFA。 验证上游身份。当前配置的上游是 Authelia,它继续连接 Samba AD 并执行人类 MFA。
适配器没有直接连接 LDAP,也不与 Authelia 专有认证协议绑定。 适配器没有直接连接 LDAP,也不与 Authelia 专有认证协议绑定。
本服务独立于 Ayatori。当前代码作为 homelab-infra 中的独立 Go module 保存,未新建 本服务独立于 Ayatori。现役 PoC 代码仍作为 homelab-infra 中的独立 Go module 保存。
独立仓库。完整的多主体 IAM 仍是[草案](../architecture/independent-iam-draft.md); 下一阶段直接连接 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 专用认证、动态授权或统一组迁移。 本轮不实现 SPIFFE 登录、agent 专用认证、动态授权或统一组迁移。
## 入口与首次使用 ## 入口与首次使用