SuperAPI AI 工具集

adding-api-auth

安全与审计

查看项目

更新于 10-16 04:18

技能介绍

用途

该技能用于为 API 添加机器对机器(M2M)认证,基于 Scalekit 实现。它提供两条互斥的实现路径,需根据场景二选一,不可在同一流程中混用两段代码:

  • 路径 A:不透明 API 密钥(Opaque API keys)。适用于合作伙伴、CI、个人访问令牌等长期有效密钥场景,通过 Scalekit 令牌 API 进行校验。
  • 路径 B:OAuth 2.0 客户端凭证(Client Credentials)。适用于短期 JWT、基于 scope 的 M2M 访问控制、通过 JWKS 校验的场景。

若用户不明确,应询问一次:选择不透明 API 密钥还是客户端凭证 JWT。

主要能力

路径 A(不透明 API 密钥):

  • 初始化客户端,从环境变量读取 SCALEKIT_ENVIRONMENT_URL、SCALEKIT_CLIENT_ID、SCALEKIT_CLIENT_SECRET。
  • 创建组织范围(默认)或用户范围的令牌,支持 customClaims 自定义声明。
  • 校验令牌,返回组织/用户上下文、自定义声明、角色等。
  • 列出令牌,支持分页与按用户过滤。
  • 吊销令牌,即时生效且幂等。
  • 提供中间件模式保护端点(Flask 装饰器、Express 中间件、Gin 中间件)。
  • 数据过滤模式:组织范围按 organizationId 过滤;用户范围按 organizationId + userId 过滤;自定义声明按 customClaims 过滤。

路径 B(OAuth 2.0 客户端凭证):

  • 为组织注册 API 客户端,返回 client_id 与仅显示一次的 plain_secret,支持 scopes、audience、custom_claims、expiry。
  • API 客户端通过 /oauth/token 获取 bearer token(JWT)。
  • 服务端校验 JWT:Python SDK 自动处理 JWKS;Node.js 使用 jwks-rsa + jsonwebtoken 手动校验。
  • 在中间件中强制 scope 权限(Flask、Express 示例)。

使用方式

  1. 选择路径:长期密钥选 A,短期 JWT/scope 控制选 B。
  2. 检测语言:根据仓库文件(package.json → Node,requirements.txt/pyproject.toml → Python,go.mod → Go,pom.xml/build.gradle → Java)实现对应语言片段,跳过其他语言块。
  3. 确定编辑位置:客户端初始化放在现有 SDK 设置旁或共享 lib/scalekit 模块;校验中间件放在提供受保护资源的 API 路由层,优先扩展现有认证中间件。
  4. 路径 A 流程:应用创建令牌 → Scalekit 一次性返回 key + tokenId → 存储 tokenId 用于生命周期管理,客户存储 key → 客户端发送 Authorization: Bearer <key> → 服务端用 Scalekit 校验 → 按组织/用户上下文过滤数据。
  5. 路径 B 流程:注册客户端 → 获得 client_id + secret → API 客户端获取 bearer token → 服务端校验 JWT + scopes。

适用场景

  • 服务对服务集成(CI/CD、合作伙伴集成、内部工具)。
  • 个人访问令牌、按用户审计追踪、用户级限流。
  • 需要基于 scope 的访问控制、JWKS 校验或标准 OAuth 2.0 客户端凭证流程的 API。

限制与关键规则

  • 必须从环境变量读取凭据,不得硬编码。
  • 必须在每个传入 API 请求上服务端校验令牌,不得信任未验证令牌。
  • 明文令牌/plain_secret 仅在创建时返回一次,须安全存储,绝不记录或提交;生命周期操作使用 token_id 而非密钥本身。
  • 路径 A 与路径 B 不可混用代码。
  • 吊销即时生效且幂等。
  • 轮换应安全进行:创建新密钥 → 更新消费者 → 验证 → 吊销旧密钥。
  • 可使用过期时间限制密钥泄露影响范围。
  • 关于具体收费、价格、平台支持范围等事实,资料未提供。