L'authentification sur google: OAuth2 conserve son retour 'invalid_grant'
J'ai commencé à configurer google calendar à nouveau sur mon application. J'ai presque fait une copie exacte de l'authentification code affiché à les développeurs de google ( https://developers.google.com/google-apps/calendar/instantiate ), mais je reçois l'erreur suivante:
Erreur de l'extraction de OAuth2 jeton d'accès, message: "invalid_grant'
Je suis actuellement à l'aide d'une Fourchette-CMS ( http://www.fork-cms.com ), un jeune lightweigth CMS. J'ai correctement configuré le config.php fichier de google-api-php-client. (identifiant de client, le client secret, redirect uri, clé du développement,...) et l'uri de redirection est correctement fixé sur l'api de google de la console. Mon code se présente comme suit:
<?php
/**
* This is a widget with a calendar implementation.
*
* @package frontend
* @subpackage events
*
* @author Michiel Vlaminck <[email protected]>
*/
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);
}
}
?>
Quand j'ai ouvert ce widget-page pour la première fois, je reçois adressées à google pour authentifier l'application. Quand je suis d'accord, j'ai redirigé vers ma demande et c'est le point où je veux en venir:
apiAuthException » Main
Message Error fetching OAuth2 access token, message: 'invalid_grant'
File C:\wamp\www\Officevibes\library/external\google-api-php-client\src\auth\apiOAuth2.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
- Il s'appelle maintenant "Réinitialiser votre client secret" au lieu de révoquer.
- Dans mon cas, j'utilisais précédemment supprimés à partir de la console p12 fichier de clé...
Vous devez vous connecter pour publier un commentaire.
Vous devez réutiliser le jeton d'accès que vous obtenez après le succès de la première authentification. Vous recevrez un
invalid_grant
d'erreur si votre jeton précédent n'a pas encore expiré. Cache quelque part afin de la réutiliser.J'ai eu un problème similaire causée par le temps sur mon serveur est incorrect. Assurez-vous que l'horloge de votre système est synchronisé.
Aller à votre API Google Console ( https://code.google.com/apis/console/ ) et de révoquer votre clé Secrète Client en vertu de ID Client pour les applications installées.
Assurez-vous également de mettre à jour votre code avec le nouveau Client Secret
Vous aurez également recevoir ce message d'erreur si par erreur vous essayez d'authentifier votre ID de Jeton, plutôt que votre Jeton d'Accès.
Afin de ne pas être comme moi, assurez-vous de passer le jeton correct dans votre code!
J'ai eu un problème similaire. Le problème avec "invalid_grant", c'est que c'est essentiellement un espace réservé pour toute erreur qui se produit en relation avec le jeton. J'ai trouvé cette article pour être vraiment utile.