Я создаю систему, которая регулярно экспортирует данные от имени многих пользователей во внешнюю систему с HTTP-запросами, аутентифицированными OAuth2.Использование OAuth2RestTemplate от имени нескольких пользователей
Я успешно был в состоянии общаться с внешним обслуживанием с использованием Spring Security oauth2, с OAuth2RestTemplate настроен так:
@Configuration
@EnableOAuth2Client
public class ExternalServiceConfiguration {
@Autowired
private OAuth2ClientContext oauth2Context;
@Bean
public OAuth2ProtectedResourceDetails credentials() {
ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
details.setAccessTokenUri("https://external-service.example.com/OAuth/Token");
details.setClientId("abcdefghijklmnopq");
details.setClientSecret("123456789123456789123456789");
details.setGrantType("client_credentials");
return details;
}
@Bean
public OAuth2RestTemplate externalServiceRestTemplate() {
return new OAuth2RestTemplate(credentials(), oauth2Context);
}
}
Это хорошо работает, и я могу привнести OAuth2RestTemplate боб в мой услуги:
@Autowired
@Qualifier("externalServiceRestTemplate")
private OAuth2RestTemplate restTemplate;
Однако в моем приложении у меня есть несколько пользователей, которым необходимо настроить собственные клиентские ключи. В случае, если это имеет значение, я делаю это пакетное задание, то есть оно выполняется за пределами обычного HTTP-запроса, а иногда и в том же контексте потока.
Это означает, что мне нужно будет иметь несколько OAuth2ProtectedResourceDetails и, предположим, несколько экземпляров OAuth2RestTemplate. Поскольку это то, что каждый пользователь будет настраивать самостоятельно, он должен выполняться динамически, на основе учетных данных клиента, сохраненных в базе данных.
Есть ли у кого-нибудь советы по настройке динамического числа экземпляров OAuth2RestTemplate эффективным, но потокобезопасным способом?
Интересно, есть ли какая-либо сборка в решениях используя OAuth2RestTemplate/Spring, который может выполнить то, что вы описываете, без создания экземпляра и кеширования произвольного количества OAuth2RestTemplates. Может быть, пользовательский AccessTokenProvider и другая реализация OAuth2RestTemplate? Мне бы хотелось услышать, что думают другие. – Vladimir