web/auth — iAOP 登录认证 + 用户/角色管理
issue #134 / PRD 8.2 认证鉴权。纯静态(无构建链)Demo 级实现: 登录页 + 会话管理 + 用户/角色管理 + 三级 RBAC 门控 + OIDC SSO 预留。
文件
web/auth/
├── auth.js # 共享库:用户 CRUD(加盐 SHA-256)/ 会话 / 权限矩阵 / 审计 / OIDC 配置点
├── login.html # 登录页(本地账号;配置 OIDC 后出现 SSO 入口)
├── users.html # 用户/角色管理页(仅 admin)+ OIDC 配置 + 审计日志查看
├── users.js # 管理页逻辑
└── README.md
使用
# 从 web/ 根目录起服务(studio 集成依赖 ../auth 相对路径)
cd web && python -m http.server 8083
# 打开 http://127.0.0.1:8083/auth/login.html
首次运行内置管理员 admin / admin123(登录后请立即在用户管理页改密)。
未登录访问 web/studio/(模板配置台)会自动跳转登录页,登录后按会话角色
应用三级 RBAC(Viewer 只读 / Editor 配置 / Publisher 发布+回滚)。
语义对齐
| 能力 | 对齐后端 |
|---|---|
| 角色 readonly / engineer / admin,动作 view / edit / publish / manage | core/template-console/rbac.py(Resource/Action/RoleKind) |
| 用户数据(username/role/enabled/salt/hash) | core/data-bus/config/postgres.template.yaml users/permissions 表(Demo 落 localStorage,后端 HTTP 就绪后替换 UserStore 读写即可) |
| 写操作审计(时间/操作人/动作/资源/原因) | template_registry._log 风格 + prompts.drain_audit 语义 |
| OIDC 配置点(issuer/client_id/redirect_uri) | PRD 8.2 双轨:未配置走本地账号,配置后登录页出现 SSO 入口(标准授权码流程 authorize URL 已可生成;令牌换会话的后端端点待企业 IAM 就绪后对接) |
各前端页面接入方式
<script src="../auth/auth.js"></script>
<script>
var session = Auth.requireAuth("../auth/login.html"); // 未登录 → 跳登录页
if (session) { /* Auth.can(session.role, "edit" | "publish" | "manage") 门控写操作 */ }
</script>
web/studio 已接入(未登录不可进入,写操作按会话角色门控,发布/回滚落审计);
auth.js 缺失时 studio 降级为手动角色切换演示,向后兼容。
安全说明(Demo 边界)
- 密码加盐 SHA-256(Web Crypto)存储,不落明文;会话 token 8 小时过期, 账号禁用/删除即时失效;
- localStorage 存储仅用于无后端 Demo;生产部署需由后端接管 users 表 (PostgreSQL)与会话签发,本库 API(login/session/can/audit)保持不变。