系列导读:本篇将深入讲解 API 安全设计的核心方法与最佳实践。
文章目录
- 目录
- 一、API 安全威胁
- 1.1 常见威胁
- 1.2 OWASP API Top 10
- 二、认证与授权
- 2.1 OAuth2 认证
- 2.2 JWT Token
- 2.3 RBAC 权限控制
- 三、API 网关安全
- 3.1 Kong 网关配置
- 3.2 限流配置
- 四、安全最佳实践
- 4.1 输入验证
- 4.2 敏感数据保护
- 4.3 安全响应头
- 总结
目录
- 一、API 安全威胁
- 二、认证与授权
- 三、API 网关安全
- 四、安全最佳实践
- 总结
一、API 安全威胁
1.1 常见威胁
| 威胁 | 说明 |
|---|---|
| 注入攻击 | SQL、命令注入 |
| 越权访问 | 水平/垂直越权 |
| 数据泄露 | 敏感信息暴露 |
| DDoS 攻击 | 拒绝服务 |
| 中间人攻击 | 数据窃取 |
1.2 OWASP API Top 10
1. 对象级别授权失效 2. 身份认证失效 3. 对象属性级别授权失效 4. 资源消耗无限制 5. 功能级别授权失效 6. 批量操作不受限 7. 注入攻击 8. 安全配置错误 9. 库组件版本过旧 10. 日志与监控不足二、认证与授权
2.1 OAuth2 认证
// OAuth2 配置@Configuration@EnableAuthorizationServerpublicclassAuthServerConfigextendsAuthorizationServerConfigurerAdapter{@Overridepublicvoidconfigure(ClientDetailsServiceConfigurerclients)throwsException{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
// JWT 生成publicStringgenerateToken(Useruser){returnJwts.builder().setSubject(user.getId()).claim("roles",user.getRoles()).setIssuedAt(newDate()).setExpiration(newDate(System.currentTimeMillis()+3600000)).signWith(SignatureAlgorithm.HS256,secretKey).compact();}// JWT 验证publicClaimsparseToken(Stringtoken){returnJwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();}2.3 RBAC 权限控制
// 权限注解@PreAuthorize("hasRole('ADMIN')")@DeleteMapping("/users/{id}")publicvoiddeleteUser(@PathVariableLongid){userService.delete(id);}// 动态权限@PreAuthorize("@permissionChecker.check(#id)")@GetMapping("/orders/{id}")publicOrdergetOrder(@PathVariableLongid){returnorderService.getById(id);}三、API 网关安全
3.1 Kong 网关配置
# Kong 插件配置_format_version:"3.0"services:-name:order-serviceurl:http://order-service:8080plugins:-name:jwtconfig:secret_is_base64:false-name:rate-limitingconfig:minute:100policy:local-name:request-size-limitingconfig:allowed_payload_size:103.2 限流配置
// 限流注解@RateLimiter(value=10,timeout=1,timeUnit=TimeUnit.SECONDS)@GetMapping("/api/orders")publicList<Order>listOrders(){returnorderService.list();}四、安全最佳实践
4.1 输入验证
// 参数校验@PostMapping("/users")publicUsercreateUser(@Valid@RequestBodyUserDTOdto){returnuserService.create(dto);}// DTO 校验规则@DatapublicclassUserDTO{@NotBlank(message="用户名不能为空")@Size(min=3,max=20,message="用户名长度3-20")privateStringusername;@Email(message="邮箱格式不正确")privateStringemail;@Pattern(regexp="^1[3-9]\\d{9}$",message="手机号格式不正确")privateStringphone;}4.2 敏感数据保护
// 数据脱敏@JsonSerialize(using=PhoneMaskSerializer.class)privateStringphone;// 138****8888// 加密存储@EncryptprivateStringidCard;// 日志脱敏log.info("用户登录: phone={}",MaskUtils.maskPhone(phone));4.3 安全响应头
@ConfigurationpublicclassSecurityHeaderConfig{@BeanpublicSecurityFilterChainfilterChain(HttpSecurityhttp)throwsException{http.headers().contentSecurityPolicy("default-src 'self'").and().xssProtection().and().frameOptions().deny().httpStrictTransportSecurity();returnhttp.build();}}总结
✅API 安全威胁:OWASP Top 10
✅认证与授权:OAuth2、JWT、RBAC
✅API 网关安全:Kong、限流
✅安全最佳实践:输入验证、数据保护、安全头
下篇预告:身份认证与授权架构设计
作者:刘~浪地球
系列:安全架构(二)
更新时间:2026-04-20