Есть ли чистый способ изменить JWKSetCache TTL по умолчанию в Nimbus Jose JWT? - PullRequest
0 голосов
/ 21 марта 2020

Наш сервер авторизации (Auth0), по сообщениям, не меняет набор JWK (возможно, когда-либо?). Для повышения производительности мы хотели бы кэшировать ключи с удаленного сервера аутентификации гораздо дольше, чем жестко заданное значение по умолчанию (5 минут) в DefaultJWKSetCache , поскольку эти ключи необходимы для проверки токенов для всех запросов, и каждый раз, когда они запрашиваются, добавляет значительную задержку. Обратите внимание, что класс библиотеки JWT-декодера - final.

. Путь наименьшего сопротивления для уменьшения количества запросов к серверу авторизации, по-видимому, заключается в использовании прокси с локальным маршрутом, который будет обрабатывать кэширование. Есть ли лучший способ?

Версия: Spring Boot 2.2.5

// Relevant imports (omitted) from:
// import org.springframework.security.oauth2.core
// import org.springframework.security.oauth2.jwt

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${auth0.audience}")
    private String audience;
    @Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
    private String issuer;

    @Override
    public void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
            .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
            .authorizeRequests()
                .antMatchers("/api/**").authenticated()
                .anyRequest().permitAll()
                .and()
            .cors()
                .and()
            .csrf()
                .disable()
            .oauth2ResourceServer()
                .jwt();
        // @formatter:on
    }

    @Bean
    JwtDecoder jwtDecoder() {
        NimbusJwtDecoder jwtDecoder = (NimbusJwtDecoder) JwtDecoders.fromOidcIssuerLocation(issuer);

        OAuth2TokenValidator<Jwt> audienceValidator = new AudienceValidator(audience);
        OAuth2TokenValidator<Jwt> withIssuer = JwtValidators.createDefaultWithIssuer(issuer);
        OAuth2TokenValidator<Jwt> withAudience = new DelegatingOAuth2TokenValidator<>(withIssuer, audienceValidator);

        jwtDecoder.setJwtValidator(withAudience);

        return jwtDecoder;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...