Тема: AHK: Google OAuth 2.0 и YouTube API
Тема для обсуждения "Google OAuth 2.0 и YouTube API".
http://forum.script-coding.com/viewtopic.php?id=17647
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Тема для обсуждения "Google OAuth 2.0 и YouTube API".
http://forum.script-coding.com/viewtopic.php?id=17647
Обновлять токен так:
; изменяем данные
ClientId := "341870872-dgbbg66.apps.googleusercontent.com"
ClientSecret := "JJN1OS7110v-j"
RefreshToken := "1/SjYrJK9Ja2N57TxxIdoxvMTrrj2vDReeFK7yMOTLgA6fLsJp"
; дальше не изменяем
Request := "refresh_token=" RefreshToken "&client_id=" ClientId "&client_secret=" ClientSecret "&grant_type=refresh_token"
WinHTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
WinHTTP.Open("POST", "https://accounts.google.com/o/oauth2/token", true)
WinHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
WinHTTP.Send(Request)
WinHTTP.WaitForResponse()
msgbox % clipboard := WinHTTP.ResponseText
Так нет параметра:
access_type=offline
Токен обновления не придет.
Первый и последний раз я пробовал обновлять токен год назад, когда и написал тот пост.
Тогда у меня приходил.
Возможно в каких-то случаях и не приходит - я не углублялся.
Просто там прям в справке написано, что:
Note that the refresh token is only returned if your application set the access_type parameter to offline in the initial request to Google's authorization server.
Вот так придет токен обновления:
msgbox % clipboard := "https://accounts.google.com/o/oauth2/auth?redirect_uri=" UriEncode(RedirectUri) "&response_type=code&client_id=" ClientId "&scope=" UriEncode(scope) "&access_type=offline" "&include_granted_scopes=true" "&state=state_parameter_passthrough_value" "&clientSecret=" ClientSecret "&approval_prompt=force"
А зачем вам нужен новый refresh token?
Он же постоянный. По вашей ссылке:
Refresh tokens are valid until the user revokes access
Мой же код из 2 поста получает новый access_token.
Ну да, токен обновления приходит только раз, потом нужно снова регистрировать приложение. Немного не понял, так без параметра:
access_type=offline
токен обновления вообще не придет.
Я не понимаю, что именно вы не понимаете.
В первом сообщении написано, как получить Access Token и Refresh Token.
Во втором, как получить новый Access Token.
Только что проверил - всё работает.
Ну у меня не приходит Refresh Token без параметра access_type=offline.
А аы делали по алгоритму из первого поста?
Да, я же поэтому и пишу, что не пришел токен обновления по инструкции.
А какой приходит ответ?
; изменяем данные
ClientId := "341870872-dgbbg66.apps.googleusercontent.com"
ClientSecret := "JJN1OS7110v-j"
AuthorizationCode := "4/7wCaeBV61IBslGg5pU9AZZ-XvrtJp7Dmnfh_khOlv6Co-sUuL0OMd7jt5s"
; дальше не изменяем
RedirectUri := "http://localhost"
Request := "grant_type=authorization_code&code=" AuthorizationCode "&redirect_uri=" UriEncode(RedirectUri) "&client_id=" ClientId "&client_secret=" ClientSecret
WinHTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
WinHTTP.Open("POST", "https://accounts.google.com/o/oauth2/token", true)
WinHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
WinHTTP.Send(Request)
WinHTTP.WaitForResponse()
msgbox % clipboard := WinHTTP.ResponseText
UriEncode(Uri)
{
VarSetCapacity(Var, StrPut(Uri, "UTF-8"), 0)
StrPut(Uri, &Var, "UTF-8")
f := A_FormatInteger
SetFormat, IntegerFast, H
While Code := NumGet(Var, A_Index - 1, "UChar")
If (Code >= 0x30 && Code <= 0x39 ; 0-9
|| Code >= 0x41 && Code <= 0x5A ; A-Z
|| Code >= 0x61 && Code <= 0x7A) ; a-z
Res .= Chr(Code)
Else
Res .= "%" . SubStr(Code + 0x100, -1)
SetFormat, IntegerFast, %f%
Return, Res
}
Примерно такой:
{
"access_token": "ya29.Il-4Bw5mszyLdRC5UXoj4eleUrY5GyZCwaXlJgq_p_TdolJQervhDkeSfdkWd7Q-uvhiUipScnR5uxFhwf9aIzHqFHCdty5rTvBj4Yp54LO0ESyQ2SiNY7t05VxF097O5Q",
"expires_in": 3600,
"scope": "https://www.googleapis.com/auth/youtube",
"token_type": "Bearer"
}
Не знаю почему у вас не приходит.
Должен приходить.
https://developers.google.com/android-p … horization
Кстати, если нам надо получить доступ к нескольким scope, тои их надо перечислять через пробел и без слеша в конце:
scope := "https://mail.google.com https://www.googleapis.com/auth/calendar"
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться