С большинством сервисов Google можно взаимодействовать через открытый API (Application programming interface). Чтобы использовать возможности взаимодействия по максимуму, требуется пройти полную авторизацию (OAuth 2.0). Но в отличие от подобных процедур авторизации, скажем, в API ВК, с Google всё несколько сложнее, особенно учитывая небольшое упущение его разработчиков. В самой документации API Google, как будто, не вполне достаточно информации для успешной полной авторизации: у меня и ряда моих коллег попытки запросов к API сервисов Google, используя полную авторизацию (файл credentials), приводили к ошибкам. Эту ошибку я демонстрирую в самом конце этой статеички, а сама статеичка -- это порядок действий в шести шагах, который позволяет избежать этой ошибки на основе обобщения моего опыта.

  1. Отсюда можно начать, чтобы получить общее представление

  2. Далее следует настроить consent screen (To create an OAuth client ID, you must first configure your consent screen – в т.ч. создать своё приложение)

    Пример приложения
    Пример приложения

    Я выбрал User type: External. Scopes не менял

  3. (опционально) Протоколы взаимодействия пользователя, приложения и сервера

    Пример иллюстрации протокола
    Пример иллюстрации протокола
  4. Создать OAuth client ID. Я создал Web client и Desktop client (могут быть привязаны к одному и тому же приложению). Получить Client ID и Client Secret, а также сохранить файл формата JSON с credentials внутри

  5. Для проверки, что всё удалось, в API Explorer сгенерировать простейший запрос, например, как тут. Любопытно, что гугловские пакеты для Python инсталируются как google-api-python-client и google-auth-oauthlib google-auth-httplib2 , а импортируются как googleapiclient и google_auth_oauthlib

  6. Заменить в запросе строку кода credentials = flow.run_console() на credentials = flow.run_local_server() . Если всё сделать правильно, получается примерно так.

    Дальше читать не обязательно. Но если интересна причина необходимости такой замены, то рассказываю: с 2022 года происходит такой процесс. Видимо, разработчики из Google забыли поправить в генераторе кода API Explorer. Поэтому без замены происходит следующее: если запрос написан корректно, появляется ссылка Please visit this URL to authorize this application для получения the authorization code

    Если не произвести замену, то исполняется Out-of-Band (OOB) flow
    Если не произвести замену, то исполняется Out-of-Band (OOB) flow

    Но authorization code получить не удастся, потому что Error 400: invalid_request The out-of-band (OOB) flow has been blocked in order to keep users secure. Follow the Out-of-Band (OOB) flow migration guide linked in the developer docs below to migrate your app to an alternative method. Request details: redirect_uri=urn:ietf:wg:oauth:2.0:oob

    Если не произвести замену, то Error 400: invalid_request The out-of-band (OOB)
    Если не произвести замену, то Error 400: invalid_request The out-of-band (OOB)

Спасибо за внимание!

Комментарии (2)


  1. hawig
    30.01.2023 13:59

    Простите за глупый вопрос, но OAuth 2.0 это про аутентификацию через Google Authenticator или аутентификация на вашем сайте через учетную запись в гугле?


  1. rotmistrov Автор
    30.01.2023 14:00

    Здравствуйте) Если я правильно понял вопрос, то первое. Я пользуюсь этим API для выгрузки данных из сервисов Google. Как правильно, для этого достаточно не файла с credentials, а API key. Проблема была в том, что если воспользоваться именно credentials при подаче запроса к Google, то возникала описанная в публикации ошибка (и не только у меня)