У нас есть служба API, которая имеет несколько открытых API, и есть несколько персон, которые / которые могут получить доступ к нашей службе.
- Пользователи - кому нужна учетная запись в нашей системе -> необходимо пройти проверку подлинности с помощью нашей службы Identity Provider Service (Keycloak) с токеном JWT.
- Регулируемая система - которая должна быть заверенным с центральной властью, поддерживаемой некоторой стороной.
- Внутренняя служба для связи службы -> аутентификация с использованием того же Keycloak.
- Временный токен JWT, выданный той же службой перед созданием учетной записи пользователя, когда пользователь в цифровой форме подтвердил номер мобильного телефона.
Я пытался получить AuthenticationWebFilter для Для каждого типа проверки подлинности и настройки с помощью Pathmatchers, хотя проверка подлинности выполнялась правильным веб-фильтром проверки подлинности, запрос продолжает проходить через другой фильтр проверки подлинности, и в результате получается unauthorized
.
Фрагмент конфигурации:
public class Configuration {
@Bean
@Order(1)
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity httpSecurity,
@Qualifier("userCreationFilter")
AuthenticationWebFilter userCreationFilter) {
final String[] WHITELISTED_URLS = {"/**.json",
"/users/verify",
"/users/permit",
"/sessions",
"/internal/xxxxx/**",
"/**.html",
"/**.js",
"/**.yaml",
"/**.css",
"/**.png"};
httpSecurity.authorizeExchange().pathMatchers(WHITELISTED_URLS).permitAll();
httpSecurity.addFilterBefore(userCreationFilter, SecurityWebFiltersOrder.AUTHENTICATION)
.authorizeExchange()
.pathMatchers("/users")
.authenticated();
httpSecurity.httpBasic().disable().formLogin().disable().csrf().disable().logout().disable();
return httpSecurity.build();
}
@Bean
@Order(2)
public SecurityWebFilterChain securityWebFilterChain2(ServerHttpSecurity httpSecurity,
@Qualifier("managerFilter")
AuthenticationWebFilter managerFilter) {
httpSecurity.addFilterBefore(managerFilter, SecurityWebFiltersOrder.AUTHENTICATION)
.authorizeExchange()
.pathMatchers("/xxxxx/**",
"/providers",
"/xxxxx/**/approve",
"/xxxx/**/xxxxx").authenticated();
return httpSecurity.build();
}
}
Сейчас у нас нет ролей как таковых.
Я попытался сохранить всю конфигурацию в одном компоненте SecurityWebFilterChain и попытался добавить addWebFilterAt, но безуспешно.
Чего мне не хватает? Должен ли я сделать это по-другому?