Какие провайдеры OAuth 2.0 часто используются для аутентификации в Python-приложениях?

Ответ

Для реализации аутентификации через OAuth 2.0 в Python-приложениях часто интегрируются со следующими провайдерами:

  • Google (библиотеки google-auth, google-api-python-client)
  • GitHub (библиотеки Authlib, requests-oauthlib)
  • Facebook (библиотека facebook-sdk)
  • Microsoft (Azure AD)
  • Yandex ID

Принцип работы и пример

Основная идея заключается в том, что клиентское приложение получает токен от пользователя (например, после входа через Google), а серверная часть должна верифицировать этот токен, отправив запрос к провайдеру.

Пример верификации Google ID Token:

from google.oauth2 import id_token
from google.auth.transport import requests

# GOOGLE_CLIENT_ID - идентификатор вашего приложения, полученный в Google Cloud Console
GOOGLE_CLIENT_ID = "your-google-client-id.apps.googleusercontent.com"

def verify_google_token(token: str) -> dict | None:
    """Верифицирует токен и возвращает данные пользователя или None."""
    try:
        # Проверка токена на валидность и подлинность
        id_info = id_token.verify_oauth2_token(
            token, requests.Request(), GOOGLE_CLIENT_ID
        )
        return id_info
    except ValueError:
        # Токен недействителен
        return None

# Использование:
# user_token = "...токен, полученный от фронтенда..."
# user_data = verify_google_token(user_token)
# if user_data:
#     print(f"Пользователь {user_data['email']} успешно аутентифицирован.")

Универсальные библиотеки

Для упрощения работы с несколькими провайдерами одновременно используют библиотеки-абстракции, такие как:

  • Authlib: Мощная библиотека, поддерживающая OAuth 1.0, OAuth 2.0, OpenID Connect и другие стандарты.
  • python-social-auth: Фреймворк для легкой интеграции множества социальных сетей и провайдеров.

Ответ 18+ 🔞

Да ты посмотри, какие распиздяйства творятся в мире аутентификации! Сидишь ты такой, пишешь свой сервис, а тебе говорят: «А ну-ка, дружок, давай пусть люди заходят не через логин-пароль, а через свои аккаунты!». И понеслась, блядь, пляска с бубнами вокруг этих OAuth 2.0 провайдеров.

Вот они, главные подозреваемые, на которых все молятся:

  • Google (ну тут уж дохуя библиотек: google-auth, google-api-python-client)
  • GitHub (тут Authlib или requests-oauthlib в помощь)
  • Facebook (есть такой facebook-sdk, но он, сука, иногда капризный)
  • Microsoft (Azure AD) — офисная штука, для солидных дядек.
  • Yandex ID — наш, родной, но тоже со своими приколами.

А принцип-то, блядь, какой?

Всё просто, как три копейки. Пользователь на фронтенде тыкает кнопочку «Войти через Гугл», получает какую-то хуйню — токен. А твоя задница, то есть бэкенд, должна этот токен проверить. Не самому же, ёпта, его расшифровывать! Отправляешь запрос провайдеру: «Эй, мудак, это твой токен?». Тот отвечает: «Да, мой, вот данные пользователя» или «Иди нахуй, это фейк».

Вот, смотри, как это для Гугла выглядит в коде. Главное — не налажать с CLIENT_ID, а то вся эта ебаловальня накроется медным тазом.

from google.oauth2 import id_token
from google.auth.transport import requests

# GOOGLE_CLIENT_ID - это твой пропускной билет из Google Cloud Console. Потеряешь — пиши пропало.
GOOGLE_CLIENT_ID = "your-google-client-id.apps.googleusercontent.com"

def verify_google_token(token: str) -> dict | None:
    """Проверяет токен и либо выдает инфу о юзере, либо посылает нахуй (возвращает None)."""
    try:
        # Вот тут магия происходит. Библиотека сама всё проверит.
        id_info = id_token.verify_oauth2_token(
            token, requests.Request(), GOOGLE_CLIENT_ID
        )
        return id_info
    except ValueError:
        # А тут значит токен — говно. Не прошел проверку.
        return None

# Используется это вот так:
# user_token = "...эта хрень с фронта..."
# user_data = verify_google_token(user_token)
# if user_data:
#     print(f"Ну всё, {user_data['email']} зашёл. Работай.")

А если провайдеров, блядь, овердохуища?

Терпения ебать ноль каждый раз под каждого писать свой велосипед. Для таких умников, которые хотят всё и сразу, есть библиотеки-универсалы:

  • Authlib — это, блядь, монстр. Всё умеет: OAuth 1.0, OAuth 2.0, OpenID Connect. Хочешь — в Гугл, хочешь — в Гитхаб, хочешь — в какую-нибудь экзотическую хрень.
  • python-social-auth — вообще отдельная религия. Заточили её под социальные сети, чтобы ты не парился, а просто конфиг подправил и поехал.

Короче, выбирай: либо пишешь под каждого провайдера отдельно и контролируешь всё, либо берешь одну из этих бандур и надеешься, что она тебя не подведет в самый ответственный момент. Волнение ебать!