API 安全设计最佳实践

系列导读:本篇将深入讲解 API 安全设计的核心方法与最佳实践。


文章目录

    • 目录
    • [一、API 安全威胁](#一、API 安全威胁)
      • [1.1 常见威胁](#1.1 常见威胁)
      • [1.2 OWASP API Top 10](#1.2 OWASP API Top 10)
    • 二、认证与授权
      • [2.1 OAuth2 认证](#2.1 OAuth2 认证)
      • [2.2 JWT Token](#2.2 JWT Token)
      • [2.3 RBAC 权限控制](#2.3 RBAC 权限控制)
    • [三、API 网关安全](#三、API 网关安全)
      • [3.1 Kong 网关配置](#3.1 Kong 网关配置)
      • [3.2 限流配置](#3.2 限流配置)
    • 四、安全最佳实践
      • [4.1 输入验证](#4.1 输入验证)
      • [4.2 敏感数据保护](#4.2 敏感数据保护)
      • [4.3 安全响应头](#4.3 安全响应头)
    • 总结

目录


一、API 安全威胁

1.1 常见威胁

威胁 说明
注入攻击 SQL、命令注入
越权访问 水平/垂直越权
数据泄露 敏感信息暴露
DDoS 攻击 拒绝服务
中间人攻击 数据窃取

1.2 OWASP API Top 10

复制代码
1. 对象级别授权失效
2. 身份认证失效
3. 对象属性级别授权失效
4. 资源消耗无限制
5. 功能级别授权失效
6. 批量操作不受限
7. 注入攻击
8. 安全配置错误
9. 库组件版本过旧
10. 日志与监控不足

二、认证与授权

2.1 OAuth2 认证

java 复制代码
// OAuth2 配置
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
    
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
            .withClient("client-app")
            .secret("{bcrypt}$2a$10$...")
            .authorizedGrantTypes("authorization_code", "refresh_token")
            .scopes("read", "write")
            .redirectUris("https://app.example.com/callback");
    }
}

2.2 JWT Token

java 复制代码
// JWT 生成
public String generateToken(User user) {
    return Jwts.builder()
        .setSubject(user.getId())
        .claim("roles", user.getRoles())
        .setIssuedAt(new Date())
        .setExpiration(new Date(System.currentTimeMillis() + 3600000))
        .signWith(SignatureAlgorithm.HS256, secretKey)
        .compact();
}

// JWT 验证
public Claims parseToken(String token) {
    return Jwts.parser()
        .setSigningKey(secretKey)
        .parseClaimsJws(token)
        .getBody();
}

2.3 RBAC 权限控制

java 复制代码
// 权限注解
@PreAuthorize("hasRole('ADMIN')")
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
    userService.delete(id);
}

// 动态权限
@PreAuthorize("@permissionChecker.check(#id)")
@GetMapping("/orders/{id}")
public Order getOrder(@PathVariable Long id) {
    return orderService.getById(id);
}

三、API 网关安全

3.1 Kong 网关配置

yaml 复制代码
# Kong 插件配置
_format_version: "3.0"

services:
- name: order-service
  url: http://order-service:8080
  plugins:
  - name: jwt
    config:
      secret_is_base64: false
  - name: rate-limiting
    config:
      minute: 100
      policy: local
  - name: request-size-limiting
    config:
      allowed_payload_size: 10

3.2 限流配置

java 复制代码
// 限流注解
@RateLimiter(value = 10, timeout = 1, timeUnit = TimeUnit.SECONDS)
@GetMapping("/api/orders")
public List<Order> listOrders() {
    return orderService.list();
}

四、安全最佳实践

4.1 输入验证

java 复制代码
// 参数校验
@PostMapping("/users")
public User createUser(@Valid @RequestBody UserDTO dto) {
    return userService.create(dto);
}

// DTO 校验规则
@Data
public class UserDTO {
    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 20, message = "用户名长度3-20")
    private String username;
    
    @Email(message = "邮箱格式不正确")
    private String email;
    
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
    private String phone;
}

4.2 敏感数据保护

java 复制代码
// 数据脱敏
@JsonSerialize(using = PhoneMaskSerializer.class)
private String phone;  // 138****8888

// 加密存储
@Encrypt
private String idCard;

// 日志脱敏
log.info("用户登录: phone={}", MaskUtils.maskPhone(phone));

4.3 安全响应头

java 复制代码
@Configuration
public class SecurityHeaderConfig {
    
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.headers()
            .contentSecurityPolicy("default-src 'self'")
            .and()
            .xssProtection()
            .and()
            .frameOptions().deny()
            .httpStrictTransportSecurity();
        return http.build();
    }
}

总结

API 安全威胁 :OWASP Top 10

认证与授权 :OAuth2、JWT、RBAC

API 网关安全 :Kong、限流

安全最佳实践:输入验证、数据保护、安全头

下篇预告身份认证与授权架构设计


作者 :刘~浪地球
系列 :安全架构(二)
更新时间:2026-04-20

相关推荐
studyrunner9 小时前
【AI开源】reverse-skill 实战教程:为 Claude Code、Cursor、Cline、Codex 配置 AI 逆向与安全技能路由
人工智能·安全·开源
xiaoxiangsiyan9 小时前
LNMP + Redis Sentinel 高可用架构部署手册(续)
运维·网络·数据库·redis·缓存·架构·sentinel
BullSmall10 小时前
scanoss-engine 本地最简部署 & 扫描命令(Linux/Anolis OS)
linux·运维·服务器
陈聪.10 小时前
Keepalived 高可用集群:从原理到企业级实践
运维
bellus-10 小时前
Ubuntu 26.04 Miniforge3 安装与配置完整指南
linux·运维·ubuntu
5757710 小时前
户外净水器过滤效果怎么看:对照孔径、除菌率和认证三项再下单
运维·服务器
瞬间&永恒~10 小时前
【Docker】(四)Namespace 详解
运维·docker·容器
RD_daoyi11 小时前
Google核心算法不再通知!全年持续滚动更新
大数据·服务器·前端·网络·搜索引擎·.net
科技绘图11 小时前
特种工业场景安全升级:UWB定位设备关键选型指标与供给侧格局解析
大数据·安全
爱喝水的木子11 小时前
自建RustDesk私有服务器全攻略
运维·服务器