gpt4 book ai didi

java - 使用 Spring Boot Security 在 REST API 中强制执行正确的 API key 和 JWT 用户 token

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:48 25 4
gpt4 key购买 nike

我目前正在 Spring Boot 中开发 REST API。

多个人会为此 API 构建客户端,因此我想通过 API Key 来区分它们。

用户还可以通过授权过程登录服务来获取 JWT(我知道这不是很 RESTful,但这是我能想到的最好方法)。

出于这些目的,我实现了三个过滤器类:

  • APIKeyAuthFilter 扩展 AbstractPreAuthenticatedProcessingFilter
  • JWTAuthenticationFilter 扩展 UsernamePasswordAuthenticationFilter
  • JWTAuthorizationFilter 扩展了 BasicAuthenticationFilter

并且一切单独运行都非常好。

问题是,安全层平等对待两种身份验证类型。所以例如我可以通过 API key 获取只有用户应该看到的内容,一旦我有了 JWT,就不需要 API key 了。

我猜问题出在我的 WebSecurityConfigurerAdapter 子类中的这段代码:

httpSecurity
.antMatcher("/**")
.csrf().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(apiKeyFilter)
.addFilter(new JWTAuthorizationFilter(authenticationManager()))
.authorizeRequests().anyRequest().authenticated();

或者我的整个方法是错误的,我需要以完全不同的方式添加 API key ?

最佳答案

Spring Security 有“授予权限”的概念,换句话说,系统授予身份验证的权限。

授予权限是 Spring Security 区分每个用户可以执行的操作的方式。一般来说,这些是在 a UserDetailsService 中授予的。或者,对于 JWT 和 Spring Security 5.1+,a JwtAuthenticationConverter .

您还问:“或者我的整个方法是错误的,我需要以完全不同的方式添加 API key ?” - 这个问题有点宽泛,但您可能会考虑将两种身份验证机制都生成 JWT 作为第一步。更好的步骤可能是将这个问题分离到授权服务器(它在发布 JWT 方面做得很好),以便您的服务可以只专注于验证 JWT。

关于java - 使用 Spring Boot Security 在 REST API 中强制执行正确的 API key 和 JWT 用户 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56639323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com