Ошибка обновления токена доступа из oauth2 resttemplate
У меня есть клиент oauth2 resttemplate в веб-приложении. Я только начал использовать oauth2, поэтому, возможно, что-то пропустил.
Некоторое время он работает нормально, но в какой-то момент я получаю исключение по этой причине:
ERROR at webservice: error="access_denied", error_description="Access token denied."
at org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport.retrieveToken(OAuth2AccessTokenSupport.java:142)
at org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider.refreshAccessToken(ResourceOwnerPasswordAccessTokenProvider.java:40)
at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.refreshAccessToken(AccessTokenProviderChain.java:172)
at org.springframework.security.oauth2.client.token.AccessTokenProviderChain.obtainAccessToken(AccessTokenProviderChain.java:109)
at org.springframework.security.oauth2.client.OAuth2RestTemplate.acquireAccessToken(OAuth2RestTemplate.java:221)
at org.springframework.security.oauth2.client.OAuth2RestTemplate.getAccessToken(OAuth2RestTemplate.java:173)
at mx.org.package.service.impl.TokenServiceImpl.obtenerNuevoToken(TokenServiceImpl.java:93)
Чтобы использовать веб-сервис, я настроил и внедрил компонент из конфигурации xml типа org.springframework.security.oauth2.client.OAuth2RestTemplate
,
Код, указанный в трассировке стека, следующий:
public synchronized String getToken() {
System.err.println("FECHA TOKEN: " + fechaExpiracionToken);
if (oAToken == null || oAToken.isExpired()) {
obtenerNuevoToken();
}
return token;
}
private void obtenerNuevoToken() {
WSToken wsToken = null;
ParametrosRequestToken parametros = new ParametrosRequestToken();
parametros.setClientId(clientId);
parametros.setGrantType("password");
parametros.setUsername(wsUsername);
parametros.setPassword(wsPass);
OAuth2AccessToken tToken = restTemplate.getAccessToken(); // THIS IS LINE 93
fechaExpiracionToken = LocalDateTime.now();
oAToken = tToken;
token = oAToken.toString();
}
Когда я запрашиваю услугу, я использую ее так:
result = restTemplate.postForObject(
urlWebService + "?access_token=" + tokenService.getToken(),
params, WebServiceResult.class);