基于 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
最后编辑:Jeebiz 更新时间:2025-12-11 13:19