Икай Лан, YouTube Developer Relations – June 2013
Для авторизации запросов пользователей в API YouTube используется протокол OAuth 2.0. Нас часто спрашивают, планируем ли мы добавить поддержку аутентификации ClientLogin или аналогичного метода в API YouTube. Однако 20 апреля 2012 года мы официально прекратили поддержку ClientLogin и не планируем добавлять такой механизм.
Мы считаем, что поддержка различных потоков авторизации OAuth 2.0 лучше для пользователей YouTube, чем ClientLogin, по нескольким причинам. Эти процессы поддерживают сценарии использования для компьютерных, веб- и мобильных приложений, а также приложений, которые работают на устройствах без сложных механизмов ввода, например телевизорах. С помощью ClientLogin это сделать сложно. Кроме того, мы обнаружили, что ClientLogin вызывает больше проблем после запуска у многих разработчиков.
Как использовать OAuth 2.0 для автономных скриптов на стороне сервера
Многие разработчики используют ClientLogin для авторизации скриптов командной строки, которые выполняются на серверах без браузера. При использовании OAuth 2.0 почти всегда задействован браузер. Исключение составляют приложения для Android, в которых для получения токенов используется Google Play Services через GoogleAuthUtil..
В процессе, предназначенном только для веб-приложений, сайт, который хочет выполнять аутентифицированные вызовы API от имени пользователя, должен перенаправить пользователя на страницу аутентификации google.com, на которой объясняется, к чему приложение пытается получить доступ. Затем веб-приложение получает токен, который использует для вызовов API. Пользователь может в любое время отозвать доступ приложения на странице connected apps and sites.
В наших примерах кода на Python показано, как скрипты командной строки могут запускать браузер и вызывать API из окна терминала, создавать локальный сервер для прослушивания кода после перенаправления авторизации и автоматически сохранять токен для будущих вызовов API. Ниже показано, как это работает.
Токен представляет собой строку ASCII. Если это токен offline, он переносимый. С помощью полученного токена вы сможете запустить скрипт на компьютере, а затем скопировать и использовать код на удаленном сервере без графического интерфейса пользователя, если этот код создает экземпляр клиента OAuth 2.0 с тем же идентификатором клиента и секретом. Клиентские библиотеки Google API для других языков программирования также содержат вспомогательные методы для управления токенами, которые можно использовать в разных клиентах и даже непосредственно в HTTP-библиотеках более низкого уровня в заголовке клиента или в качестве параметра URL.
Примеры скриптов на стороне сервера, использующих офлайн-токены:
- Демон, который отслеживает новые видео в каталоге и автоматически загружает их на YouTube.
- Задание Cron, которое ежедневно обновляет плейлисты новым контентом
- Скрипт, который отслеживает данные о видео через YouTube Analytics API и уведомляет менеджеров канала о наступлении определенных событий, например о том, что общее время просмотра превысило заданное значение. Обратите внимание, что в этом случае OAuth 2.0 – единственный поддерживаемый метод авторизации, поскольку Analytics API не поддерживает ClientLogin.
В разделе долгоживущих токенов доступа рассказывается, как создавать офлайн-токены, которые можно использовать для процессов на стороне сервера.
Рекомендации по работе с идентификатором и секретным кодом клиента
Любой код, в котором используются те же идентификатор клиента и секретный ключ, может использовать те же токены доступа. Рекомендуется ограничить доступ к идентификатору клиента и секретному коду клиента кодом, который выполняется на компьютерах и устройствах в вашей организации.
Не включайте идентификатор клиента и секретный код клиента в код нативных мобильных приложений. Всем разработчикам, выполняющим аутентификацию OAuth 2.0 с мобильного устройства, следует использовать идентификатор клиента "Установленное приложение", который требует дополнительную информацию, чтобы убедиться, что запрос поступает только от приложения, выпущенного вашей командой.

На устройствах Android вместо идентификатора клиента и секретного кода клиента приложение идентифицируется с помощью названия пакета и хеша сертификата подписи. На устройствах iOS используются идентификатор пакета и идентификатор магазина приложений. Официальная документация по получению этой информации находится на странице в Справочном центре Google Cloud console.
Сервисные аккаунты не работают с YouTube API
Сервисные аккаунты не подходят для вызовов YouTube Data API, поскольку требуют связанного канала YouTube, а новые и существующие каналы нельзя связать с сервисными аккаунтами. Если вы используете сервисный аккаунт для вызова YouTube Data API, сервер API возвращает ошибку с типом unauthorized и причиной youtubeSignupRequired.
Офлайн-доступ или долгосрочный доступ к YouTube API.
В OAuth 2.0 используются токены с коротким и длительным сроком действия. Для разовых операций лучше всего подходят токены доступа с коротким сроком действия. Срок действия таких токенов истекает вскоре после их предоставления. Для длительных заданий рекомендуется получить токен обновления, который используется для получения токенов доступа с коротким сроком действия.
Чтобы ваше приложение получило токен обновления с длительным сроком действия, а не токен доступа с коротким сроком действия, при создании идентификатора клиента используйте процесс "Установленное приложение" и выберите Other в качестве значения параметра "Тип установленного приложения":

В этом случае рекомендуется использовать поток "Установленное приложение". Если вам нужен долгосрочный доступ к YouTube API в веб-приложении, вы можете получить его, задав для параметра access_type значение offline, а для параметра approval_prompt – значение force в первоначальном запросе на авторизацию или в конфигурации клиента. Некоторые клиентские библиотеки управляют получением и обновлением токенов доступа. Если вы хотите написать собственный код авторизации, ознакомьтесь с записью в блоге Google Code, которая может послужить основой для вашего кода.
Использование OAuth 2.0 с телефонами, планшетами и другими устройствами
При разработке приложений для Android разработчики могут использовать Google Play services для обработки данных авторизации. Сервисы Google Play предлагают стандартный процесс авторизации для всех API Google, в том числе API платформы YouTube. Этот подход обеспечит гораздо более удобное использование для пользователей вашего приложения для Android, чем специальная аутентификация с помощью ClientLogin.

На устройствах iOS Google предлагает два варианта:
- Google+ Platform for iOS, который позволяет входить в сервисы Google и использовать социальные функции;
- gtm-oauth2 toolkit, который предоставляет авторизационный UIWebView и управляет токенами;
Для устройств, которые должны выступать в качестве "второго экрана", или устройств, таких как телевизоры, без удобных механизмов ввода, предпочтительным подходом является OAuth 2.0 для устройств. При использовании OAuth 2.0 для устройств пользователю предоставляется уникальный код, когда требуется запрос авторизации. На этом этапе пользователям предлагается перейти на сайт http://google.com/device на другом устройстве, например ноутбуке или телефоне, и ввести уникальный код. На экране приложения появится следующее:

Пока пользователь вводит код на другом устройстве, приложение периодически проверяет, был ли введен код. После этого он получает токен для вызовов API. Чтобы увидеть, как это работает, посмотрите демонстрацию, которую можно запустить на любом устройстве с доступом в интернет. Сам API не зависит от платформы, поэтому его можно использовать на устройствах, не поддерживающих веб-рендеринг. Мы опубликовали образец кода на Python, который можно использовать в качестве справочного материала.
Сводка
Авторизация OAuth 2.0 обеспечивает гибкость для разработчиков, которым требуется авторизация YouTube. Разработчикам, знакомым с ClientLogin, может показаться, что настройка приложений для использования OAuth 2.0 требует немного больше усилий на начальном этапе, но после переноса приложения OAuth 2.0 предлагают конечным пользователям больше гибкости, безопасности и удобства на разных платформах.
Если у вас остались вопросы об OAuth 2.0 или примерах из этой статьи, задайте их на сайте StackOverflow, добавив тег youtube-api.