В качестве серверного приложения я использую весеннюю загрузку. Я сохранил access_token, refresh_token и access_id нашего клиента в своей базе данных postgresql.
Вот мой код пытается получить новый токен доступа, если срок действия токена истек.
public void refreshGoogleIdToken(GoogleAuthEntity googleAuthEntity) {
LOGGER.debug("GoogleAuthService.refreshGoogleIdToken()");
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(transport)
.setJsonFactory(jsonFactory)
.setClientSecrets(googleAuthClientId, googleAuthClientSecret)
.build();
credential.setAccessToken(googleAuthEntity.getAccessToken());
credential.setRefreshToken(googleAuthEntity.getRefreshToken());
try {
if (credential.refreshToken()) {
Long newExpireTime = credential.getExpirationTimeMilliseconds();
String newAccessToken = credential.getAccessToken();
String newRefreshToken = credential.getRefreshToken();
LOGGER.debug("NewAccessToken: " + newAccessToken);
LOGGER.debug("NewRefreshToken: " + newRefreshToken);
LOGGER.debug("NewExpireTime: " + newExpireTime);
}
} catch (IOException e) {
LOGGER.debug("GoogleAuthService.refreshGoogleIdToken() - IOException");
e.printStackTrace();
}
}
Google возвращает ошибку 400 с описанием: 400 Bad Request.
{
"error" : "invalid_grant",
"error_description" : "Bad Request"
}
Какую ошибку я совершил? Спасибо
Я использовал OAuth2 с фреймворком Spring и столкнулся с этой ошибкой «Недействительный грант» только в том случае, если токен обновления недействителен, истек, отозван или не соответствует URI перенаправления, используемому в запросе авторизации, или выдается другому клиенту
В вашей ситуации я думаю, вам следует удалить сохраненный токен обновления / исправить его и снова отладить свой код. Это может быть из-за неправильной информации о токене, хранящейся в вашей базе данных PostgreSQL во время тестирования.