1 (изменено: Malcev, 2023-03-12 05:29:23)

Тема: AHK: Google OAuth 2.0 и YouTube API

Тема для обсуждения "Google OAuth 2.0 и YouTube API".
http://forum.script-coding.com/viewtopic.php?id=17647

+ DD

2

Re: AHK: Google OAuth 2.0 и YouTube API

Обновлять токен так:

; изменяем данные
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

3 (изменено: svoboden, 2020-01-07 17:32:42)

Re: AHK: Google OAuth 2.0 и YouTube API

Так нет параметра:

access_type=offline

Токен обновления не придет.

4 (изменено: Malcev, 2020-01-07 17:51:33)

Re: AHK: Google OAuth 2.0 и YouTube API

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

5 (изменено: svoboden, 2022-01-16 10:22:01)

Re: AHK: Google OAuth 2.0 и YouTube API

Просто там прям в справке написано, что:

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"

6

Re: AHK: Google OAuth 2.0 и YouTube API

А зачем вам нужен новый refresh token?
Он же постоянный. По вашей ссылке:

Refresh tokens are valid until the user revokes access

Мой же код из 2 поста получает новый access_token.

7

Re: AHK: Google OAuth 2.0 и YouTube API

Ну да, токен обновления приходит только раз, потом нужно снова регистрировать приложение. Немного не понял, так без параметра:

access_type=offline

токен обновления вообще не придет.

8

Re: AHK: Google OAuth 2.0 и YouTube API

Я не понимаю, что именно вы не понимаете.
В первом сообщении написано, как получить Access Token и Refresh Token.
Во втором, как получить новый Access Token.
Только что проверил - всё работает.

9 (изменено: svoboden, 2020-01-09 22:26:07)

Re: AHK: Google OAuth 2.0 и YouTube API

Ну у меня не приходит Refresh Token без параметра access_type=offline.

10

Re: AHK: Google OAuth 2.0 и YouTube API

А аы делали по алгоритму из первого поста?

11 (изменено: svoboden, 2020-01-09 23:01:09)

Re: AHK: Google OAuth 2.0 и YouTube API

Да, я же поэтому и пишу, что не пришел токен обновления по инструкции.

12

Re: AHK: Google OAuth 2.0 и YouTube API

А какой приходит ответ?

; изменяем данные
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
}

13

Re: AHK: Google OAuth 2.0 и YouTube API

Примерно такой:

{
  "access_token": "ya29.Il-4Bw5mszyLdRC5UXoj4eleUrY5GyZCwaXlJgq_p_TdolJQervhDkeSfdkWd7Q-uvhiUipScnR5uxFhwf9aIzHqFHCdty5rTvBj4Yp54LO0ESyQ2SiNY7t05VxF097O5Q",
  "expires_in": 3600,
  "scope": "https://www.googleapis.com/auth/youtube",
  "token_type": "Bearer"
}

14

Re: AHK: Google OAuth 2.0 и YouTube API

Не знаю почему у вас не приходит.
Должен приходить.
https://developers.google.com/android-p … horization

15

Re: AHK: Google OAuth 2.0 и YouTube API

Кстати, если нам надо получить доступ к нескольким scope, тои их надо перечислять через пробел и без слеша в конце:

scope := "https://mail.google.com https://www.googleapis.com/auth/calendar"