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
19
demandé sur Kara 2012-04-05 13:05:35

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.

22
répondu janmoesen 2012-04-17 07:22:35

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.

9
répondu Sio 2013-11-25 16:45:37

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

8
répondu Zach M. 2012-07-10 16:04:31
  1. Aller à security.google.com
  2. Révoquer l'accès
  3. visite de l'authentification de l'url de nouveau
  4. vous allez maintenant obtenir un nouveau refreshtoken
3
répondu Sebastiaan Hilbers 2014-11-10 09:29:57

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!

1
répondu Matt 2016-01-07 22:04:27

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.

0
répondu zomnombom 2018-09-27 09:35:11