В настоящее время я работаю над REST API в Spring Boot.
Несколько человек будут создавать клиенты для этого API, поэтому я хочу выделить их по ключам API.
Также пользователивозможность войти в службу через процесс авторизации, чтобы получить JWT (я знаю, что это не очень RESTful, но я думаю, что это лучший способ сделать это).
Я реализовал три класса фильтров для этих целей:
APIKeyAuthFilter extends AbstractPreAuthenticatedProcessingFilter
JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilter
JWTAuthorizationFilter extends BasicAuthenticationFilter
и все работает довольно хорошо индивидуально.
Проблема в том, что уровень безопасности одинаково обрабатывает оба типа аутентификации.Так, например, я могу получать вещи, которые должны видеть только пользователи, только через API-ключ, и нет необходимости в API-ключе, когда у меня есть JWT.
Я думаю, проблема заключается в этом коде в моем подклассе WebSecurityConfigurerAdapter
:
httpSecurity
.antMatcher("/**")
.csrf().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(apiKeyFilter)
.addFilter(new JWTAuthorizationFilter(authenticationManager()))
.authorizeRequests().anyRequest().authenticated();
Или весь мой подход неверен, и мне нужно добавить ключи API совершенно по-другому?