Ошибка обновления токена доступа из 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);

0 ответов

Другие вопросы по тегам