Как реализовать аутентификацию через Google OAuth 2.0 в Python-приложении?

Ответ

Аутентификация через Google реализуется с помощью протокола OAuth 2.0. Он позволяет приложению получать доступ к данным пользователя на сервисах Google с его разрешения, не запрашивая логин и пароль напрямую.

Основной флоу для серверного приложения:

  1. Пользователь инициирует вход через Google.
  2. Приложение перенаправляет пользователя на страницу согласия Google с указанием запрашиваемых прав (scopes).
  3. После согласия Google перенаправляет пользователя обратно в приложение с временным кодом авторизации.
  4. Приложение обменивает этот код на access token и refresh token.
  5. access token используется для запросов к Google API от имени пользователя.

Для упрощения этого процесса в Python используется библиотека google-auth-oauthlib.

Пример для локального скрипта:

from google_auth_oauthlib.flow import InstalledAppFlow

# Укажите права доступа, которые нужны вашему приложению
SCOPES = ['https://www.googleapis.com/auth/userinfo.profile']

# Загрузка учетных данных из файла, полученного в Google Cloud Console
flow = InstalledAppFlow.from_client_secrets_file(
    'client_secret.json', 
    SCOPES
)

# Запуск локального сервера для прохождения аутентификации в браузере
credentials = flow.run_local_server(port=0)

# credentials теперь можно использовать для авторизованных запросов
# Например, сохранить их для будущего использования
with open('token.json', 'w') as token_file:
    token_file.write(credentials.to_json())

print("Аутентификация прошла успешно!")

Ключевые моменты:

  • Необходимо создать проект в Google Cloud Console и получить client_secret.json.
  • Важно правильно настроить Redirect URIs для вашего приложения.
  • access token имеет короткий срок жизни, для долгосрочного доступа используется refresh token.