You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用API新增API Key与API Secret身份认证实现咨询

Spring Boot 第三方客户端API认证落地方案

现有系统已经基于OAuth2+2FA实现了用户认证,优先复用现有OAuth2能力即可,无需重构原有认证逻辑,也能避免两套体系冲突。

1. 依赖准备

如果项目已经引入Spring Security OAuth2 Resource Server可以直接跳过,否则添加如下依赖:

<!-- Maven 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

2. 第三方客户端信息存储

新建客户端管理表,核心字段如下:

  • 客户端名称
  • API Key(设置唯一索引,用于快速查询客户端)
  • API Secret(加密存储,用BCrypt或同类不可逆加密算法,禁止明文存储)
  • 权限范围(用来控制该客户端可调用的接口范围)
  • 启用状态
  • 有效期

3. 令牌颁发接口开发

开发公开的POST接口/api/v1/client/token,仅接受application/x-www-form-urlencoded格式请求,入参要求包含client_name、api_key、api_secret三个字段。
接口内部逻辑:

  • 根据传入的api_key查询数据库中对应且处于启用状态的客户端记录
  • 把传入的api_secret做哈希加密后和库中存储的加密值比对,不一致直接返回认证失败
  • 比对通过后生成JWT令牌,配置规则:
    • 过期时间显式设置为3600秒(1小时)
    • payload中新增自定义字段token_type = CLIENT,和原有用户身份的令牌做明确区分
    • 复用现有OAuth2体系的签名密钥对令牌签名,无需新增独立的密钥管理逻辑

注意:该接口要配置为无需认证即可访问,同时添加接口限流规则,避免暴力破解API Key和Secret

4. 多认证体系适配

修改Spring Security的过滤器链配置,新增客户端令牌校验过滤器,执行顺序排在原有用户OAuth2认证过滤器之后:
过滤器逻辑:

  • 从请求头Authorization: Bearer {令牌}中提取传入的身份凭证
  • 先执行原有用户OAuth2认证逻辑,校验通过直接放行,走原有用户权限控制逻辑
  • 原有用户认证失败的情况下,判断令牌的token_type是否为客户端令牌:
    • 校验令牌签名、有效期是否合法
    • 校验对应客户端是否仍处于启用状态
    • 所有校验通过后,把客户端的权限信息塞入SecurityContext,完成身份认证
  • 后续接口权限控制直接复用Spring Security的@PreAuthorize注解,区分用户权限和客户端权限即可

5. 可选优化点

  • 生成令牌的同时存入Redis,设置和JWT相同的过期时间,需要主动吊销客户端令牌时直接删除Redis中的对应记录即可
  • 新增API Key和Secret的定期轮换提醒,降低泄露风险
  • 客户端调用日志全量留存,方便异常问题排查

内容的提问来源于stack exchange,提问作者Joy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:54:01