Авторизация OAuth 2.0 от Google, небольшое упущение его разработчиков и Python

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

  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 года происходит такой процесс: https://developers.google.com/identity/protocols/oauth2/resources/oob-migration Видимо, разработчики из 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)

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

Источник: https://habr.com/ru/post/713442/


Интересные статьи

Интересные статьи

О чем эта статья: В основном, о том, как создать рандомайзер биржевых активов используя данные Московской и Питерской бирж на Python.Кому не важна реализация то вот готовый код с минимальными инструкц...
Привет! Меня зовут Саша Шутай, я тимлид в AGIMA. В прошлой статье я рассказывал, что делать, если на проекте Bitrix сожительствует с Vue.js и поисковые боты не видят контента сайта. А в этой помогу ра...
На текущий момент я работаю в компании Мегафон тим лидом фронта. С начала этого года мы в команде Мегафона разрабатываем собственную платформу Интернета вещей. И так как,...
Спикеры Слёрма готовят обновленный интенсив, в котором не будет тем для администраторов. Мы убрали тему про обслуживание кластера и сосредоточились на особенностях разработки ПО в Ku...
Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.