AgoraIO-Extensions / AgoraIO-Extensions/agent-infra

feat(connection): implement LDAP principals and browser sessions

Abierto
#390 4 comentarios 0 reacciones 1 asignado Asignado a @guoxianzhe Ver en GitHub
enhancement
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.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.