我几乎搜索了谷歌第一页的每一个结果.但似乎无法找到答案.我正在使用Google API的refresh_token并接收:
Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }
Run Code Online (Sandbox Code Playgroud)
我在做什么 首先:我正在创建并存储与google api的持久连接:
$client = new Google_Client();
$client->setClientId('xxxxxx-s73q0pa41aq3i2kcpatmpas6e6kkp99h.apps.googleusercontent.com');
$client->setClientSecret('xxxxxxxxxxxx');
$client->setRedirectUri('http://xxxxxxxx/generaterefreshtoken.php');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));
$client->setAccessType('offline');
if (isset($_GET['code'])) {
$client->authenticate();
$_SESSION['token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
if (isset($_REQUEST['logout'])) {
unset($_SESSION['token']);
$client->revokeToken();
}
if ($client->getAccessToken()) {
$jsonarray = json_decode($client->getAccessToken());
$arrGoogleAuth['access_token']=$jsonarray->access_token;
$arrGoogleAuth['refresh_token']=$jsonarray->refresh_token;
//filewrite
$myFile = "refreshtoken.conf";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $client->getAccessToken());
fclose($fh);
/* …Run Code Online (Sandbox Code Playgroud) 我正确地确定了离线访问并存储了它.每隔60分钟,在需要时,我会检索一个新的access_token.代码没有改变,但奇怪的是,当他第一次通过授权时.
client_id ="xxxxx.apps.googleusercontent.com"
client_secret ="xxxxxxxxxxxxxxxxxxxx"
refresh_token ="xxxxxxxxxxxxxxxxxxx"
response = oauth2a.RefreshToken(client_id,client_secret,refresh_token)
def RefreshToken(client_id, client_secret, refresh_token):
params = {}
params['client_id'] = client_id
params['client_secret'] = client_secret
params['refresh_token'] = refresh_token
params['grant_type'] = 'refresh_token'
request_url = AccountsUrl('o/oauth2/token')
response = urllib.urlopen(request_url, urllib.urlencode(params)).read()
return json.loads(response)
Run Code Online (Sandbox Code Playgroud)
答案总是{u'error':u'invalid_grant'}.我在三台不同的机器上尝试了这个,并且还得到 HTTPError:HTTP错误400:错误的请求
谢谢
我正在使用Google的php api客户端。我正在浏览服务帐户快速入门指南。据我所知,我完美地遵循了这些步骤。我遇到以下错误:
{
"error": "invalid_grant",
"error_description": "Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values and use a clock with skew to account for clock differences between systems."
}
Run Code Online (Sandbox Code Playgroud)
据我了解,此错误最常见的问题是系统时间是否错误。我已经三重检查了我的时区,日期和时间是否与原子钟同步。我使用php set timezone函数来设置我的时区以匹配我的计算机,但是我继续遇到错误。我正在查看消息的另一部分,其中提到了iat和exp设置,但还没有到位。
有谁对我如何超越这个有任何想法?
我试图在谷歌服务帐户的帮助下访问谷歌日历,但我得到了belloing错误
Google.Apis.dll中出现"Google.Apis.Auth.OAuth2.Responses.TokenResponseException"类型的例外,但未在用户代码中处理
我得到的错误: "invalid_grant", Description:"Invalid JWT: Token must be a short-lived token and in a reasonable timeframe", Uri:""
string credPath = "key path";
String serviceAccountEmail = xxxx@developer.gserviceaccount.com";
var certificate = new X509Certificate2(credPath, "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { CalendarService.Scope.CalendarReadonly,
CalendarService.Scope.Calendar}
}.FromCertificate(certificate));
// Create the service.
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "HRTool",
});
var events = service.Events.List("my calaender id").Execute();
Run Code Online (Sandbox Code Playgroud)