在微服务架构中,API安全认证是保障系统安全的核心环节。本文将对比分析几种主流的认证协议:JWT、OAuth2.0和API Key,并提供完整的API规范示例。
JWT认证协议
JWT(JSON Web Token)适用于内部微服务间认证,通过签名验证token有效性。
@RestController
public class AuthController {
@PostMapping("/login")
public ResponseEntity<JwtResponse> login(@RequestBody LoginRequest request) {
// 验证用户凭据
if (validateCredentials(request)) {
String token = Jwts.builder()
.setSubject(request.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + 86400000))
.signWith(SignatureAlgorithm.HS256, "secret")
.compact();
return ResponseEntity.ok(new JwtResponse(token));
}
return ResponseEntity.status(401).build();
}
}
OAuth2.0认证协议
OAuth2.0适用于第三方授权场景,提供更细粒度的权限控制。
# OpenAPI 3.0 规范示例
components:
securitySchemes:
oauth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://auth.example.com/oauth/authorize
tokenUrl: https://auth.example.com/oauth/token
scopes:
read: 允许读取数据
write: 允许写入数据
API Key认证协议
API Key适用于服务间调用,通过请求头传递密钥。
@Component
public class ApiKeyFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String apiKey = request.getHeader("X-API-KEY");
if (apiKey != null && isValidKey(apiKey)) {
filterChain.doFilter(request, response);
} else {
response.setStatus(401);
}
}
}
选择建议
- JWT:内部服务间认证,性能要求高
- OAuth2.0:第三方授权,权限控制复杂
- API Key:简单服务调用,易部署
推荐在微服务架构中结合使用多种认证方式,确保系统安全性和灵活性。

讨论