我有相同的错误此.就我而言,当应用尝试通过Google Cloud Client API上传文件时,就会发生这种情况.
POST https://www.googleapis.com/oauth2/v4/token
400 Bad Request
Invalid JWT: Token must be a short-lived token and in a reasonable timeframe
Run Code Online (Sandbox Code Playgroud)
我如何加载令牌是读取服务帐户json文件,并将其附加到CURLOPT_HTTPHEADERPHP中.它确实在过去一个月内正常运行,因此我猜测Google改变了授权方式.
谁有人面对并解决了这个问题?
我的目标是拥有某种长期访问令牌,以便我的Android应用程序可以在当天阅读用户Google日历的事件,而无需每次都获得用户批准.
我能够生成 - 我认为是 - 一次性授权代码; 但是,当我将此发送到我的服务器端,应用程序引擎时,我收到以下错误响应:
400 OK
{
"error" : "invalid_grant",
"error_description" : "Code was already redeemed."
}
这是被抛出的异常.我只是抓住它并将其作为一种调试方式发回给自己.
我得到的一次性代码以4/VUr开头,所以我假设它是一次性代码而不是常规访问令牌.
目前,在Android上,我允许用户使用Google+登录,以便我拥有自己的电子邮件地址.从那里我使用以下代码请求一次性授权代码:
try {
Bundle appActivities = new Bundle();
appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES, "http://schemas.google.com/AddActivity");
String scopes = "oauth2:server:client_id:" + Constants.SERVER_CLIENT_ID + ":api_scope:https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/calendar";
//Plus.SCOPE_PLUS_LOGIN + " " + CalendarScopes.CALENDAR_READONLY;
String acctName = "myGmail";
String token = GoogleAuthUtil.getToken(getApplicationContext(), acctName, scopes, appActivities);
} catch (UserRecoverableAuthException e) {
startActivityForResult(e.getIntent(), 257/*REQUEST_AUTHORIZATION/*/);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这段代码来自这里,似乎这就是我必须做的.
然后我将此代码发送到我的App …
google-app-engine android google-calendar-api google-plus google-oauth