首页 > 解决方案 > 如何在服务器端(JAVA)刷新 access_token?

问题描述

我正在使用 spring boot 作为我的后端应用程序。我已将客户的access_tokenrefresh_tokenaccess_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"
}

我犯了什么错误?谢谢

标签: spring-bootgoogle-drive-apigoogle-signin

解决方案


我一直在将 OAuth2 与 Spring 框架一起使用,并且仅在刷新令牌无效、过期、撤销或与授权请求中使用的重定向 uri 不匹配或发给另一个客户端的情况下遇到此错误“无效授权”

对于您的情况,我认为您应该删除存储的刷新令牌/纠正它并再次调试您的代码。这可能是由于测试时存储在 PostgreSQL 数据库中的错误令牌信息造成的。


推荐阅读