Authentification sur google: OAuth2 continue de renvoyer 'invalid grant'
j'ai commencé à configurer google calendar sur ma nouvelle application. J'ai presque fait une copie exacte du code d'authentification affiché chez les développeurs google ( https://developers.google.com/google-apps/calendar/instantiate ), mais j'obtiens toujours l'erreur suivante:
Erreur de l'extraction de OAuth2 jeton d'accès, le message: "invalid_grant'
j'utilise actuellement Fork-CMS ( http://www.fork-cms.com ), a young lightweigth CMS. J'ai correctement configuré la configuration.fichier php du client google-api-php. (identifiant de client, le client secret, redirect uri, clé du développement,...) et l'uri de redirection est correctement positionné sur la console de l'api google. Mon code est le suivant:
<?php
/**
* This is a widget with a calendar implementation.
*
* @package frontend
* @subpackage events
*
* @author Michiel Vlaminck <michielvlaminck@gmail.com>
*/
class FrontendEventsWidgetCalendar extends FrontendBaseWidget
{
private $events = array();
private $authUrl = array();
/**
* Execute the extra
*
* @return void
*/
public function execute()
{
// call parent
parent::execute();
// load template
$this->loadTemplate();
// get data
$this->getData();
// parse
$this->parse();
}
/**
* Get the data from Google Calendar
* This method is only executed if the template isn't cached
*
* @return void
*/
private function getData()
{
require_once PATH_LIBRARY . '/external/google-api-php-client/src/apiClient.php';
require_once PATH_LIBRARY . '/external/google-api-php-client/src/contrib/apiCalendarService.php';
$client = new apiClient();
$service = new apiCalendarService($client);
if (isset($_SESSION['oauth_access_token'])) {
$client->setAccessToken($_SESSION['oauth_access_token']);
} else {
$token = $client->authenticate();
$_SESSION['oauth_access_token'] = $token;
}
if ($client->getAccessToken()) {
$calId = FrontendEventsModel::getCalendarId((int) $this->data['id']);
$calId = $calId[0]['calendar_id'];
$events = $service->events->listEvents($calId);
$this->events = $events['items'];
$_SESSION['oauth_access_token'] = $client->getAccessToken();
} else {
$this->authUrl = $client->createAuthUrl();
}
}
/**
* Parse
*
* @return void
*/
private function parse()
{
$this->tpl->assign('events', $this->events);
$this->tpl->assign('authUrl', $this->authUrl);
}
}
?>
lorsque j'ouvre ce widget-page pour la première fois, je suis dirigé vers google pour authentifier l'application. Quand je suis d'accord, je suis redirigé vers mon application et c'est le point où je reçois:
apiAuthException » Main
Message Error fetching OAuth2 access token, message: 'invalid_grant'
File C:wampwwwOfficevibeslibrary/externalgoogle-api-php-clientsrcauthapiOAuth2.php
Line 105
Date Thu, 05 Apr 2012 08:34:47 +0000
URL http://localhost/calendar?code=4/YPUpFklKvhEeTcMm4moRth3x49oe
Referring URL (Unknown)
Request Method GET
User-agent Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19
6 réponses
vous devez réutiliser le jeton d'accès que vous obtenez après la première authentification réussie. Vous obtiendrez un invalid_grant
erreur si votre jeton précédent n'a pas encore expiré. Cache quelque part afin de la réutiliser.
j'avais un problème similaire causé par le fait que le temps sur mon serveur était incorrect. Assurez-vous que votre horloge système est synchronisée.
allez sur votre Console API Google ( https://code.google.com/apis/console / ) et révoquer votre secret Client sous ID Client pour les applications installées .
assurez-vous également de mettre à jour votre code avec le nouveau Client Secret
- Aller à security.google.com
- Révoquer l'accès
- visite de l'authentification de l'url de nouveau
- vous allez maintenant obtenir un nouveau refreshtoken
vous recevrez également cette erreur si vous essayez par erreur d'authentifier votre ID Token , plutôt que votre Access Token .
alors ne soyez pas comme moi - assurez-vous de passer le bon jeton dans votre code!
j'ai eu un problème similaire. Le problème avec "invalid_grant" est qu'il s'agit essentiellement d'un conteneur pour toute erreur qui se produit en relation avec le token. J'ai trouvé cet "article 151920920" très utile.