57 lines
2.6 KiB
Markdown
57 lines
2.6 KiB
Markdown
# 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
|
||
```
|
||
|
||
## 使用
|
||
|
||
```bash
|
||
# 从 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 就绪后对接) |
|
||
|
||
## 各前端页面接入方式
|
||
|
||
```html
|
||
<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)保持不变。
|