spring-boot - 如何在服务器端(JAVA)刷新 access_token?
问题描述
我正在使用 spring boot 作为我的后端应用程序。我已将客户的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();
}
}
谷歌返回400错误,描述为:400 Bad Request
{
"error" : "invalid_grant",
"error_description" : "Bad Request"
}
我犯了什么错误?谢谢
解决方案
我一直在将 OAuth2 与 Spring 框架一起使用,并且仅在刷新令牌无效、过期、撤销或与授权请求中使用的重定向 uri 不匹配或发给另一个客户端的情况下遇到此错误“无效授权”
对于您的情况,我认为您应该删除存储的刷新令牌/纠正它并再次调试您的代码。这可能是由于测试时存储在 PostgreSQL 数据库中的错误令牌信息造成的。
推荐阅读
- sql - Join Two Tables based on a range of dates
- javascript - HTML / D3.js - 如何从鼠标光标而不是左上角缩放
- user-interface - Katalon Studio 中录制的脚本的播放问题
- sql - SQL Inner join into counting distinct
- python - ValueError:无法将输入数组从形状(10,1)广播到形状(10)
- python - 有没有办法简化这个 python 代码?
- c++ - 如何将输出数字分为奇数和偶数?
- python - 如何使用 boto3 获取用户的当前密码年龄
- java - 访问 getter 是私有的类的字段
- c++ - 打印所有 A 链表的元素 (C++)