使用API Key保护Spring Boot REST API安全

文摘   2024-10-22 20:00   新疆  

最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。

环境:Spring Boot3.2.5



1. 简介

安全性在REST API开发中起着至关重要的作用。一个不安全的REST API可能会直接暴露后端系统的敏感数据。因此,我们务必确保API的安全性。Spring Security提供了多种机制来保护我们的REST API,其中之一是API Key。API Key是客户端在调用API时提供的一种令牌(Token)。

REST API 是无状态的,因此不应该使用会话或 Cookies。相反,应该使用基本认证(Basic Authentication)、API Key、JWT(JSON Web Token)或基于 OAuth2 的令牌来确保其安全性,下面简单介绍这几种认证:

Basic Authentication

基本认证是一种简单的认证方案。客户端发送带有 Authorization 头的 HTTP 请求,该头包含单词 Basic,后面跟着一个空格和一个 Base64 编码的字符串 username:password。基本认证只有在与其他安全机制(如 HTTPS/SSL)结合使用时才被认为是安全的,也就是说你要使用Basic认证就必须使用HTTPS协议。

API Key

API Key是一种令牌,它在不引用实际用户的情况下识别 API 客户端。该令牌可以通过查询字符串或请求头发送。与基本认证类似,可以使用 SSL 来隐藏密钥。

OAuth2

OAuth2 是 REST API 安全的事实标准。它是一个开放的认证和授权标准,允许资源所有者通过访问令牌授予客户端对私有数据的访问权限。

在了解完以上3中认证方式后,接下来我们将详细介绍API Key的应用。

2. 实战案例

2.1 依赖管理

我们是基于Spring Security实现,所以需要引入如下依赖

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-security</artifactId></dependency>

在默认情况下,当我们引入了security后将会对整个应用的任何请求进行认证。接下来,我们将一步一步实现有针对性的对REST API进行认证。

2.2 自定义过滤器

我们将从请求中header中获取API key,然后根据我们的配置检查该key。我们要通过自定义过滤器来获取及校验key的合法性。如果验证通过则会设置Security 上下文信息表示认证通过,否则直接输出错误信息。

public class AuthenticationFilter extends GenericFilterBean {
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { try { Authentication authentication = AuthenticationService.getAuthentication((HttpServletRequest) request);      AuthenticationCheck.success(authentication) ; } catch (Exception exp) {      // 认证未通过处理      AuthenticationCheck.failure(response) ; return ;    } filterChain.doFilter(request, response) ; }}

在该过滤器中,我们通过自定义的AuthenticationService对当前的请求进行验证(下面会介绍该类),如果发生异常则在catch中直接向客户端输出错误信息,不再进行向下执行。

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章