Получить маркер обновления в 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 ответов:
если я могу расширить на 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
Привет я следовал следующие шаги, и я был в состоянии получить токен обновления.
процесс авторизации состоит из двух шагов.
это получить код авторизации с помощью
https://accounts.google.com/o/oauth2/auth?
URL.для этого отправляется запрос post, предоставляющий следующие параметры.
'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" : перенаправить, "grant_type": "authorization_code",
Так в первой попытке после получения разрешения, вы сможете получить маркер обновления. Последующие попытки не предоставят маркер обновления. Если вы хотите, чтобы маркер снова отозвал доступ в вашем приложении.
надеюсь, что это поможет кому-то ура :)
OAuth имеет два сценария в реальном режиме. Обычный и стандартный стиль доступа называется online. В некоторых случаях вашему приложению может потребоваться доступ к API Google, когда пользователь отсутствует, это автономные сценарии . токен обновления получается в автономных сценариях во время первого обмена кодом авторизации.
таким образом, вы можете получить refersh_token-это некоторые сценарии, а не все.
вы можете иметь содержание в https://developers.google.com/identity/protocols/OAuth2WebServer#offline .