Я занимаюсь разработкой OAuth2.0 "CLIENT" приложения, которое вызывает некоторые API (защищено oauth2.0).
Я использую OAuth2.0RestTemplate, который содержит CLIENT_ID, CLIENT_SECRET, имя пользователя и пароль. Код для вызова защищенных API OAuth2.0 выглядит следующим образом:
@Bean
OAuth2ProtectedResourceDetails resource() {
ResourceOwnerPasswordResourceDetails resource = new ResourceOwnerPasswordResourceDetails();
List<String> Scopes = new ArrayList<String>(2);
Scopes.add("read");
Scopes.add("write");
resource.setClientAuthenticationScheme(AuthenticationScheme.header);
resource.setId("*****");
resource.setAccessTokenUri(tokenUrl);
resource.setClientId("*****");
resource.setClientSecret("*****");
resource.setGrantType("password");
resource.setScope(Scopes);
resource.setUsername("*****");
resource.setPassword("*****");
return resource;
}
@Autowired
private OAuth2RestTemplate restTemplate;
Map<String, String> allCredentials = new HashMap<>();
allCredentials.put("username", "***");
allCredentials.put("password", "***");
restTemplate.getOAuth2ClientContext().getAccessTokenRequest().setAll(allCredentials);
ParameterizedTypeReference<List<MyObject>> responseType = new ParameterizedTypeReference<List<MyObject>>() { };
ResponseEntity<List<MyObject>> response = restTemplate.exchange("https://***.*****.com/api/*****/*****",
HttpMethod.GET,
null,
responseType);
AllCities all = new AllCities();
all.setAllCities(response.getBody());
Как вы можете видеть каждый раз, когда я хочу позвонить в службу, код получает новый ЖЕЛЕЗНЫЙ ДОСТУП, который совершенно неверен !!! У меня вопрос: как я могу автоматически получать и сохранять выданный токен в своем приложении, использовать его до истечения срока его действия, а затем автоматически получать новый?
С другой стороны, мой токен содержит только токен доступа и не содержит токена обновления (я не знаю почему !!! это так странно !!!)