2015-12-08 12 views
3

Возможно ли обновить токен Google Api, когда у меня есть предыдущий токен обновления и токен доступа с использованием чистого php, без библиотеки Google Api? Я храню в базе данных, многие пользователи обновляют и получают доступ к токенам.Google Api, как я могу обновить токен пользователя, когда у меня есть токен доступа и предыдущий токен обновления

Я использую URL с этого адреса:

https://developers.google.com/identity/protocols/OAuth2WebServer?hl=en#creatingcred

и используя этот адрес:

https://accounts.google.com/o/oauth2/v2/auth? 
scope=email%20profile& 
state=security_token%3D138r5719ru3e1%26url%3Dhttps://oa2cb.example.com/myHome& 
redirect_uri=https%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode&, 
response_type=code& 
client_id=812741506391.apps.googleusercontent.com 

Все время я перенаправлены куда-то, а не получение новых access token. Но почему я должен положить redirect_uri?

Кроме того под моим менеджером API Google в разделе Credential У меня есть некоторые Client ID и Client secret но Client ID1076711322609-s9mrrfp3t8gto2qkrj4ud3jjhr3rr0ph.apps.googleusercontent.com отличается, чем это один client_id=812741506391.apps.googleusercontent.com Почему?

Итак, вопрос в том, как я могу получить доступ к конечным точкам пользователей Google с помощью токенов доступа и обновлять эти токены каждый час, используя PHP (вызовы REST) ​​без каких-либо подсказок, логинов и паролей. Возможно ли это?

enter image description here

ответ

0

Вы можете получить новый access_token вы берете refresh_token, сохраненные в базе данных и HTTP Post его к следующему адресу. Примечание: grant_type = refresh_token

https://accounts.google.com/o/oauth2/token 
client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token 

Ответ

{ "access_token": "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ", "token_type": "Канал", "expires_in": 3600}

+0

Должен ли я использовать приложение ClientId и приложение ClientSecret или пользователь ClientId и пользователь ClientSecret? – ssuperczynski

+0

Есть ли разница? Используйте идентификатор клиента и секретируйте то, что используется для создания refreshtoken. – DaImTo

+0

У вас было правильно, я использовал неправильный 'refresh_token'. В Google API игровая площадка 'refresh_token' может отличаться от того, что обновление и доступ к токену к вашему приложению – ssuperczynski

1

Так что после многих попыток я нашел рабочее решение.

=== EDIT ==== @DaImTo ответа гораздо лучше

POST

https://developers.google.com/oauthplayground/refreshAccessToken 

Headers:

Content-Type: application/json 

тела:

{ 
    "refresh_token": "YOUR_PREVIOUS_REFRESH_TOKEN" 
} 
Смежные вопросы