接入 Checklist
上线前逐项检查身份、权限与安全边界
在 App 进入 staging 和 production 前逐项确认。未标明“不适用”的项目必须有可复核证据。
App 与 Manifest
-
appKey唯一、稳定、全小写,所有 permission/role 位于该命名空间。 - Manifest 包含
{app}.access。 - 权限是业务动作,不包含客户、部门、用户或 UI 组件。
- 角色只引用当前 Manifest 已声明权限。
- 本地
manifest validate通过。 - 远程预检 diff 已审核,
manifestVersion唯一。 - prod Manifest 有 owner/管理员审批和回滚版本。
OAuth 与 Session
- 每个环境、每个 App 使用独立 OAuth client。
- callback 使用 HTTPS(本地开发除外)并精确登记。
-
clientSecret只在服务端 secret manager。 - state、PKCE S256 和一次性 code 均由 SDK/服务端处理。
- App session cookie 包含 HttpOnly、Secure、SameSite=Lax、Path。
- 业务 App 不解析 opaque token,不信任身份 Header。
- 局部登出和全局登出均已验证。
身份边界
- 内部员工只走飞书统一身份,不维护第二套 Auth 员工账号。
- 外部访问账号走邀请/邮箱密码,不强制飞书。
- 业务 App 不接飞书 OAuth、通讯录或保存飞书 token。
- 业务 App 不直接查询 Supabase Auth 或 IWish Auth 数据库。
- 员工离职/冻结后现有 App session 失效。
权限与业务数据
- 每个受保护服务端路由执行
requireAppAccess和必要的requirePermission。 - 前端隐藏按钮不能替代服务端权限检查。
- 跨 App permission 和 session 被拒绝。
- 业务数据归属、客户隔离和字段权限保留在 App 内。
-
clientAssignments只用于项目上下文,不替代 permission。 - 空
clientAssignments不会自动扩大权限或导致登录失败。
迁移清理
- 本地登录、注册、找回密码和密码重置入口已移除。
- 本地统一角色分配写入口已移除。
- 旧用户到 IWish Auth user ID 映射已复核。
- 旧密码 hash、session 和 secrets 有明确下线时间。
- 不保留 Auth Proxy 或长期双登录。
测试与运维
- 401、403、允许访问、角色撤销、App 停用和 secret 轮换测试通过。
- 内部员工和外部账号登录路径通过。
- 桌面和移动端 callback/登出流程通过。
- 日志和错误页面不泄漏 token、secret、密码或敏感个人信息。
- Auth API 超时、不可达和稳定错误码有明确用户体验。
- 监控覆盖登录成功率、401/403 异常、callback 错误和关键业务指标。
- 生产回滚命令、负责人和触发阈值已经演练。
AI Agent 交付
- Agent 读取
/llms.txt和/llms-full.txt后再修改代码。 - Agent 没有创建飞书/Supabase 直连或自定义 token 解析。
- Agent 使用真实 SDK 导出和当前 Manifest schema。
- Agent 输出变更文件、权限映射、验证命令和未决风险。
- 人工复核身份、权限、secrets 和数据授权边界。