Практическое руководство: авторизация
Практическое руководство: авторизация
Введение
В руководстве показан процесс аутентификации и авторизации для устройств «С камеры в облако» (C2C) в проекте Frame.io. Мы рассмотрим как стандартный способ ввода кода вручную, так гораздо более удобный для пользователей способ сопряжения с помощью QR-кода.
Что потребуется?
Если вы этого еще не сделали, прочитайте руководство Перед внедрением. Вы должны были получить от нашей команды client_secret для идентификации вашей интеграции. Если нет, ознакомьтесь с введением в экосистему C2C и свяжитесь с нашей командой.
Предварительные требования для сопряжения по URL и QR-коду
Для реализации сопряжения по URL и QR-коду должны быть выполнены следующие требования:
- Совместимость устройства: убедитесь, что ваше устройство поддерживает генерацию URL-адреса/QR-кода во время процесса сопряжения.
Прохождение процесса авторизации
Чтобы понять поток авторизации с точки зрения пользователя, обратитесь к следующим ресурсам:
- Статья справки по добавлению новых устройств.
- Обучающее видео по авторизации Teradek Cube.
Этот процесс авторизации минимизирует требования к реализации. Вам не потребуется:
- Перенаправлять пользователей в веб-браузеры (за исключением использования сопряжения URL-кодов)
- Обрабатывать аутентификацию пользователей Frame.io
- Представлять интерфейсы выбора аккаунта/проекта
- Разрабатывать сложные компоненты пользовательского интерфейса помимо базового отображения информации
Повышать удобство работы пользователей с сопряжением URL-кодов
Современным пользователям необходимо эффективное взаимодействие с устройствами. Хотя текущий процесс сопряжения вручную функционирует нормально, его можно оптимизировать.
Внедрив сопряжение с помощью URL-адреса и QR-кода — как в стриминговых сервисах, таких как Netflix или Disney+, — мы можем значительно оптимизировать процесс, снизить до минимума число ошибок ввода и сократить время сопряжения.
Идентификация устройства (client_id)
Каждому физическому устройству требуется уникальный идентификатор для отслеживания подключения в рамках проекта пользователя.
Для устройств этим идентификатором является параметр client_id, который необходим при авторизации. При реализации рассмотрите подходящие источники идентификаторов, такие как серийные номера устройств, UUID или другие уникальные строки. Если вы выполняете интеграцию на устройстве Apple, мы рекомендуем использовать уникальный постоянный UUID, который остается неизменным при перезагрузке устройства. Будьте осторожны с персональными данными. Адреса электронной почты пользователей не подходят в качестве значений client_id.
Кроме того, убедитесь, что вы контролируете идентификатор. MAC-адреса устройств не подходят, поскольку они не принадлежат вашему программному обеспечению и могут содержать персональные данные.
Если вам нужна помощь в выборе подходящего идентификатора, наша команда может помочь определить подходящее значение, которое упростит интеграцию.
Шаг 1. Запрос кода устройства
Чтобы начать реализацию, запросите код устройства через конечную точку /v2/auth/device/code:
Традиционный метод сопряжения
Включение сопряжения через URL-код
Для сопряжения через URL-код измените вызов API, добавив дополнительные заголовки:
Примечание. Эти конечные точки аутентификации принимают исключительно данные форм, а не JSON. После аутентификации другие конечные точки будут принимать данные JSON, но конечные точки аутентификации будут отклонять запросы JSON.
Параметры полезной нагрузки
-
client_id: уникальный идентификатор вашего физического устройства. Он должен быть гарантированно уникальным, например серийный номер или UUID.
-
client_secret: предоставляется службой поддержки Frame.io для идентификации модели вашего устройства. Это конфиденциальное значение должно быть недоступно пользователям и храниться в зашифрованном виде.
-
scope: запрашиваемые разрешения, разделенные пробелами. Устройства могут запрашивать:
-
asset_create: разрешает создание и добавление ресурсов. *офлайн: разрешает обновление авторизации с помощью токена обновления. Без этой области пользователям потребуется повторно авторизовать свое устройство каждые 8 часов, поскольку срок действия токенов авторизации ограничен.
В практических реализациях устройства обычно запрашивают обе области.
Понимание ответа API-интерфейса
Запрос генерирует ответ, который выглядит как:
Ответ традиционного сопряжения
Ответ сопряжения URL
Разбор ответа
- device_code: этот внутренний идентификатор должен оставаться скрытым от пользователей. Он идентифицирует запрос авторизации во время опроса.
- expires_in: срок действия кода в секундах.
- interval: рекомендуемый интервал опроса в секундах.
- имя: идентификатор подключаемого устройства.
- user_code: шестизначный код для ввода вручную в Frame.io для сопряжения устройства.
- verification_uri: базовый URL для ввода вручную, если сканирование QR-кода недоступно.
- verification_uri_complete: полный URL, содержащий код сопряжения и предназначенный для создания гиперссылки в мобильном приложении или генерации QR-кода для упрощения навигации пользователя к интерфейсу сопряжения.
Отображение QR-кода для пользователя
Используя verification_uri_complete, создайте и отобразите QR-код на экране устройства, чтобы пользователь мог его отсканировать. Это сделает сопряжение удобнее и эффективнее.
Пример: экран устройства с показанным QR-кодом
Всегда предоставляйте резервные варианты: отображайте user_code и verification_uri для ввода вручную, если отсканировать QR-код невозможно. Можно также показать verification_uri в виде статического QR-кода для сканирования с мобильного устройства. Для интеграции мобильных приложений включите verification_uri_complete как действующую гиперссылку, поскольку пользователи не могут сканировать QR-коды с устройства, на котором работает приложение.
Шаг 2. Опрос для авторизации пользователя
После предоставления кода сопряжения или URL-кода проверьте ввод пользователя с помощью этого запроса:
Параметры полезной нагрузки
- client_id: тот же идентификатор, который использовался в шаге 1.
- device_code: значение
device_code, возвращенное ранее. - grant_type: идентификатор типа разрешения OAuth, неизменно
urn:ietf:params:oauth:grant-type:device_codeдля данной реализации.
Первоначальные попытки опроса обычно возвращают:
Эта некритическая ошибка указывает, что пользователь не завершил ввод кода. Продолжайте опрос до завершения.
Примечание для устройств под управлением iOS: если пользователь переключается на iOS-приложение Frame.io для ввода кода сопряжения, ваше приложение может перейти в фоновый режим. Когда ваше приложение снова станет активным, например в applicationDidBecomeActive, возобновите опрос, чтобы процесс авторизации продолжался, и пользователям не приходилось перезапускать сопряжение.
Если вы получаете:
Срок действия кода истек до ввода пользователем. Создайте новый код/QR-код, повторив шаг 1, предоставьте его пользователю и возобновите опрос.
При успешной авторизации выводится сообщение:
Поздравляем с успешной авторизацией вашего устройства «С камеры в облако»!
Рассмотрим этот ответ:
- access_token: учетные данные аутентификации для доступа к серверной части Frame.io, необходимые в заголовках для будущих запросов API-интерфейса.
- expires_in: срок действия токена доступа в секундах, после которого необходимо обновление.
- refresh_token: используется для управления токенами доступа, в основном для обновления авторизации, но также применим для отзыва.
- token_type: постоянно
bearerдля реализации API-интерфейса C2C , не требует действий.
Объединяем шаги
Теперь реализуем эти вызовы API-интерфейса в псевдокоде Python, обрабатывая возможное истечение срока действия кода устройства:
Примечание. Внешний цикл обрабатывает случаи, когда срок действия кодов сопряжения истекает и требуются новые коды.
На последнем шаге извлеките и отобразите информацию о проекте из Frame.io для подтверждения успешного сопряжения с намеченным проектом. Мы рассмотрим это в следующем руководстве.
Создание и отображение QR-кодов для сопряжения
При реализации сопряжения по URL/QR-коду вам потребуется cоздать QR-код из значения verification_uri_complete в ответе. Вот примеры с использованием популярных библиотек на разных языках программирования:
Пример на Python с использованием qrcode
Пример на JavaScript (веб-версия или Electron)
Пример для Android (Java)
Пример для iOS (Swift)
Лучшие практики для отображения QR-кодов
При реализации сопряжения через QR-код учитывайте эти рекомендации, чтобы сделать работу пользователей удобнее:
-
Оптимальный размер. Отображайте QR-коды размером не менее 200–250 пикселей по каждой стороне для надежного сканирования.
-
Контрастность. Необходима высокая контрастность между QR-кодом и фоном (идеальный вариант — черный на белом).
-
Исправление ошибок. Используйте умеренные уровни исправления ошибок (L или M), чтобы обеспечить баланс между плотностью кода и надежностью.
-
Четкие инструкции. Давайте четкие указания по сканированию кода, например «Для сопряжения устройства отсканируйте этот код камерой вашего смартфона».
-
Несколько вариантов. В качестве резервного варианта всегда предоставляйте вместе с QR-кодом код для сопряжения вручную:
-
Гиперссылка для мобильных приложений. Если ваша интеграция — это мобильное приложение, включите
verification_uri_completeкак действующую гиперссылку, поскольку пользователи не могут отсканировать QR-код с того же устройства. -
Тестирование. Протестируйте QR-коды с различными устройствами и в разных условиях освещения, чтобы гарантировать надежное сканирование.

Поиск и устранение неисправностей
Если возникают проблемы, ознакомьтесь со следующими распространенными сценариями и вариантами решения проблем.
-
Кнопка «Подключить устройство» не отображается. При доступе к панели управления C2C это может указывать на:
-
Отсутствие необходимых разрешений. Если вы видите сообщение, касающееся разрешений, обратитесь к менеджеру учетной записи для получения разрешений или назначения соответствующей роли. * Существующее подключение устройства. После подключения одного устройства вместо первоначальной кнопки «Добавить новое устройство» появляется меню с тремя точками в правом верхнем углу панели «Подключения C2C».
-
Неверный клиент. Ответ
invalid_clientуказывает на несоответствие информации об устройстве, обычно из-за неправильногоclient_secret. -
Неправильный запрос. Ответ
bad_requestуказывает на неправильно сформированные данные запроса. Проверьте имена полей и убедитесь, что включены все обязательные поля.
Если ваша проблема здесь не описана, поделитесь с нами своим опытом, чтобы мы могли улучшить раздел, посвященный устранению неполадок.
Дальнейшие шаги
Мы рекомендуем вам связаться с нашей командой и перейти к руководству по управлению авторизацией. Мы ждем ваших отзывов!