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.
Découvert en ajoutant ceci à vos paramètres d'URL
approbation_Prompt = force
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 surforce
.
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 .
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
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
Pour notre application, nous devions utiliser ces deux paramètres access_type=offline&Prompt=consent
. approval_Prompt=force
n'a pas fonctionné pour nous
Bonjour, j'ai suivi les étapes suivantes et j'ai pu obtenir le jeton d'actualisation.
Le flux d'autorisation comporte deux étapes.
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.
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 :)
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 .
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