Ответ 1
Обнаружено добавлением этого параметра в параметры вашего URL
approval_prompt = сила
Я не могу получить свой токен обновления с моим кодом. Я могу получить только свой токен доступа, тип токена и т.д. Я прошел некоторые уроки, например, поставил 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, id_token и expires_in.
Обнаружено добавлением этого параметра в параметры вашего URL
approval_prompt = сила
Если я могу расширить на user987361 ответ:
Из части автономного доступа к документам OAuth2.0:
Когда ваше приложение получает токен обновления, важно сохранить этот токен обновления для будущего использования. Если ваше приложение потеряет токен обновления, оно должно будет повторно запросить у пользователя согласие перед получением другого токена обновления. Если вам нужно повторно запросить у пользователя согласие,
approval_prompt
параметр compatibility_prompt в запрос кода авторизации и установите значениеforce
.
Таким образом, когда вы уже предоставили доступ, последующие запросы для grant_type
для authorization_code
не будут возвращать refresh_token
, даже если access_type
был установлен в offline
в строке запроса на странице согласия.
Как указано в приведенной выше цитате, чтобы получить новый refresh_token
после того, как он уже был refresh_token
, вам нужно будет отправить своего пользователя обратно через подсказку, что вы можете сделать, установив для параметра approval_prompt
значение force
.
Ура,
PS Это изменение было также объявлено в блоге.
Это access_type=offline
, которое вы хотите.
Это возвращает токен обновления при первом авторизации пользователем приложения. Последующие вызовы не заставляют вас повторно одобрять приложение (approval_prompt=force
).
Подробнее: https://developers.google.com/accounts/docs/OAuth2WebServer#offline
Это полный код на PHP с помощью официального SDK 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
Привет, я выполнил следующие шаги, и мне удалось получить токен обновления.
Поток полномочий имеет два шага.
Получить код авторизации с помощью https://accounts.google.com/o/oauth2/auth?
URL.
Для этого отправляется почтовый запрос, предоставляющий следующие параметры. 'scope=' + SCOPE + '&client_id=' + CLIENTID + '&redirect_uri=' + REDIRECT + '&response_type=' + TYPE + '&access_type=offline'
Предоставление выше получит код авторизации.
Извлечение AcessToken и RefreshToken с использованием https://accounts.google.com/o/oauth2/token?
URL.
Для этого отправляется почтовый запрос, предоставляющий следующие параметры.
"код": код, "client_id": CID, "client_secret": CSECRET, "redirect_uri": REDIRECT, "grant_type": "authorization_code",
Итак, в первой попытке после авторизации разрешений вы сможете получить токен Refresh. Последующие попытки не будут предоставлять токен обновления. Если вы хотите, чтобы токен снова отменил доступ в вашем приложении.
Надеюсь, это поможет кому-то приветствовать:)
OAuth имеет два сценария в реальном режиме. Обычный и стандартный стиль доступа называется онлайн. В некоторых случаях вашему приложению может потребоваться доступ к API Google, когда пользователь не присутствует, это автономные сценарии. токен обновления получается в автономных сценариях во время первого обмена кодами авторизации.
Итак, вы можете получить referh_token - это некоторые сценарии, не все.
у вас может быть содержимое https://developers.google.com/identity/protocols/OAuth2WebServer#offline .
Для нашего приложения нам пришлось использовать оба этих параметра access_type=offline&prompt=consent
.
approval_prompt=force
не работает для нас
С марта 2016 года используйте prompt=consent
для регенерации токена обновления Google API.
Как указано в https://github.com/googleapis/oauth2client/issues/453,
Approval_prompt = force был заменен на
prompt=none|consent|select_account