web-dev-qa-db-fra.com

Obtenir un jeton d'actualisation google api

Je ne parviens pas à obtenir mon jeton d'actualisation avec mon code. Je ne peux obtenir que mon jeton d'accès, type de jeton, etc., j'ai suivi des tutoriels comme mettre access_type=offline sur mon URL de connexion:

echo "<a href='https://accounts.google.com/o/oauth2/auth?" 
    . "access_type=offline&client_id=123345555.apps.googleusercontent.com& "
    . "scope=https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/plus.me&response_type=code& "
    . "redirect_uri=http://www.sample.com/sample.php&state=/profile'>Google</a>";

et mes champs dans l'obtention du jeton d'accès:

$fields=array(
    'code'=>  urlencode($authcode),
    'client_id'=> urlencode($clientid),
    'client_secret'=> urlencode($clientsecret),
    'redirect_uri'=> urlencode($redirecturi),
    'grant_type'=> 'authorization_code',
);

mais je ne peux pas obtenir refresh_token, juste le access_token, type_ken_ken, id_token et expires_in.

71

Découvert en ajoutant ceci à vos paramètres d'URL

approbation_Prompt = force

97

Si je peux développer sur ser987361 's réponse:

À partir de la partie accès hors connexion des documents OAuth2.0:

Lorsque votre application reçoit un jeton d'actualisation, il est important de stocker ce jeton d'actualisation pour une utilisation ultérieure. Si votre application perd le jeton d'actualisation, elle devra demander à nouveau son consentement à l'utilisateur avant d'obtenir un autre jeton d'actualisation. Si vous avez besoin de demander à nouveau votre consentement à l'utilisateur, incluez le approval_Prompt paramètre dans la demande de code d'autorisation et définissez la valeur sur force.

Ainsi, lorsque vous avez déjà accordé l'accès, les demandes ultérieures pour un grant_type de authorization_code ne retournera pas le refresh_token, même si access_type était défini sur offline dans la chaîne de requête de la page de consentement.

Comme indiqué dans la citation ci-dessus, pour obtenir un nouveau refresh_token après en avoir reçu un, vous devrez renvoyer votre utilisateur via l'invite, ce que vous pouvez faire en définissant approval_Prompt à force.

À votre santé,

PS Ce changement a été annoncé dans un message de blog .

58
bossylobster

Il est access_type=offline que tu veux.

Cela renverra le jeton d'actualisation la première fois que l'utilisateur autorisera l'application. Les appels suivants ne vous obligent pas à réapprouver l'application (approval_Prompt=force).

Voir plus de détails: https://developers.google.com/accounts/docs/OAuth2WebServer#offline

12
Elliot Coad

Ceci est un code complet dans PHP en utilisant le SDK officiel de Google)

$client = new Google_Client();
## some need parameter
$client->setApplicationName('your application name');
$client->setClientId('****************');
$client->setClientSecret('************');
$client->setRedirectUri('http://your.website.tld/complete/url2redirect');
$client->setScopes('https://www.googleapis.com/auth/userinfo.email');
## these two lines is important to get refresh token from google api
$client->setAccessType('offline');
$client->setApprovalPrompt('force'); # this line is important when you revoke permission from your app, it will Prompt google approval dialogue box forcefully to user to grant offline access
10

Pour notre application, nous devions utiliser ces deux paramètres access_type=offline&Prompt=consent. approval_Prompt=forcen'a pas fonctionné pour nous

6
Ricky

Bonjour, j'ai suivi les étapes suivantes et j'ai pu obtenir le jeton d'actualisation.

Le flux d'autorisation comporte deux étapes.

  1. Est d'obtenir le code d'autorisation en utilisant https://accounts.google.com/o/oauth2/auth? URL.

    Pour cela, une demande de publication est envoyée avec les paramètres suivants. 'scope=' + SCOPE + '&client_id=' + CLIENTID + '&redirect_uri=' + REDIRECT + '&response_type=' + TYPE + '&access_type=offline' Fournir ci-dessus recevra un code d'autorisation.

  2. Récupérer AcessToken et RefreshToken en utilisant https://accounts.google.com/o/oauth2/token? URL. Pour cela, une demande de publication est envoyée avec les paramètres suivants.

    "code": code, "client_id": CID, "client_secret": CSECRET, "redirect_uri": REDIRECT, "grant_type": "authorisation_code",

Ainsi, lors de votre première tentative, une fois que vous aurez autorisé les autorisations, vous pourrez obtenir le jeton Actualiser. Les tentatives suivantes ne fourniront pas le jeton d'actualisation. Si vous souhaitez à nouveau le jeton, révoquez l'accès dans votre application.

J'espère que cela aidera quelqu'un à applaudir :)

5
dnWick

OAuth a deux scénarios en mode réel. Le style d'accès normal et par défaut est appelé en ligne. Dans certains cas, votre application peut avoir besoin d'accéder à une API Google lorsque l'utilisateur n'est pas présent. Il s'agit de scénarios hors connexion. un jeton d'actualisation est obtenu dans des scénarios hors ligne lors du premier échange de code d'autorisation.

Donc, vous pouvez obtenir Referh_Token est certains scénarios, pas tous.

vous pouvez avoir le contenu dans https://developers.google.com/identity/protocols/OAuth2WebServer#offline .

4
Julian89757

Depuis mars 2016, utilisez Prompt=consent pour régénérer le jeton d'actualisation de l'API Google.

Comme mentionné dans https://github.com/googleapis/oauth2client/issues/45 ,

assessment_Prompt = force a été remplacé par Prompt=none|consent|select_account

1
Finwe