Какие есть примеры реализации аутентификации в веб-приложениях?

«Какие есть примеры реализации аутентификации в веб-приложениях?» — вопрос из категории Тестирование безопасности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Аутентификация — это процесс проверки подлинности пользователя или системы. Вот основные примеры с фокусом на 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.