У меня есть приложение iOS, которое регистрирует пользователя в Google и получает токен доступа и refre sh токен. Затем он записывает видео и загружает его на какой-либо сервер (Python 3.6). Я хочу, чтобы сервер начал загружать файл на YouTube, даже если приложение не запущено, используя токен доступа, полученный ранее. У кого-нибудь есть пример, как это сделать?
Я попытался передать токен доступа на сервер. Если я использую его для channels.list
API, учетные данные просты и требуют только access_token:
credentials = google.oauth2.credentials.Credentials(access_token)
Но для операции YouTube videos.insert
(загрузка) этого недостаточно, утверждая, что мне нужен также client_id, client secret, token_uri, refre sh token:
youtube.videos().insert(...) # repsonse is:
google.auth.exceptions.RefreshError: The credentials do not contain the necessary fields need to refresh the access token. You must specify refresh_token, token_uri, client_id, and client_secret.
Если я правильно понимаю, разные клиенты могут совместно использовать токены доступа, предполагая, что они являются частью одного и того же проекта Google, как объяснено 1012 *. Но на практике я не могу заставить его работать, и получаю ошибку unauthorized_client
при вызове videos.insert
с сервера, учитывая какой-то выделенный сервер client_id / secret:
credentials = google.oauth2.credentials.Credentials(access_token,
token_uri=options.token_uri,
refresh_token=refresh_token,
client_id=client_id,
client_secret=client_secret)
youtube.videos().insert(...) # repsonse is:
google.auth.exceptions.RefreshError: ('unauthorized_client: Unauthorized', '{\n "error": "unauthorized_client",\n "error_description": "Unauthorized"\n}')
Если мой сервер использует то же самое идентификатор клиента в качестве клиента (без использования секрета клиента), загрузка прошла успешно. Это ожидаемый способ делать вещи? Я надеялся, что у сервера может быть свой собственный идентификатор клиента / секрет и что он будет работать с токеном доступа, предоставленным приложением iOS ...