Ответ
Для реализации аутентификации через 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— вообще отдельная религия. Заточили её под социальные сети, чтобы ты не парился, а просто конфиг подправил и поехал.
Короче, выбирай: либо пишешь под каждого провайдера отдельно и контролируешь всё, либо берешь одну из этих бандур и надеешься, что она тебя не подведет в самый ответственный момент. Волнение ебать!