SuperAPI AI 工具集

implementing-access-control

安全与审计

查看项目

更新于 10-16 04:32

技能介绍

该技能用于在认证已可用的应用上实现服务端授权:通过检查用户访问令牌中的角色与权限,控制对路由和操作的访问。

适用时机:认证已通过 implementing-saaskit / managing-saaskit-sessions(或等价方案)正常工作,需要按角色和权限授权时。

核心约束:信任任何解码后的声明前必须先验证访问令牌(过期时间、签发者/受众);角色与权限校验必须在服务端路由边界强制执行,不能仅依赖客户端授权;缺少所需角色或权限时应返回 403,绝不默认放行。

前提条件:认证已可用;已用环境凭据初始化 Scalekit 客户端;令牌存储方式与相关技能一致——若 Cookie 存加密令牌,沿用应用自有的 decrypt(...) 辅助函数;若存原始 JWT 或使用 Authorization: Bearer,则跳过解密。优先复用已有会话验证中间件,在其上叠加角色/权限守卫,而非重写加密逻辑。

工作流程:验证令牌并解码出 sub、oid、roles、permissions;将归一化认证上下文挂到请求上(如 req.user = { id, organizationId, roles, permissions });在路由边界用角色校验(粗粒度)与权限校验(细粒度,通常为 resource:action 格式)执行授权;必要时组合多种检查(如管理员绕过、资源归属、敏感操作的时间限制)。

参考实现提供 Node.js(Express 风格中间件)与 Python(装饰器)两种模式,用法如:app.get("/api/projects", validateAndExtractAuth, requirePermission("projects:read"), handler)、app.get("/api/admin/users", validateAndExtractAuth, requireRole("admin"), handler)。

验证方式:用登录时写入的 Cookie 值或 Bearer 令牌发起请求,管理员会话应返回 200,普通成员应返回 403,无效或缺失令牌应返回 401。常见模式包括:角色划分粗粒度层级(admin/manager/member),权限描述细粒度操作(projects:create、tasks:assign),管理员绕过权限检查,资源归属限制编辑。若未返回 403,需检查中间件顺序:validateAndExtractAuth 必须在 requireRole/requirePermission 之前运行。

限制:未提供具体价格、平台支持范围与性能数据;实现依赖 Scalekit 客户端及相关认证技能的前置配置。