基于 apikey + timestamp + signature 的接口安全机制

API Key 接口调用秘钥

API Key(应用程序编程接口密钥) 是一种用于身份验证和授权的字符串代码,通常由服务提供商生成并分配给开发者或用户。它的主要作用是标识调用 API(应用程序编程接口)的请求来源,确保请求的合法性,并控制访问权限。

Sa-Token API Key 实现: https://sa-token.cc/doc.html#/plugin/api-key

API Key 具有以下特点:

  • 1、格式类似于会话 token,是一个随机字符串。
  • 2、每个 API Key 都会和具体的用户 id 发生绑定,后端可以查询到此 API Key 的授权人是谁。
  • 3、一个用户可以创建多个 API Key,用作不同的插件中。
  • 4、每个 API Key 都可以赋予不同的 scope 权限,以做到最小化授权。
  • 5、API Key 可以设置有效期,并且随时删除回收,做到灵活控制。

API 接口参数签名

在涉及跨系统接口调用时,我们容易碰到以下安全问题:

  • 请求身份被伪造。
  • 请求参数被篡改。
  • 请求被抓包,然后重放攻击。

Sa-Token API Sign 实现: https://sa-token.cc/doc.html#/plugin/api-sign

API Key 功能设计参考

  • 下面图中是DeepSeek 的 API Key 列表

    列表内是你的全部 API key,API key 仅在创建时可见可复制,请妥善保存。不要与他人共享你的 API key,或将其暴露在浏览器或其他客户端代码中。为了保护你的帐户安全,我们可能会自动禁用我们发现已公开泄露的 API key。

  • 创建 API Key
  • 修改 API Key
  • 删除 API Key

数据表结构

CREATE TABLE `t_app_api_key` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `app_id` bigint(20) NOT NULL COMMENT '应用ID',
    `title` varchar(100) DEFAULT NULL COMMENT '名称',
    `intro` VARCHAR(500) DEFAULT NULL COMMENT '介绍',
    `api_key` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'ApiKey 值',
    `expires_time` BIGINT(20) NOT NULL DEFAULT '-1' COMMENT 'ApiKey 到期时间,13位时间戳 (-1=永不过期)',
    `is_deleted` INT(1) NOT NULL DEFAULT '0' COMMENT '是否删除(0:未删除,1:已删除)',
    `creator` BIGINT(20) DEFAULT NULL COMMENT '创建人ID',
    `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `last_used_time` DATETIME DEFAULT NULL COMMENT '最后使用时间',
    PRIMARY KEY (`id`) USING BTREE,
    KEY `idx_app_id` (`app_id`) USING BTREE,
    KEY `idx_api_key` (`api_key`) USING BTREE,
    KEY `idx_creator` (`creator`) USING BTREE,
    KEY `idx_is_deleted` (`is_deleted`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用程序接口密钥表';

接口列表

  • /app/apikey/list
  • /app/apikey/create
  • /app/apikey/update
  • /app/apikey/delete
作者:Jeebiz  创建时间:2025-11-27 21:31
最后编辑:Jeebiz  更新时间:2025-12-11 13:19