AgoraIO-Extensions / AgoraIO-Extensions/agent-infra
feat(connection): implement LDAP principals and browser sessions
- Lenguaje dominante
- TypeScript
- Estrellas
- 0
- Forks
- 0
- Merge medio
- 8 h 51 min
- PR fusionados (30 d)
- 99
Descripción
## Problem
Connection 需要自己完成公司 LDAP 登录并建立稳定 Principal/浏览器 Session,但当前候选实现使用 60 秒复核且没有合并同一 Principal 的并发 LDAP 查询。
## Scope
- 实现部署配置驱动的 LDAP authenticate 和 `issuer + uid` Principal 映射;邮箱、`cn`、显示名和登录名仅作展示。
- LDAP 密码只用于当次 HTTPS 登录和 bind,不持久化、不记录、不进入 Token、Cookie、错误、审计或模型上下文。
- 签发高熵 opaque Browser Session Cookie,使用 HttpOnly、Secure、SameSite=Strict;PostgreSQL 只保存 hash、Principal、issuer、期限、撤销和 recovery generation。
- 登录后按 Principal 缓存 15 分钟;过期后的并发复核合并为一次 LDAP 查询。当前 active-state 只判断 `uid` 条目存在,且明确暴露该限制。
- LDAP 不可用或配置非法时敏感操作 fail closed;不实现未知的离职状态字段,不复制 Rehoboam Token 行为。
## Acceptance criteria
- [ ] **AC-1:** 相同 issuer/uid 稳定解析为同一 Principal,展示属性变化不改变授权主体,不同 subject 不得合并。
- [ ] **AC-2:** Browser Cookie 和 hash-only Session 满足安全属性、撤销、过期和 recovery generation 门禁,原始 LDAP 密码不出现在任何持久或可观察输出。
- [ ] **AC-3:** 同一 Principal 在 15 分钟窗口内不重复查询 LDAP,窗口过期的并发请求只触发一次复核。
- [ ] **AC-4:** LDAP 条目缺失会禁用 Principal 并阻止后续敏感操作;LDAP 故障 fail closed,且不能把“条目存在”描述为“员工仍在职”。
- [ ] **AC-5:** 空密码、LDAP injection、匿名 bind、超时、错误 issuer、跨 Session 和跨 Principal 负向测试全部通过。
## Validation
- 运行 focused LDAP、Session、并发 single-flight、Secret redaction 和 PostgreSQL integration tests。
- 使用受控 LDAP 测试服务验证成功、条目缺失和不可用路径;运行完整仓库验证序列。
## Blocked by
- #398
- #399
- #393
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Evaluación
Este issue todavía no se ha evaluado.