Google bigquery 尝试从服务帐户获取访问令牌时出错

Google bigquery 尝试从服务帐户获取访问令牌时出错,google-bigquery,Google Bigquery,我的代码是 INFO: com.google.api.client.auth.oauth2.TokenResponseException: 400 OK { "error" : "invalid_grant" } 此方法运行正常,但突然出现错误。可能的原因: 1) 由于服务器上的时间不正确,我遇到了类似的问题。确保系统时钟同步 2) 您应该重用第一次成功身份验证后获得的访问令牌。如果您以前的令牌尚未过期,您将收到一个无效的_grant错误。将其缓存在某个地方,以便可以重复使用 3) 确保您

我的代码是

INFO: com.google.api.client.auth.oauth2.TokenResponseException: 400 OK
{
  "error" : "invalid_grant"
}
此方法运行正常,但突然出现错误。

可能的原因:

1) 由于服务器上的时间不正确,我遇到了类似的问题。确保系统时钟同步

2) 您应该重用第一次成功身份验证后获得的访问令牌。如果您以前的令牌尚未过期,您将收到一个无效的_grant错误。将其缓存在某个地方,以便可以重复使用

3) 确保您传递了访问令牌,而不是在失败时刷新令牌。运行时,它将OAUth2刷新令牌转换为访问令牌并将其传递给服务。如果传递原始刷新令牌,则如果不将其转换为短期访问令牌,API访问将无法接受该令牌

4) 您可能已达到刷新令牌限制。某些Google API有这样的解释,您可以在这里找到:

5) 你也可以撤销它。转到您的Google API控制台()并撤销已安装应用程序的客户端ID下的客户端机密。请务必使用新的客户端密码更新您的代码可能的原因:

1) 由于服务器上的时间不正确,我遇到了类似的问题。确保系统时钟同步

2) 您应该重用第一次成功身份验证后获得的访问令牌。如果您以前的令牌尚未过期,您将收到一个无效的_grant错误。将其缓存在某个地方,以便可以重复使用

3) 确保您传递了访问令牌,而不是在失败时刷新令牌。运行时,它将OAUth2刷新令牌转换为访问令牌并将其传递给服务。如果传递原始刷新令牌,则如果不将其转换为短期访问令牌,API访问将无法接受该令牌

4) 您可能已达到刷新令牌限制。某些Google API有这样的解释,您可以在这里找到:

5) 你也可以撤销它。转到您的Google API控制台()并撤销已安装应用程序的客户端ID下的客户端机密。请确保还使用新的客户端密码更新您的代码

GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(js)
            .setServiceAccountId(emailId)
            .setServiceAccountScopes(scopes)
            .setServiceAccountPrivateKeyFromP12File(new File(privateKeyPath)).build();

    System.out.println("SERVICE ACCOUNT SERVLET CALLED");

    credential.refreshToken();