提问人:Twin322 提问时间:8/23/2023 更新时间:8/24/2023 访问量:140
Spring Security 结合 oauth2 和 api 密钥过滤器
Spring Security Combining oauth2 and api key filter
问:
目前,我面临的问题是允许用户使用 X-API-KEY 标头或 oauth2 jwt 令牌授权 REST API。
当前的安全配置如下所示:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.addFilterBefore(apiKeyAuthFilter, BasicAuthenticationFilter.class);
http.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.csrf(AbstractHttpConfigurer::disable)
.cors(AbstractHttpConfigurer::disable)
.httpBasic(AbstractHttpConfigurer::disable)
.formLogin(AbstractHttpConfigurer::disable)
.headers(h -> h.httpStrictTransportSecurity(c -> c.requestMatcher(AnyRequestMatcher.INSTANCE)));
http.oauth2ResourceServer(server -> server.jwt(jwt ->
jwt.jwtAuthenticationConverter(
jwtGrantedAuthoritiesConverter()).decoder(jwtDecoder())
)
);
return http.build();
}
我遇到的问题是,即使我提供了一个有效的jwt并且oauth2ResourceServer很好,它仍然会触发apiKeyFilter,然后由于未设置标头而失败。
我读了很多关于多重身份验证的东西,但 Spring Security 很难获得。也许你有一个想法或一些资源可以查找。
答:
0赞
Chris Olive
8/24/2023
#1
一种选择可能是进行扩展并提供合适的 .然后,如果标头存在,则仅应用已添加的任何身份验证。apiKeyAuthFilter
AbstractAuthenticationProcessingFilter
RequestHeaderRequestMatcher
attemptAuthentication
public class ApiKeyAuthFilter extends AbstractAuthenticationProcessingFilter {
public ApiKeyAuthFilter() {
super(new RequestHeaderRequestMatcher("X-API-KEY"));
}
评论