Переход с ClientLogin на OAuth 2.0

Икаи Лан, YouTube Developer Relations – June 2013

API YouTube используют OAuth 2.0 для авторизации запросов пользователей. Нас часто спрашивают, будем ли мы добавлять поддержку аутентификации ClientLogin или что-то подобное в API YouTube в будущем. Однако с 20 апреля 2012 года ClientLogin официально объявлен устаревшим , и добавлять такой механизм не планируется.

Существует множество причин, по которым мы считаем, что поддержка различных потоков авторизации OAuth 2.0 лучше для пользователей YouTube, чем ClientLogin . Эти потоки поддерживают варианты использования для настольных приложений, веб-приложений, собственных мобильных приложений и даже приложений, которые работают на таких устройствах, как телевизоры, которые не имеют сложных механизмов ввода, что трудно сделать с помощью ClientLogin . Кроме того, мы обнаружили, что ClientLogin вызывает больше головной боли у многих разработчиков после запуска, некоторые из которых мы описываем в нашем блоге ClientLogin #FAIL .

Использование 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 с тем же идентификатором клиента и секретом. В дополнение к Python клиентские библиотеки Google API для других языков программирования также предоставляют вспомогательные методы для управления токенами, которые могут совместно использоваться клиентами и даже использоваться в библиотеках HTTP более низкого уровня непосредственно в заголовке клиента или в качестве параметра URL .

Некоторые примеры сценариев на стороне сервера, использующих автономные токены:

  • Демон, который отслеживает каталог для новых видео для автоматической загрузки на YouTube.
  • Задание cron, которое ежедневно обновляет плейлисты новым контентом.
  • Сценарий, который отслеживает видеоданные с помощью API YouTube Analytics и уведомляет менеджеров каналов, когда происходят определенные события, например, когда совокупное время просмотра превышает лимит. Обратите внимание, что в этом случае OAuth 2.0 является единственным поддерживаемым методом авторизации, поскольку Analytics API не поддерживает ClientLogin.

В разделе о долгоживущих токенах доступа содержится более подробная информация о том, как создавать автономные токены, которые можно использовать для процессов на стороне сервера.

Рекомендации по идентификатору клиента и секрету клиента

Любой код, который использует один и тот же идентификатор клиента и пару секретов, может использовать одни и те же токены доступа. Лучше всего ограничить доступ к идентификатору клиента и секретам клиента кодом, который выполняется на компьютерах и устройствах в вашей организации.

Не включайте свой идентификатор клиента и секрет клиента как часть собственного кода мобильного приложения. Все разработчики, выполняющие аутентификацию OAuth 2.0 с мобильного устройства, должны использовать идентификатор клиента «Установленное приложение», который запрашивает дополнительную информацию, чтобы убедиться, что запрос исходит только от приложения, выпущенного вашей командой.

На устройствах Android вместо использования идентификатора клиента и секрета клиента ваше приложение идентифицируется с помощью комбинации имени пакета и хэша сертификата подписи. На устройствах iOS используются идентификатор пакета и идентификатор магазина приложений. Официальную документацию по получению этой информации можно найти на странице справки Google API Console .

Сервисные аккаунты не работают с API YouTube

Учетные записи служб не работают для вызовов API данных YouTube, поскольку для учетных записей служб требуется связанный канал YouTube, и вы не можете связать новые или существующие каналы с учетными записями служб. Если вы используете учетную запись службы для вызова API данных YouTube, сервер API возвращает ошибку с типом ошибки, установленным как unauthorized , и причиной, установленной как youtubeSignupRequired .

Автономный/длительный доступ к API YouTube

OAuth 2.0 имеет токены с коротким сроком действия и токены с длительным сроком службы. Для разовых операций лучше всего подходят краткосрочные токены доступа . Срок действия этих токенов истекает вскоре после их предоставления. Для длительных заданий вы можете захотеть получить маркер обновления , который используется для получения краткосрочных маркеров доступа.

Чтобы убедиться, что ваше приложение получает долгоживущий токен обновления, а не краткосрочный токен доступа, используйте поток «Установленное приложение» при создании идентификатора клиента и выберите « Other для значения «Тип установленного приложения».

В этом случае рекомендуется использовать поток «Установленное приложение». Если вам нужен долгосрочный доступ к API YouTube в веб-приложении, вы можете получить его, задав для параметра access_type значение offline , а для параметра approval_promptforce в первоначальном запросе на авторизацию или в конфигурации вашего клиента . Некоторые клиентские библиотеки могут управлять получением и обновлением токенов доступа. Если вы заинтересованы в написании собственного пользовательского кода авторизации, мы опубликовали запись в блоге 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 или о каких-либо примерах в этой статье, не стесняйтесь задавать их с помощью тега youtube-api на StackOverflow .