行业知识
Spring Security的API Key实现SpringBoot 接口安全
2026-11-07 16:43:09
来源:互联网转载
Spring Security的API Key实现SpringBoot 接口安全
Spring Security ���供了各种机制来保护我们的 REST API。其中之一是 API 密钥。API 密钥是客户端在调用 API 调用时提供的令牌。
在本教程中,我们将讨论如何在Spring Security中实现基于API密钥的身份验证。
API Keys
一些REST API使用API密钥进行身份验证。API密钥是一个标记,用于向API客户端标识API,而无需引用实际用户。标记可以作为查询字符串或在请求头中发送。
一 添加依赖
org.springframework.boot spring-boot-starter-security
二 验证请求头的API KEY
public class AuthenticationService { private static final String AUTH_TOKEN_HEADER_NAME = "X-API-KEY"; private static final String AUTH_TOKEN = "Baeldung"; public static Authentication getAuthentication(HttpServletRequest request) { String apiKey = request.getHeader(AUTH_TOKEN_HEADER_NAME); if ((apiKey == null) || !apiKey.equals(AUTH_TOKEN)) { throw new BadCredentialsException("Invalid API Key"); } return new ApiKeyAuthentication(apiKey, AuthorityUtils.NO_AUTHORITIES); }} 在这里,我们检查请求头是否包含 API Key,如果为空 或者Key值不等于密钥,那么就抛出一个 BadCredentialsException。如果请求头包含 API Key,并且验证通过,则将密钥添加到安全上下文中,然后调用下一个安全过滤器。getAuthentication 方法非常简单,我们只是比较 API Key 头部和密钥是否相等。
为了构建 Authentication 对象,我们必须使用 Spring Security 为了标准身份验证而构建对象时使用的相同方法。所以,需要扩展 AbstractAuthenticationToken 类并手动触发身份验证。
三 扩展AbstractAuthenticationToken
为了成功地实现我们应用的身份验证功能,我们需要将传入的API Key转换为AbstractAuthenticationToken类型的身份验证对象。AbstractAuthenticationToken类实现了Authentication接口,表示一个认证请求的主体和认证信息。
public class ApiKeyAuthentication extends AbstractAuthenticationToken { private final String apiKey; public ApiKeyAuthentication(String apiKey, Collection
上一篇:怎么降低外云服务器延迟?
下一篇:小孩英语怎么读语音?