Получить маркер обновления в Google API-интерфейс


Я не могу получить маркер обновления с моим кодом. Я могу получить только маркер доступа, Тип маркера и т. д., Я следовал некоторые учебники, как положить access_type=offline на мой логин URL:

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>";

и мои поля в получении маркера доступа:

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

но я не могу сделать refresh_token, просто access_token,token_type,маркер и expires_in.

7 65

7 ответов:

выяснил, добавив это к вашим параметрам url

approval_prompt=force

если я могу расширить на user987361'ы ответ:

С автономный доступ часть документов OAuth2.0:

когда приложение получает маркер, он важно сохранить этот маркер обновления для дальнейшего использования. Если ваш приложение теряет токен обновления, ему придется повторно запросить пользователь для получения согласия перед получением другого токена обновления. Если вам нужно чтобы повторно запросить согласие пользователя, включите approval_prompt параметр в запросе кода авторизации и установите значение равным force.

Итак, когда вы уже предоставили доступ, последующие запросы на grant_type на authorization_code не вернет refresh_token, даже если access_type был установлен до offline в строке запроса страницы согласия.

как указано в цитате выше, чтобы получить новаяrefresh_token после уже получать одно, вам будет нужно отправить вашего потребителя назад через подскажите, что вы можете сделать, установив approval_prompt до force.

спасибо,

PS Это изменение было объявлено в блоге как хорошо.

Это access_type=offline Что вы хотите.

это вернет токен обновления при первой авторизации приложения пользователем. Последующие вызовы не заставляют вас повторно утвердить приложение (approval_prompt=force).

посмотреть более подробно: https://developers.google.com/accounts/docs/OAuth2WebServer#offline

Это полный код на PHP с использованием Google official SDK

$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

Привет я следовал следующие шаги, и я был в состоянии получить токен обновления.

процесс авторизации состоит из двух шагов.

  1. это получить код авторизации с помощью https://accounts.google.com/o/oauth2/auth? URL.

    для этого отправляется запрос post, предоставляющий следующие параметры. 'scope=' + SCOPE + '&client_id=' + CLIENTID + '&redirect_uri=' + REDIRECT + '&response_type=' + TYPE + '&access_type=offline' предоставление выше получит код авторизации.

  2. получение AcessToken и RefreshToken с помощью https://accounts.google.com/o/oauth2/token? URL. Для этого отправляется почтовый запрос предоставление следующих параметров.

    "код" : код, "client_id": CID, "client_secret": CSECRET, "параметр redirect_uri" : перенаправить, "grant_type": "authorization_code",

Так в первой попытке после получения разрешения, вы сможете получить маркер обновления. Последующие попытки не предоставят маркер обновления. Если вы хотите, чтобы маркер снова отозвал доступ в вашем приложении.

надеюсь, что это поможет кому-то ура :)

OAuth имеет два сценария в реальном режиме. Обычный и стандартный стиль доступа называется online. В некоторых случаях вашему приложению может потребоваться доступ к API Google, когда пользователь отсутствует, это автономные сценарии . токен обновления получается в автономных сценариях во время первого обмена кодом авторизации.

таким образом, вы можете получить refersh_token-это некоторые сценарии, а не все.

вы можете иметь содержание в https://developers.google.com/identity/protocols/OAuth2WebServer#offline .

для нашего приложения, мы должны использовать оба этих параметра access_type=offline&prompt=consent. approval_prompt=forceне работает для нас