Безопасность загрузки Spring — разрешение пользовательских запросов с просроченным токеном JWT

У меня есть некоторые пользователи, которые обращаются к некоторым API с действительным токеном JWT, но поскольку их задачи на их стороне занимают гораздо больше времени, чем время истечения срока действия токена, когда они снова приходят к API, срок действия токена JWT уже истекает. Они не должны обновлять свой токен, они должны приходить с тем же токеном и обращаться к некоторым API даже с просроченными токенами.

Я использую spring.security.oauth2.resourceserver для аутентификации на нашем сервере авторизации.

Итак, чего я пытаюсь добиться, так это того, что если происхождение токена правильное и с этим хорошим форматом, мне нужно принять запрос даже с токеном с истекшим сроком действия.

Да, я знаю, что это не очень хороший подход, но если это возможно, пожалуйста, просветите меня.

Я уже читал о ClientHttpRequestInterceptor из здесь и погрузился в исходный код resource server, но не смог найти подходящего пути.


person Adil Karaöz    schedule 10.06.2021    source источник


Ответы (1)


Я настоятельно рекомендую вам не делать этого, потому что, если какой-то злонамеренный пользователь украдет у кого-то JWT, он сможет запросить защищенные ресурсы навсегда, потому что срок действия токена не истечет. Что вам нужно сделать в этом сценарии, так это обновить токен. Перейдите на страницу документы для обновления токена доступа.

Но для ознакомления можно предоставить пользовательский JwtDecoder, который может проверять JWT так, как вы хотите. Вы должны просто предоставить @Bean типа JwtDecoder с вашей конкретной конфигурацией, например:

@Bean
public JwtDecoder jwtDecoder() {
    OAuth2TokenValidator<Jwt> myCustomJwtValidator = new MyImplementationOfOAuth2TokenValidator();
    NimbusJwtDecoder jwtDecoder = NimbusJwtDecoder.withPublicKey(myPublicKey).build();
    jwtDecoder.setJwtValidator(myCustomJwtValidator);
    return jwtDecoder;
}

Более подробную информацию можно найти в документация.

person Marcus Hert da Coregio    schedule 10.06.2021
comment
Спасибо за ваш совет. Как я уже сказал, мне это нужно только для некоторых API. Вот почему мне нужно получить запрос в этот момент и приступить к его выполнению. Что-то вроде этого, например; .jwt (). decoder (jwtDecoder ()). and (). } }); Что мне нужно здесь, в точке журнала, это что-то вроде res.proceed - person Adil Karaöz; 14.06.2021