Add timeouts for JWT decoder in AadResourceServerConfiguration#49312
Add timeouts for JWT decoder in AadResourceServerConfiguration#49312berry120 wants to merge 2 commits into
Conversation
Set connection and read timeouts for JWT decoder.
|
Thank you for your contribution @berry120! We will review the pull request and get back to you soon. |
|
Hi, @berry120 . Thanks for creating this PR. How about using public final class RestTemplateAutoConfiguration {
@Bean
@Lazy
RestTemplateBuilderConfigurer restTemplateBuilderConfigurer(
ObjectProvider<ClientHttpRequestFactoryBuilder<?>> clientHttpRequestFactoryBuilder,
ObjectProvider<HttpClientSettings> httpClientSettings,
ObjectProvider<ClientHttpMessageConvertersCustomizer> convertersCustomizers,
ObjectProvider<RestTemplateCustomizer> restTemplateCustomizers,
ObjectProvider<RestTemplateRequestCustomizer<?>> restTemplateRequestCustomizers) {
RestTemplateBuilderConfigurer configurer = new RestTemplateBuilderConfigurer();
configurer.setRequestFactoryBuilder(clientHttpRequestFactoryBuilder.getIfAvailable());
configurer.setClientSettings(httpClientSettings.getIfAvailable());
configurer.setHttpMessageConvertersCustomizers(convertersCustomizers.orderedStream().toList());
configurer.setRestTemplateCustomizers(restTemplateCustomizers.orderedStream().toList());
configurer.setRestTemplateRequestCustomizers(restTemplateRequestCustomizers.orderedStream().toList());
return configurer;
}
@Bean
@Lazy
@ConditionalOnMissingBean
RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer restTemplateBuilderConfigurer) {
return restTemplateBuilderConfigurer.configure(new RestTemplateBuilder());
}
} |
There was a problem hiding this comment.
Pull request overview
This PR updates the Spring Cloud Azure AAD resource server auto-configuration to ensure the internally created NimbusJwtDecoder uses explicit HTTP connect/read timeouts when retrieving the JWK set, preventing potentially long hangs when network timeouts aren’t otherwise configured.
Changes:
- Introduces default connect and read timeout values for the
NimbusJwtDecoderJWK retrieval path. - Applies these timeouts via
RestTemplateBuilderwhen constructing theRestOperationsused by the decoder.
| private static final Duration JWT_DECODER_CONNECT_TIMEOUT = Duration.ofMillis(500); | ||
| private static final Duration JWT_DECODER_READ_TIMEOUT = Duration.ofMillis(500); |
| .restOperations(createRestTemplate(restTemplateBuilder | ||
| .connectTimeout(JWT_DECODER_CONNECT_TIMEOUT) | ||
| .readTimeout(JWT_DECODER_READ_TIMEOUT))) | ||
| .build(); |
|
Closing in favor of #49329 |
Set default read & connect timeouts on NimbusJwtDecoder.
Description
This spring security issue highlighted the potential for 15 minute (or longer) hangs due to the absence of explicit connect & read timeouts on the NimbusJwtDecoder. This is fixed in Spring Security, however the Azure SDK explicitly overrides
restOperationsin the NimbusJwtDecoder it creates, meaning we need the fix explicitly here, too.As a current workaround, the following can be defined as a bean on a configuration class:
However, this isn't ideal as it applies globally, and has to be specified in each project.
All SDK Contribution checklist:
General Guidelines and Best Practices
Testing Guidelines