INFO: com.google.api.client.auth.oauth2.TokenResponseException: 400 OK
{
"error" : "invalid_grant"
}
我的代码是
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();
此方法运行正常但突然开始出错。
答案 0 :(得分:3)
可能的原因:
1)由于服务器上的时间不正确,我遇到了类似的问题。确保您的系统时钟已同步。
2)您应该重用第一次成功验证后获得的访问令牌。如果您之前的令牌尚未过期,您将收到invalid_grant错误。将其缓存在某处,以便您可以重复使用它。
3)确保您传递了访问令牌,而不是因为失败而刷新令牌。当您运行时,它会将OAUth2刷新令牌转换为访问令牌并将其传递给服务。如果您传递原始刷新令牌,则不接受API访问,而不将其转换为短期访问令牌。
4)您可能已达到刷新令牌限制。某些Google API有此功能,您可以在此处找到一些解释:https://developers.google.com/compute/docs/authentication
5)你也可以撤销它。转到您的Google API控制台(https://code.google.com/apis/console/)并在客户端ID下撤消已安装应用程序的客户端密钥。请务必使用新的客户端密钥
更新您的代码