В этом документе объясняется, как приложения, установленные на таких устройствах, как телефоны, планшеты и компьютеры, используют конечные точки Google OAuth 2.0 для авторизации доступа к API данных YouTube.
OAuth 2.0 позволяет пользователям делиться определёнными данными с приложением, сохраняя при этом свои имена пользователей, пароли и другую информацию конфиденциальными. Например, приложение может использовать OAuth 2.0 для получения разрешения на загрузку видео на канал пользователя на YouTube.
Установленные приложения распространяются на отдельные устройства, и предполагается, что эти приложения не могут хранить секреты. Они могут обращаться к API Google, пока пользователь находится в приложении или когда приложение работает в фоновом режиме.
Этот процесс авторизации аналогичен процессу, используемому для приложений веб-сервера . Основное отличие заключается в том, что установленные приложения должны открывать системный браузер и предоставлять локальный URI перенаправления для обработки ответов сервера авторизации Google.
Библиотеки и образцы
Для мобильных приложений мы рекомендуем использовать последнюю версию нативной библиотеки Google Identity Services для Android и нативную библиотеку Google Sign-In для iOS . Эти библиотеки обрабатывают авторизацию пользователей и проще в реализации, чем описанный здесь протокол более низкого уровня.
Для приложений, работающих на устройствах, которые не поддерживают системный браузер или имеют ограниченные возможности ввода, таких как телевизоры, игровые консоли, камеры или принтеры, см. раздел OAuth 2.0 для телевизоров и устройств или Вход на телевизорах и устройствах с ограниченными возможностями ввода .
Предпосылки
Включите API для вашего проекта
Любое приложение, которое вызывает API Google, должно включить эти API в API Console.
Чтобы включить API для вашего проекта:
- Open the API Library в Google API Console.
- If prompted, select a project, or create a new one.
- Найдите и включите API данных YouTube на странице «Библиотека» . Найдите другие API, которые будет использовать ваше приложение, и включите их.
Создать учетные данные авторизации
Любое приложение, использующее OAuth 2.0 для доступа к API Google, должно иметь учётные данные авторизации, которые идентифицируют приложение на сервере OAuth 2.0 Google. Ниже описано, как создать учётные данные для вашего проекта. Затем ваши приложения смогут использовать эти учётные данные для доступа к API, которые вы включили для этого проекта.
- Go to the Credentials page.
- Нажмите «Создать клиента» .
- В следующих разделах описаны типы клиентов, поддерживаемые сервером авторизации Google. Выберите тип клиента, рекомендуемый для вашего приложения, назовите своего OAuth-клиента и заполните остальные поля формы соответствующим образом.
Андроид
- Выберите тип приложения Android .
- Введите имя для клиента OAuth. Это имя будет отображаться в вашем проекте. для идентификации клиента.
- Введите имя пакета вашего приложения для Android. Это значение указано в атрибуте
package
элемента<manifest>
в файле манифеста вашего приложения. - Введите отпечаток сертификата подписи SHA-1 для дистрибутива приложения.
- Если ваше приложение использует функцию подписи приложений Google Play , скопируйте отпечаток SHA-1 со страницы подписи приложений в Play Console.
- Если вы управляете собственным хранилищем ключей и ключами подписи, используйте утилиту keytool , входящую в состав Java, для вывода информации о сертификате в удобном для восприятия формате. Скопируйте значение
SHA1
из разделаCertificate fingerprints
в результатах работы keytool . Подробнее см. в разделе «Аутентификация клиента» в документации по API Google для Android.
- (Необязательно) Подтвердите право собственности на ваше приложение для Android.
- Нажмите «Создать» .
iOS
- Выберите тип приложения iOS .
- Введите имя для клиента OAuth. Это имя будет отображаться в вашем проекте. для идентификации клиента.
- Введите идентификатор пакета для вашего приложения. Идентификатор пакета — это значение ключа CFBundleIdentifier в файле ресурсов списка свойств информации вашего приложения ( info.plist ). Это значение чаще всего отображается на панели «Общие» или на панели «Подписание и возможности» редактора проектов Xcode. Идентификатор пакета также отображается в разделе «Общая информация» на странице «Информация о приложении» на сайте App Store Connect от Apple .
Убедитесь, что вы используете правильный идентификатор пакета для своего приложения, так как вы не сможете изменить его, если используете функцию проверки приложений.
- (Необязательный)
Введите идентификатор App Store вашего приложения, если оно опубликовано в App Store от Apple. Идентификатор Store — это числовая строка, включённая в каждый URL-адрес Apple App Store.
- Откройте приложение Apple App Store на устройстве iOS или iPadOS.
- Найдите свое приложение.
- Нажмите кнопку «Поделиться» (квадрат и стрелка вверх).
- Выберите Копировать ссылку .
- Вставьте ссылку в текстовый редактор. Идентификатор App Store — это последняя часть URL.
Пример:
https://apps.apple.com/app/google/id 284815942
- (Необязательный)
Введите идентификатор вашей команды. Подробнее см. в разделе «Как найти идентификатор вашей команды» в документации по учётной записи разработчика Apple.
Примечание: Поле «Идентификатор команды» является обязательным, если вы включаете проверку приложений для своего клиента. - (Необязательный)
Включите проверку приложений (App Check) для вашего приложения iOS. При включении проверки приложений (App Check) служба App Attest от Apple используется для проверки подлинности запросов OAuth 2.0, исходящих от вашего клиента OAuth, и их исходимости от вашего приложения. Это помогает снизить риск маскировки приложения под другое лицо. Узнайте больше о включении проверки приложений (App Check) для вашего приложения iOS .
- Нажмите «Создать» .
UWP
- Выберите тип приложения «Универсальная платформа Windows» .
- Введите имя для клиента OAuth. Это имя будет отображаться в вашем проекте. для идентификации клиента.
- Введите 12-значный идентификатор вашего приложения в Microsoft Store. Его можно найти в Центре партнёров Microsoft на странице «Идентификация приложения» в разделе «Управление приложениями».
- Нажмите «Создать» .
Для приложений UWP пользовательская схема URI не может быть длиннее 39 символов.
Определить области доступа
Области действия позволяют вашему приложению запрашивать доступ только к тем ресурсам, которые ему необходимы, а также позволяют пользователям контролировать объём предоставляемого им доступа. Таким образом, между количеством запрашиваемых областей действия и вероятностью получения согласия пользователя может существовать обратная зависимость.
Прежде чем приступить к внедрению авторизации OAuth 2.0, мы рекомендуем вам определить области, на доступ к которым вашему приложению потребуется разрешение.
API данных YouTube v3 использует следующие области действия:
Объем | Описание |
---|---|
https://www. googleapis. com/ auth/ youtube | Управляйте своим аккаунтом YouTube |
https://www. googleapis. com/ auth/ youtube. channel-memberships. creator | Посмотрите список текущих активных участников канала, их текущий уровень и дату, когда они стали участниками. |
https://www. googleapis. com/ auth/ youtube. force-ssl | Просмотр, редактирование и окончательное удаление ваших видео, оценок, комментариев и субтитров на YouTube. |
https://www. googleapis. com/ auth/ youtube. readonly | Просмотр вашего аккаунта YouTube |
https://www. googleapis. com/ auth/ youtube. upload | Управляйте своими видео на YouTube |
https://www. googleapis. com/ auth/ youtubepartner | Просмотр и управление вашими активами и связанным с ними контентом на YouTube |
https://www. googleapis. com/ auth/ youtubepartner-channel-audit | Просмотр конфиденциальной информации вашего канала YouTube, актуальной во время процесса аудита с партнером YouTube |
Документ «Области действия API OAuth 2.0» содержит полный список областей действия, которые можно использовать для доступа к API Google.
Получение токенов доступа OAuth 2.0
Следующие шаги показывают, как ваше приложение взаимодействует с сервером Google OAuth 2.0 для получения согласия пользователя на выполнение API-запроса от его имени. Ваше приложение должно получить это согласие, прежде чем сможет выполнить запрос к API Google, требующий авторизации пользователя.
Шаг 1: Создайте верификатор кода и задайте вопрос
Google поддерживает протокол Proof Key for Code Exchange (PKCE) для повышения безопасности процесса установки приложения. Для каждого запроса авторизации создаётся уникальный код-верификатор, и его преобразованное значение, называемое «code_challenge», отправляется на сервер авторизации для получения кода авторизации.
Создайте верификатор кода
code_verifier
— это высокоэнтропийная криптографическая случайная строка, использующая незарезервированные символы [AZ] / [az] / [0-9] / "-" / "." / "_" / "~", минимальной длиной 43 символа и максимальной длиной 128 символов.
Верификатор кода должен обладать достаточной энтропией, чтобы сделать угадывание значения нецелесообразным.
Создайте кодовое задание
Поддерживаются два метода создания задания по коду.
Методы генерации кода вызова | |
---|---|
S256 (рекомендуется) | Проверка кода представляет собой хэш SHA256 верификатора кода, закодированный в формате Base64URL (без заполнения).
|
простой | Код проверки имеет то же значение, что и верификатор кода, сгенерированный выше.
|
Шаг 2: Отправьте запрос на сервер OAuth 2.0 Google.
Чтобы получить авторизацию пользователя, отправьте запрос на сервер авторизации Google по адресу https://accounts.google.com/o/oauth2/v2/auth
. Эта конечная точка обрабатывает поиск активных сеансов, аутентифицирует пользователя и получает его согласие. Доступ к конечной точке возможен только по протоколу SSL, и она отклоняет HTTP-подключения (не SSL).
Сервер авторизации поддерживает следующие параметры строки запроса для установленных приложений:
Параметры | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
client_id | Необходимый Идентификатор клиента для вашего приложения. Вы можете найти это значение в . | ||||||||||||||||
redirect_uri | Необходимый Определяет, как сервер авторизации Google отправляет ответ вашему приложению. Для установленных приложений доступно несколько вариантов перенаправления, и вам необходимо настроить учётные данные авторизации с учётом конкретного метода перенаправления. Значение должно точно соответствовать одному из разрешенных URI перенаправления для клиента OAuth 2.0, который вы настроили в клиенте. . Если это значение не соответствует авторизованному URI, вы получите ошибку В таблице ниже показаны соответствующие значения параметра
| ||||||||||||||||
response_type | Необходимый Определяет, возвращает ли конечная точка Google OAuth 2.0 код авторизации. Установите значение параметра для | ||||||||||||||||
scope | Необходимый Список областей действия, разделенных пробелами, которые определяют ресурсы, к которым ваше приложение может получить доступ от имени пользователя. Эти значения используются в окне согласия, которое Google отображает пользователю. Области действия позволяют вашему приложению запрашивать доступ только к тем ресурсам, которые ему необходимы, а также позволяют пользователям контролировать объём предоставляемого им доступа. Таким образом, существует обратная зависимость между количеством запрашиваемых областей действия и вероятностью получения согласия пользователя. API данных YouTube v3 использует следующие области действия:
Документ «Области действия API OAuth 2.0» содержит полный список областей действия, которые можно использовать для доступа к API Google. | ||||||||||||||||
code_challenge | Рекомендуется Задаёт закодированный | ||||||||||||||||
code_challenge_method | Рекомендуется Указывает, какой метод был использован для кодирования | ||||||||||||||||
state | Рекомендуется Указывает любое строковое значение, которое ваше приложение использует для сохранения состояния между вашим запросом авторизации и ответом сервера авторизации. Сервер возвращает точное значение, которое вы отправляете в виде пары Этот параметр можно использовать для различных целей, например, для перенаправления пользователя на нужный ресурс в приложении, отправки одноразовых кодов и предотвращения подделки межсайтовых запросов. Поскольку | ||||||||||||||||
login_hint | Необязательный Если ваше приложение знает, какой пользователь пытается пройти аутентификацию, оно может использовать этот параметр для предоставления подсказки серверу аутентификации Google. Сервер использует эту подсказку для упрощения процесса входа, либо предварительно заполняя поле адреса электронной почты в форме входа, либо выбирая подходящий сеанс множественного входа. Задайте в качестве значения параметра адрес электронной почты или |
Примеры URL-адресов авторизации
На вкладках ниже показаны примеры URL-адресов авторизации для различных вариантов URI перенаправления.
Каждый URL-адрес запрашивает доступ к области, которая разрешает просмотр аккаунта пользователя YouTube. URL-адреса идентичны, за исключением значения параметра redirect_uri
. URL-адреса также содержат обязательные параметры response_type
и client_id
, а также необязательный параметр state
. Каждый URL-адрес содержит переносы строк и пробелы для удобства чтения.
Пользовательская схема URI
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=com.example.app%3A/oauth2redirect& client_id=client_id
IP-адрес обратной связи
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly& response_type=code& state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken& redirect_uri=http%3A//127.0.0.1%3A9004& client_id=client_id
Шаг 3: Google запрашивает согласие пользователя
На этом этапе пользователь решает, предоставлять ли вашему приложению запрошенный доступ. На этом этапе Google отображает окно согласия, в котором отображается название вашего приложения и сервисы Google API, к которым оно запрашивает разрешение, а также учётные данные пользователя и список областей доступа, которые необходимо предоставить. Пользователь может дать согласие на предоставление доступа к одной или нескольким областям доступа, запрошенным вашим приложением, или отклонить запрос.
На этом этапе вашему приложению не нужно ничего делать, так как оно ожидает ответа от сервера Google OAuth 2.0 о предоставлении доступа. Этот ответ поясняется на следующем шаге.
Ошибки
Запросы к конечной точке авторизации Google OAuth 2.0 могут отображать сообщения об ошибках вместо ожидаемых процессов аутентификации и авторизации. Ниже перечислены распространённые коды ошибок и рекомендуемые способы их устранения.
admin_policy_enforced
Учётная запись Google не может авторизовать одну или несколько запрошенных областей действия из-за политик администратора Google Workspace. Подробнее о том, как администратор может ограничить доступ ко всем областям действия или к конфиденциальным и ограниченным областям действия, пока доступ не будет явно предоставлен вашему идентификатору клиента OAuth, см. в справочной статье Google Workspace Управление доступом сторонних и внутренних приложений к данным Google Workspace .
disallowed_useragent
Конечная точка авторизации отображается внутри встроенного пользовательского агента, запрещенного политиками OAuth 2.0 Google.
Андроид
Разработчики Android могут столкнуться с этим сообщением об ошибке при открытии запросов на авторизацию вandroid.webkit.WebView
. Вместо этого разработчикам следует использовать библиотеки Android, такие как Google Sign-In для Android или AppAuth для Android от OpenID Foundation.
Веб-разработчики могут столкнуться с этой ошибкой, когда приложение Android открывает общую веб-ссылку во встроенном пользовательском агенте, а пользователь переходит с вашего сайта на конечную точку авторизации Google OAuth 2.0. Разработчикам следует разрешить открытие общих ссылок в обработчике ссылок по умолчанию операционной системы, который включает как обработчики ссылок приложений Android, так и приложение браузера по умолчанию. Библиотека Android Custom Tabs также поддерживается.
iOS
Разработчики приложений для iOS и macOS могут столкнуться с этой ошибкой при открытии запросов на авторизацию вWKWebView
. Вместо этого разработчикам следует использовать библиотеки iOS, такие как Google Sign-In для iOS или AppAuth от OpenID Foundation для iOS .
Веб-разработчики могут столкнуться с этой ошибкой, когда приложение iOS или macOS открывает общую веб-ссылку во встроенном пользовательском агенте, а пользователь переходит с вашего сайта на конечную точку авторизации Google OAuth 2.0. Разработчикам следует разрешить открытие общих ссылок в обработчике ссылок по умолчанию операционной системы, который включает как обработчики универсальных ссылок , так и приложение браузера по умолчанию. БиблиотекаSFSafariViewController
также поддерживается.
org_internal
Идентификатор клиента OAuth в запросе является частью проекта, ограничивающего доступ к аккаунтам Google в конкретной организации Google Cloud . Подробнее об этом параметре конфигурации см. в разделе «Тип пользователя» справочной статьи «Настройка экрана согласия OAuth».
deleted_client
Клиент OAuth, использованный для выполнения запроса, был удалён. Удаление может быть выполнено вручную или автоматически в случае неиспользуемых клиентов . Удалённые клиенты могут быть восстановлены в течение 30 дней с момента удаления. Подробнее .
invalid_grant
Если вы используете верификатор кода и вызов , параметр code_callenge
недействителен или отсутствует. Убедитесь, что параметр code_challenge
задан правильно.
При обновлении токена доступа он мог быть просрочен или недействителен. Повторно аутентифицируйте пользователя и запросите его согласие на получение новых токенов. Если эта ошибка продолжает появляться, убедитесь, что ваше приложение настроено правильно и вы используете правильные токены и параметры в запросе. В противном случае учётная запись пользователя могла быть удалена или отключена.
redirect_uri_mismatch
redirect_uri
переданный в запросе авторизации, не соответствует авторизованному URI перенаправления для идентификатора клиента OAuth. Проверьте авторизованные URI перенаправления в .
Переданный redirect_uri
может быть недопустимым для данного типа клиента.
Параметр redirect_uri
может ссылаться на внеполосный (OOB) поток OAuth, который устарел и больше не поддерживается. Чтобы обновить интеграцию, обратитесь к руководству по миграции .
invalid_request
С вашим запросом возникла ошибка. Это может быть связано с рядом причин:
- Запрос не был правильно отформатирован.
- В запросе отсутствовали обязательные параметры.
- Запрос использует метод авторизации, который Google не поддерживает. Убедитесь, что ваша интеграция OAuth использует рекомендуемый метод.
- Для перенаправления URI используется пользовательская схема. Если вы видите сообщение об ошибке «Пользовательская схема URI не поддерживается в приложениях Chrome» или « Пользовательская схема URI не включена для вашего клиента Android» , это означает, что вы используете пользовательскую схему URI, которая не поддерживается в приложениях Chrome и по умолчанию отключена на Android. Подробнее об альтернативных вариантах пользовательских схем URI.
Шаг 4: Обработка ответа сервера OAuth 2.0
Способ получения вашим приложением ответа на запрос авторизации зависит от используемой им схемы URI перенаправления . Независимо от схемы, ответ будет содержать либо код авторизации ( code
), либо ошибку ( error
). Например, error=access_denied
означает, что пользователь отклонил запрос.
Если пользователь предоставляет доступ к вашему приложению, вы можете обменять код авторизации на токен доступа и токен обновления, как описано в следующем шаге.
Шаг 5: Обмен кода авторизации на токены обновления и доступа
Чтобы обменять код авторизации на токен доступа, вызовите конечную точку https://oauth2.googleapis.com/token
и задайте следующие параметры:
Поля | |
---|---|
client_id | Идентификатор клиента, полученный из . |
client_secret | Секрет клиента, полученный от . |
code | Код авторизации, возвращенный из первоначального запроса. |
code_verifier | Верификатор кода, созданный вами на Шаге 1 . |
grant_type | Как определено в спецификации OAuth 2.0 , значение этого поля должно быть установлено на authorization_code . |
redirect_uri | Один из URI перенаправления, перечисленных для вашего проекта в для заданного client_id . |
В следующем фрагменте показан пример запроса:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& client_secret=your_client_secret& redirect_uri=http://127.0.0.1:9004& grant_type=authorization_code
Google отвечает на этот запрос, возвращая JSON-объект, содержащий кратковременный токен доступа и токен обновления.
Ответ содержит следующие поля:
Поля | |
---|---|
access_token | Токен, который ваше приложение отправляет для авторизации запроса API Google. |
expires_in | Оставшееся время жизни токена доступа в секундах. |
id_token | Примечание: Это свойство возвращается только в том случае, если ваш запрос включает область действия идентификатора, например, openid , profile или email . Значение представляет собой веб-токен JSON (JWT), содержащий цифровую подпись идентификационной информации пользователя. |
refresh_token | Токен, который можно использовать для получения нового токена доступа. Токены обновления действительны до тех пор, пока пользователь не отзовёт доступ или пока не истечёт срок действия токена обновления. Обратите внимание, что токены обновления всегда возвращаются для установленных приложений. |
refresh_token_expires_in | Оставшееся время жизни токена обновления в секундах. Это значение устанавливается только в том случае, если пользователь предоставляет доступ с ограничением по времени . |
scope | Области доступа, предоставляемые access_token , выраженные в виде списка строк, разделенных пробелами и чувствительных к регистру. |
token_type | Тип возвращаемого токена. В настоящее время значение этого поля всегда равно Bearer . |
В следующем фрагменте показан пример ответа:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/youtube.force-ssl", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
Шаг 6: Проверьте, какие области действия предоставлены пользователями
При запросе нескольких разрешений (областей действия) пользователи могут не предоставить вашему приложению доступ ко всем из них. Ваше приложение должно проверять, какие области действия были фактически предоставлены, и корректно обрабатывать ситуации, когда некоторые разрешения отклонены, обычно путём отключения функций, зависящих от этих отклоненных областей действия.
Однако есть исключения. Приложения Google Workspace Enterprise с делегированием полномочий на уровне домена или приложения, помеченные как «Доверенные» , обходят экран согласия на детализированные разрешения. В таких приложениях пользователи не увидят экран согласия на детализированные разрешения. Вместо этого ваше приложение либо получит все запрошенные области действия, либо не получит ни одной.
Более подробную информацию см. в разделе Как обрабатывать детализированные разрешения .
Чтобы проверить, предоставил ли пользователь вашему приложению доступ к определённой области действия, проверьте поле scope
в ответе токена доступа. Области действия, предоставляемые токеном доступа, представлены в виде списка строк, разделённых пробелами и чувствительных к регистру.
Например, следующий пример ответа токена доступа указывает на то, что пользователь предоставил вашему приложению разрешение просматривать, редактировать и безвозвратно удалять видео, рейтинги, комментарии и субтитры YouTube пользователя:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/youtube.force-ssl", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
Вызов API Google
После того, как ваше приложение получит токен доступа, вы сможете использовать его для вызовов API Google от имени определённой учётной записи пользователя, если API предоставил необходимые ему права доступа. Для этого включите токен доступа в запрос к API, указав либо параметр запроса access_token
, либо значение Bearer
HTTP-заголовка Authorization
. По возможности предпочтительнее использовать HTTP-заголовок, поскольку строки запросов, как правило, отображаются в журналах сервера. В большинстве случаев для настройки вызовов API Google (например, при вызове API данных YouTube ) можно использовать клиентскую библиотеку.
Обратите внимание, что API данных YouTube поддерживает учетные записи служб только для владельцев контента YouTube, которые владеют и управляют несколькими каналами YouTube, например, звукозаписывающими компаниями и киностудиями.
Вы можете опробовать все API Google и просмотреть области их действия на площадке OAuth 2.0 .
Примеры HTTP GET
Вызов конечной точки youtube.channels
(API данных YouTube) с использованием HTTP-заголовка Authorization: Bearer
может выглядеть следующим образом. Обратите внимание, что вам необходимо указать собственный токен доступа:
GET /youtube/v3/channels?part=snippet&mine=true HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
Вот вызов того же API для аутентифицированного пользователя с использованием параметра строки запроса access_token
:
GET https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true
примеры curl
Вы можете протестировать эти команды с помощью приложения командной строки curl
. Вот пример, использующий HTTP-заголовок (рекомендуется):
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true
Или, в качестве альтернативы, параметр строки запроса:
curl https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true
Обновление токена доступа
Токены доступа периодически истекают и становятся недействительными для соответствующего запроса API. Вы можете обновить токен доступа, не запрашивая разрешения у пользователя (даже если пользователь отсутствует), если вы запросили автономный доступ к областям, связанным с токеном.
Чтобы обновить токен доступа, ваше приложение отправляет HTTPS-запрос POST
на сервер авторизации Google ( https://oauth2.googleapis.com/token
), включающий следующие параметры:
Поля | |
---|---|
client_id | Идентификатор клиента, полученный из API Console. |
client_secret | Секрет клиента, полученный от API Console( client_secret неприменим к запросам от клиентов, зарегистрированных как приложения Android, iOS или Chrome.) |
grant_type | Как определено в спецификации OAuth 2.0 , значение этого поля должно быть установлено на refresh_token . |
refresh_token | Токен обновления, возвращенный в результате обмена кодами авторизации. |
В следующем фрагменте показан пример запроса:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=your_client_id& client_secret=your_client_secret& refresh_token=refresh_token& grant_type=refresh_token
Пока пользователь не отозвал предоставленный приложению доступ, сервер токенов возвращает JSON-объект, содержащий новый токен доступа. Пример ответа представлен в следующем фрагменте:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "token_type": "Bearer" }
Обратите внимание, что существуют ограничения на количество выдаваемых токенов обновления: один на комбинацию клиент/пользователь и ещё один на пользователя для всех клиентов. Рекомендуется сохранять токены обновления в долгосрочном хранилище и использовать их до тех пор, пока они остаются действительными. Если ваше приложение запрашивает слишком много токенов обновления, оно может столкнуться с этими ограничениями, и в этом случае старые токены обновления перестанут работать.
Отзыв токена
В некоторых случаях пользователь может захотеть отозвать доступ, предоставленный приложению. Это можно сделать в настройках учётной записи . Дополнительную информацию см. в разделе «Удаление доступа к сайту или приложению» документа поддержки «Сторонние сайты и приложения, имеющие доступ к вашей учётной записи» .
Приложение также может программно отозвать предоставленный ему доступ. Программный отзыв важен в случаях, когда пользователь отменяет подписку, удаляет приложение или когда ресурсы API, необходимые приложению, существенно изменились. Другими словами, часть процесса удаления может включать запрос к API, чтобы гарантировать удаление ранее предоставленных приложению разрешений.
Чтобы программно отозвать токен, ваше приложение отправляет запрос на https://oauth2.googleapis.com/revoke
и включает токен в качестве параметра:
curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \ https://oauth2.googleapis.com/revoke?token={token}
Токен может быть токеном доступа или токеном обновления. Если токен является токеном доступа и у него есть соответствующий токен обновления, токен обновления также будет отозван.
Если отзыв успешно обработан, то код статуса HTTP ответа — 200
В случае возникновения ошибок возвращается код статуса HTTP 400
вместе с кодом ошибки.
Методы перенаправления приложений
Пользовательская схема URI (Android, iOS, UWP)
Пользовательские схемы URI — это форма глубинных ссылок, которая использует пользовательскую схему для открытия вашего приложения.
Альтернатива использованию пользовательских схем URI на Android
Используйте рекомендуемую альтернативу , которая доставляет ответ OAuth 2.0 непосредственно в ваше приложение, устраняя необходимость в URI перенаправления.
Как перейти на библиотеку Android служб идентификации Google
Если вы используете пользовательскую схему для интеграции OAuth на Android, вам потребуется выполнить следующие действия, чтобы полностью перейти на использование рекомендуемой библиотеки Android для служб идентификации Google:
- Обновите свой код, чтобы использовать библиотеку Android для служб идентификации Google.
- Отключить поддержку пользовательской схемы в Google Cloud Console.
Ниже подробно описан процесс перехода на библиотеку Google Identity Services для Android.
- Обновите свой код, чтобы использовать библиотеку Android для служб идентификации Google:
- Проверьте свой код, чтобы определить, отправляете ли вы запрос на сервер OAuth 2.0 Google ; если вы используете пользовательскую схему, ваш запрос будет выглядеть следующим образом:
https://accounts.google.com/o/oauth2/v2/auth? scope=<SCOPES>& response_type=code& &state=<STATE>& redirect_uri=com.example.app:/oauth2redirect& client_id=<CLIENT_ID>
com.example.app:/oauth2redirect
— это URI перенаправления пользовательской схемы в примере выше. Подробнее о формате значения пользовательской схемы URI см. в определении параметраredirect_uri
- Запишите параметры запроса
scope
иclient_id
, которые вам понадобятся для настройки Google Sign-In SDK. - Следуйте инструкциям по авторизации доступа к данным пользователей Google , чтобы настроить SDK. Шаг «Настройка проекта Google Cloud Console» можно пропустить, так как вы повторно используете
client_id
, полученный на предыдущем шаге. - Следуйте инструкциям по запросу разрешений, необходимых для действий пользователя . Это включает в себя следующие шаги:
- Запросить разрешения у пользователя.
- Используйте метод
getServerAuthCode
для получения кода авторизации для областей, для которых вы запрашиваете разрешение. - Отправьте код авторизации на серверную часть вашего приложения, чтобы обменять его на токен доступа и обновления.
- Используйте полученный токен доступа для совершения вызовов API Google от имени пользователя.
- Проверьте свой код, чтобы определить, отправляете ли вы запрос на сервер OAuth 2.0 Google ; если вы используете пользовательскую схему, ваш запрос будет выглядеть следующим образом:
- Отключить поддержку пользовательской схемы в консоли API Google:
- Перейдите в список учетных данных OAuth 2.0 и выберите свой клиент Android.
- Перейдите в раздел «Дополнительные параметры» , снимите флажок «Включить пользовательскую схему URI» и нажмите « Сохранить» , чтобы отключить поддержку пользовательской схемы URI.
Включить пользовательскую схему URI
Если рекомендуемая альтернатива вам не подходит, вы можете включить пользовательские схемы URI для своего клиента Android, выполнив следующие инструкции:- Перейдите в список учетных данных OAuth 2.0 и выберите свой клиент Android.
- Перейдите в раздел «Дополнительные параметры» , установите флажок «Включить пользовательскую схему URI» и нажмите « Сохранить» , чтобы включить поддержку пользовательской схемы URI.
Альтернатива использованию пользовательских схем URI в приложениях Chrome
Используйте API Chrome Identity , который доставляет ответ OAuth 2.0 непосредственно в ваше приложение, устраняя необходимость в URI перенаправления.
IP-адрес обратной связи (macOS, Linux, Windows Desktop)
Чтобы получить код авторизации по этому URL, ваше приложение должно прослушивать локальный веб-сервер. Это возможно на многих, но не на всех платформах. Однако, если ваша платформа поддерживает этот механизм, рекомендуется использовать его для получения кода авторизации.
Когда ваше приложение получает ответ на запрос авторизации, для лучшего удобства использования оно должно отобразить HTML-страницу, которая предложит пользователю закрыть браузер и вернуться в ваше приложение.
Рекомендуемое использование | Приложения для настольных компьютеров macOS, Linux и Windows (но не для универсальной платформы Windows) |
Формировать значения | Установите тип приложения на «Приложение для ПК» . |
Ручное копирование/вставка (устарело)
Защитите свои приложения
Подтвердите право собственности на приложение (Android, Chrome)
Вы можете подтвердить право собственности на свое приложение, чтобы снизить риск его выдачи за другое лицо.
Андроид
Для завершения процесса проверки вы можете использовать свой аккаунт разработчика Google Play, если он у вас есть, и ваше приложение зарегистрировано в Google Play Console . Для успешной проверки должны быть выполнены следующие требования:
- У вас должно быть зарегистрированное приложение в Google Play Console с тем же именем пакета и отпечатком сертификата подписи SHA-1, что и у клиента Android OAuth, для которого вы выполняете проверку.
- Вам необходимо иметь права администратора для приложения в Google Play Console. Подробнее об управлении доступом в Google Play Console.
В разделе «Проверка права собственности на приложение» клиента Android нажмите кнопку «Проверка права собственности» , чтобы завершить процесс проверки.
Если проверка прошла успешно, появится уведомление, подтверждающее успешность процесса. В противном случае появится сообщение об ошибке.
Чтобы исправить ошибку проверки, попробуйте сделать следующее:
- Убедитесь, что проверяемое вами приложение зарегистрировано в Google Play Console.
- Убедитесь, что у вас есть права администратора для приложения в Google Play Console.
Хром
Для завершения процесса верификации вам необходимо использовать учётную запись разработчика Chrome Web Store. Для успешной верификации необходимо выполнить следующие требования:
- У вас должен быть зарегистрированный элемент на панели разработчика Chrome Web Store с тем же идентификатором элемента, что и у клиента OAuth расширения Chrome, для которого вы выполняете проверку.
- Вы должны быть издателем продукта Chrome Web Store. Подробнее об управлении доступом можно узнать на панели разработчика Chrome Web Store.
В разделе «Проверка права собственности на приложение» клиента расширения Chrome нажмите кнопку «Подтвердить право собственности» , чтобы завершить процесс проверки.
Примечание: Подождите несколько минут, прежде чем завершить процесс проверки после предоставления доступа к вашей учетной записи.
Если проверка прошла успешно, появится уведомление, подтверждающее успешность процесса. В противном случае появится сообщение об ошибке.
Чтобы исправить ошибку проверки, попробуйте сделать следующее:
- Убедитесь, что на панели разработчика Chrome Web Store есть зарегистрированный элемент с тем же идентификатором элемента, что и у клиента OAuth расширения Chrome, для которого вы выполняете проверку.
- Убедитесь, что вы являетесь издателем приложения, то есть либо являетесь индивидуальным издателем приложения, либо членом группы издателей. Подробнее об управлении доступом можно узнать в панели разработчика Chrome Web Store.
- Если вы только что обновили список издателей в своей группе, убедитесь, что список участников группы синхронизирован в панели разработчика Chrome Web Store. Подробнее о синхронизации списка участников группы см. здесь.
Проверка приложений (только iOS)
Функция App Check защищает ваши приложения iOS от несанкционированного использования, используя сервис App Attest от Apple для подтверждения того, что запросы к конечным точкам Google OAuth 2.0 исходят от ваших подлинных приложений. Это помогает снизить риск выдачи приложений за других пользователей.
Включите проверку приложений для вашего iOS-клиента
Для успешного включения проверки приложений на вашем iOS-клиенте должны быть выполнены следующие требования:- Вам необходимо указать идентификатор команды для вашего iOS-клиента.
- Не используйте подстановочные знаки в идентификаторе пакета, так как они могут указывать на несколько приложений. Это означает, что идентификатор пакета не должен содержать символ звёздочки (*).
После включения проверки приложений вы начнёте видеть метрики, связанные с запросами OAuth от вашего клиента, в окне редактирования клиента OAuth. Запросы из непроверенных источников не будут блокироваться, пока вы не включите проверку приложений . Информация на странице мониторинга метрик поможет вам определить, когда следует включить проверку.
При включении функции проверки приложений в вашем приложении iOS могут возникнуть ошибки, связанные с функцией проверки приложений. Чтобы исправить эти ошибки, попробуйте выполнить следующие действия:
- Проверьте правильность указанных вами идентификаторов пакета и команды.
- Убедитесь, что вы не используете подстановочный знак для идентификатора пакета.
Обеспечьте проверку приложений для вашего iOS-клиента
Включение проверки приложений для вашего приложения не блокирует автоматически нераспознанные запросы. Чтобы включить эту защиту, перейдите в режим редактирования вашего клиента iOS. Там вы увидите метрики проверки приложений справа от страницы, в разделе «Google Identity для iOS» . Эти метрики включают в себя следующую информацию:- Количество проверенных запросов — запросы с действительным токеном App Check. После включения принудительной проверки App Check будут успешными только запросы этой категории.
- Количество непроверенных запросов: вероятно, устаревшие клиентские запросы — запросы, в которых отсутствует токен App Check; эти запросы могут быть из старой версии вашего приложения, которая не включает реализацию App Check.
- Количество непроверенных запросов: запросы неизвестного происхождения — запросы, в которых отсутствует токен App Check и которые не похожи на запросы, исходящие от вашего приложения.
- Количество непроверенных запросов: недействительные запросы — запросы с недействительным токеном App Check, которые могут исходить от неаутентичного клиента, пытающегося выдать себя за ваше приложение, или из эмулированных сред.
Чтобы включить проверку приложений, нажмите кнопку «ВКЛЮЧИТЬ» и подтвердите свой выбор. После включения проверки все непроверенные запросы от вашего клиента будут отклоняться.
Примечание : после включения принудительного применения изменения вступят в силу в течение 15 минут.
Отменить проверку приложений для вашего клиента iOS
Отмена принудительной проверки приложений для вашего приложения прекратит принудительное применение проверки и разрешит все запросы от вашего клиента к конечным точкам Google OAuth 2.0, включая непроверенные запросы.
Чтобы отменить проверку приложений для клиента iOS, перейдите в режим редактирования клиента iOS, нажмите кнопку ОТМЕНИТЬ и подтвердите свой выбор.
Примечание : после отмены проверки приложений изменения вступят в силу в течение 15 минут.
Отключите проверку приложений для вашего iOS-клиента
Отключение проверки приложений для вашего приложения прекратит весь мониторинг и применение проверки приложений. Вместо этого рассмотрите возможность отмены проверки приложений, чтобы продолжить мониторинг показателей вашего клиента.
Чтобы отключить проверку приложений для клиента iOS, перейдите в режим редактирования клиента iOS и отключите переключатель Защитите свой клиент OAuth от злоупотреблений с помощью проверки приложений Firebase .
Примечание : после отключения проверки приложений изменения вступят в силу в течение 15 минут.
Доступ по времени
Доступ с ограничением по времени позволяет пользователю предоставить вашему приложению доступ к своим данным на ограниченный период времени для выполнения действия. Доступ с ограничением по времени доступен в некоторых продуктах Google в процессе получения согласия, предоставляя пользователям возможность предоставить доступ на ограниченный период времени. Примером может служить API переносимости данных , который позволяет выполнить однократную передачу данных.
Когда пользователь предоставляет вашему приложению доступ с ограничением по времени, токен обновления истекает по истечении указанного срока. Обратите внимание, что при определённых обстоятельствах токены обновления могут быть аннулированы раньше; подробности см. в этих случаях . Поле refresh_token_expires_in
возвращаемое в ответе на обмен кодами авторизации, представляет собой время, оставшееся до истечения срока действия токена обновления в таких случаях.
Дополнительное чтение
В документе IETF Best Current Practice OAuth 2.0 для нативных приложений изложены многие из описанных здесь передовых практик.
Реализация защиты между аккаунтами
Дополнительным шагом для защиты аккаунтов пользователей является реализация Cross-Account Protection с помощью сервиса Cross-Account Protection от Google. Этот сервис позволяет подписаться на уведомления о событиях безопасности, которые предоставляют вашему приложению информацию о важных изменениях в аккаунте пользователя. Затем вы можете использовать эту информацию для принятия мер в зависимости от того, как вы решите реагировать на события.
Вот некоторые примеры типов событий, отправляемых в ваше приложение службой Cross-Account Protection от Google:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
-
https://schemas.openid.net/secevent/oauth/event-type/token-revoked
-
https://schemas.openid.net/secevent/risc/event-type/account-disabled
Дополнительную информацию о реализации защиты перекрестных учетных записей и полный список доступных событий см. на странице Защита учетных записей пользователей с помощью защиты перекрестных учетных записей.