Итак, у меня есть скрипт Python, который запускается на сервере (PHP запускает его). Тем не менее, скрипт должен аутентифицировать пользователя на YouTube. Когда вы запускаете его локально, он открывает браузер, позволяет аутентифицироваться и запрашивает разрешение. Все работает. Когда я разрешаю пользователям запускать его на сервере, он пытается открыть экран авторизации на сервере. Мне нужно передать ответ в веб-браузер.
Есть идеи?
Я использую скрипт auth из примеров API YouTube:
# The CLIENT_SECRETS_FILE variable specifies the name of a file that contains
# the OAuth 2.0 information for this application, including its client_id and
# client_secret. You can acquire an OAuth 2.0 client ID and client secret from
# the Google Developers Console at
# https://console.developers.google.com/.
# Please ensure that you have enabled the YouTube Data API for your project.
# For more information about using OAuth2 to access the YouTube Data API, see:
# https://developers.google.com/youtube/v3/guides/authentication
# For more information about the client_secrets.json file format, see:
# https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
CLIENT_SECRETS_FILE = "client_secrets.json"
# This variable defines a message to display if the CLIENT_SECRETS_FILE is
# missing.
MISSING_CLIENT_SECRETS_MESSAGE = """WARNING: Please configure OAuth 2.0
To make this sample run you will need to populate the client_secrets.json file
found at:
%s
with information from the Developers Console
https://console.developers.google.com/
For more information about the client_secrets.json file format, please visit:
https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
""" % os.path.abspath(os.path.join(os.path.dirname(__file__),
CLIENT_SECRETS_FILE))
# This OAuth 2.0 access scope allows for full read/write access to the
# authenticated user's account.
YOUTUBE_READ_WRITE_SCOPE = "https://www.googleapis.com/auth/youtube"YOUTUBE_API_SERVICE_NAME = "youtube"YOUTUBE_API_VERSION = "v3"
flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
message=MISSING_CLIENT_SECRETS_MESSAGE,
scope=YOUTUBE_READ_WRITE_SCOPE)
storage = Storage("%s-oauth2.json" % sys.argv[0])
credentials = storage.get()
if credentials is None or credentials.invalid:
flags = argparser.parse_args()
credentials = run_flow(flow, storage, flags)
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
http=credentials.authorize(httplib2.Http()))
Веб-приложение на стороне сервера достаточно простое, оно позволяет выбрать вариант сценария и пару настроек, вот и все.
Когда вы аутентифицируете свои учетные данные на своем сервере, вам нужно использовать Oauth2 (в случае Google).
Мне потребовалось некоторое время, чтобы понять это в начале …
Смысл OAuth2 заключается в том, что вы перенаправляете пользователя на адрес входа, предоставленный Google, говорите службе: «Посмотрите, после входа пользователя отправьте токен на URL X» (ваш сервер). Ваш сервер получает какой-то токен, который представляет пользователя, который разрешает вашему «приложению» выполнять действия от его имени.
Проверять, выписываться https://developers.google.com/api-client-library/python/auth/web-app
Конкретно в вашем случае — вам нужно реализовать конечную точку в PHP (она должна «прослушивать» адрес, если вы меня поняли)
Если вам действительно не нужны учетные данные пользователя и вам нужен доступ к API youtube, как любому аутентифицированному пользователю, это проще — вам нужно иметь свои собственные учетные данные и выполнить «сервер-сервер», объясненный здесь:
https://developers.google.com/api-client-library/python/auth/service-accounts
Других решений пока нет …