В каком сервисе следует выполнять фильтрацию и проверку токена JWT?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 В каком сервисе следует выполнять фильтрацию и проверку токена JWT?

Сообщение Anonymous »


Пользовательская служба генерирует токен jwt после регистрации пользователя. Существует служба API-шлюза, которая отправляет запросы к определенным службам. В api-шлюзе я выполняю фильтрацию безопасности с проверкой jwt:

@Override public GatewayFilter apply (конфигурация конфигурации) { return (((обмен, цепочка) -> { if (!exchange.getRequest().getHeaders().containsKey(HttpHeaders.AUTHORIZATION)) { throw new RuntimeException("отсутствует заголовок авторизации"); } Строка authHeader = Exchange.getRequest().getHeaders().get(HttpHeaders.AUTHORIZATION).get(0); if (authHeader != null && authHeader.startsWith("Bearer")) { authHeader = authHeader.substring(7); } jwtUtil.validateToken(authHeader); вернуть цепочку.фильтр(обмен); })); } public Boolean validateToken(String token) { пытаться { // Разбираем и проверяем токен log.info("При проверке токена"); Jws утверждаетJws = Jwts.parserBuilder() .setSigningKey(getSigningKey()) .строить() .parseClaimsJws(токен); вернуть истину; } catch (Исключение е) { throw new RuntimeException("Проверка токена JWT не удалась: " + e.getMessage()); } } Нужно ли после этого снова выполнять эту проверку в последующих микросервисах? Или только в api-gateway достаточно? Кроме того, нужно ли мне хранить эту аутентификацию в держателе контекста безопасности? Если да, то не следует ли это сделать во всех микросервисах, поскольку все они имеют собственный держатель контекста безопасности?

Я не понимаю, почему после успешной проверки токена jwt в API-шлюзе пользователь по-прежнему не может посетить защищенную конечную точку другого микросервиса (403 запрещено). SecurityFilterChain настраивается в сервисе пользователя.

@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) выдает исключение { http .csrf(AbstractHttpConfigurer::отключить) .authorizeHttpRequests(authorizeRequests -> авторизовать запросы .requestMatchers("/login/email").permitAll() .requestMatchers("/register").permitAll() .requestMatchers("/registrationConfirm").permitAll() .anyRequest().аутентифицированный() ) .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authenticationProvider(провайдер аутентификации) вернуть http.build(); } Я написал API-шлюз и пользовательские микросервисы (при необходимости могу всё подключить).
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»