Ответ
Аутентификация — это процесс проверки подлинности пользователя или системы. Вот основные примеры с фокусом на API и веб-приложения:
1. HTTP Basic Authentication
Использует заголовок Authorization с логином и паролем в кодировке Base64.
import requests
import base64
credentials = base64.b64encode(b'username:password').decode('utf-8')
headers = {'Authorization': f'Basic {credentials}'}
response = requests.get('https://api.example.com/data', headers=headers)
Недостаток: Пароль передается в открытом виде (требуется HTTPS).
2. Аутентификация по токенам (JWT)
Сервер выдает подписанный токен после успешного ввода логина/пароля.
import jwt
import datetime
# Создание токена на сервере
payload = {
'user_id': 123,
'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}
token = jwt.encode(payload, 'SECRET_KEY', algorithm='HS256')
# Клиент отправляет токен в заголовке
headers = {'Authorization': f'Bearer {token}'}
# Сервер проверяет токен
try:
decoded = jwt.decode(token, 'SECRET_KEY', algorithms=['HS256'])
except jwt.ExpiredSignatureError:
print("Токен истек")
Преимущества: Stateless, легко масштабируется.
3. API Keys
Простой ключ, передаваемый в заголовке или параметре запроса.
GET /api/data?api_key=abc123def456
Использование: Для доступа сервисов, а не пользователей.
4. OAuth 2.0 / OpenID Connect
Стандарт для делегированного доступа. Пользователь авторизуется у провайдера (Google, GitHub), который выдает access token вашему приложению.
Best Practice: Для пользовательских сессий в веб-приложениях используйте JWT или сессии с защищенными cookies. Для сервис-сервисного взаимодействия — API Keys или OAuth 2.0 Client Credentials.