Ответ
Аутентификация (кто ты?) и авторизация (что тебе можно?) — ключевые концепции безопасности. В Python-приложениях применяются следующие подходы:
-
Basic-аутентификация
- Как работает: Логин и пароль кодируются в
Base64и передаются в заголовкеAuthorization. - Почему: Простота реализации. Подходит для внутренних или некритичных API.
- Недостаток: Небезопасно без HTTPS, так как данные легко декодируются.
import requests from requests.auth import HTTPBasicAuth
response = requests.get('https://api.example.com', auth=HTTPBasicAuth('user', 'pass'))
- Как работает: Логин и пароль кодируются в
-
Token-based (JWT)
- Как работает: После успешного входа сервер выдает клиенту подписанный токен (JWT), который клиент прикрепляет к каждому последующему запросу в заголовке
Authorization: Bearer <token>. - Почему: Stateless-подход (серверу не нужно хранить сессию), хорошо масштабируется и подходит для микросервисов и SPA.
import requests
token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' headers = {'Authorization': f'Bearer {token}'} response = requests.get('https://api.example.com', headers=headers)
- Как работает: После успешного входа сервер выдает клиенту подписанный токен (JWT), который клиент прикрепляет к каждому последующему запросу в заголовке
-
Session-based
- Как работает: Сервер создает сессию после входа, сохраняет ее ID у себя (в памяти, Redis, БД) и отправляет его клиенту в виде cookie. Клиент автоматически отправляет cookie с каждым запросом.
- Почему: Традиционный, stateful-подход. Удобен для монолитных веб-приложений (например, с использованием
Flask-LoginилиDjango Sessions).
-
OAuth 2.0
- Как работает: Протокол делегированной авторизации. Позволяет пользователю дать приложению ограниченный доступ к своим данным на другом сервисе (например, "Войти через Google"), не раскрывая пароль.
- Почему: Стандарт для авторизации через сторонние сервисы.
-
API Keys
- Как работает: Статический ключ-строка, который передается в заголовке или параметре запроса для идентификации приложения (не пользователя).
- Почему: Используется для доступа к публичным или B2B API, где нужно отслеживать использование и применять квоты.
Ключевые принципы безопасности:
- Всегда использовать HTTPS для шифрования трафика.
- Хранить пароли в виде хэшей (например,
bcrypt). - Валидировать и проверять срок жизни токенов.