Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → API аутентификация: методы

API аутентификация: сравнение методов

Методы аутентификации API: API keys, JWT, OAuth 2.0, mTLS — сравнение, применение и ограничения.

Прямой ответ

Методы аутентификации API различаются по сложности и безопасности, поэтому выбор метода зависит от типа приложения и требований.

Метод Когда используется
API Keys Простые сервисы, сервис-сервисное взаимодействие
JWT Веб-приложения, мобильные приложения
OAuth 2.0 Делегированная авторизация через провайдера
mTLS Высокие требования безопасности
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials

app = FastAPI()
security = HTTPBearer()

@app.get("/protected")
async def protected(credentials: HTTPAuthorizationCredentials = Depends(security)):
    # Проверка токена
    pass

Выбор метода определяется требованиями безопасности и типом приложения, поэтому каждый метод решает свою задачу. О JWT аутентификации — в статье про JWT аутентификацию.

Сравнение методов и их применение

Каждый метод аутентификации решает свою задачу, поэтому выбор метода зависит от типа приложения и требований безопасности.

API Keys. Простой метод для сервис-сервисного взаимодействия, поэтому используется для внутренних сервисов.

JWT. Метод для веб-приложений и мобильных приложений, поэтому проверка выполняется без обращения к базе данных.

OAuth 2.0. Метод для делегированной авторизации, поэтому приложение не хранит пароли пользователей.

Практическое следствие: использование API keys для публичных API небезопасно, поэтому ключ может быть перехвачен.

Отдельный аспект — mTLS. Метод для высоких требований безопасности, поэтому используется для критичных сервисов.

Три признака некорректного выбора метода.

API keys для публичных API. Ключ может быть перехвачен, поэтому несанкционированный доступ не prevented.

Отсутствие срока действия для JWT. Токен действует неопределённый срок, поэтому компрометация не ограничивается.

Implicit поток для SPA. Токен передаётся через браузер, поэтому может быть перехвачен.

Об OAuth 2.0 — в статье про OAuth 2.0 практику; об управлении API keys — в статье про управление API keys.

Сравнение методов и диагностика

Сравнение методов аутентификации определяет выбор метода, поэтому каждый метод решает свою задачу.

API Keys для внутренних сервисов. Простой метод для сервис-сервисного взаимодействия, поэтому используется для внутренних сервисов.

JWT для веб-приложений. Проверка выполняется без обращения к базе данных, поэтому производительность выше.

OAuth 2.0 для делегированной авторизации. Приложение не хранит пароли пользователей, поэтому безопасность выше.

Практическое следствие: использование API keys для публичных API небезопасно, поэтому ключ может быть перехвачен.

Практика: выбор метода аутентификации

1. Используйте API keys для внутренних сервисов. Простой метод для сервис-сервисного взаимодействия.

2. Используйте JWT для веб-приложений. Проверка выполняется без обращения к базе данных, поэтому производительность выше.

3. Используйте OAuth 2.0 для делегированной авторизации. Приложение не хранит пароли пользователей, поэтому безопасность выше.

4. Используйте mTLS для критичных сервисов. Высокие требования безопасности обеспечиваются двусторонней аутентификацией.

5. Устанавливайте срок действия для токенов. Токен с истёкшим сроком не принимается, поэтому компрометация ограничивается.

6. Фиксируйте аутентификацию в логе. Запись аутентификации позволяет определить, когда и кем был использован токен.

7. Не используйте API keys для публичных API. Ключ может быть перехвачен, поэтому несанкционированный доступ не prevented.

Рекомендации:

  1. Не используйте API keys для публичных API. Ключ может быть перехвачен, поэтому несанкционированный доступ не prevented.
  2. Учитывайте срок действия при выборе метода. Токен с истёкшим сроком не принимается, поэтому компрометация ограничивается.
  3. Сопоставляйте метод с типом приложения. API keys для внутренних сервисов, JWT для веб-приложений, OAuth 2.0 для делегированной авторизации.
  4. Фиксируйте аутентификацию в ошибке. Признак в записи ошибки позволяет определить, когда был использован токен.
  5. Пересматриваем метод при изменении требований. Новые требования безопасности могут требовать другого метода.

Практический сценарий: API key был перехвачен

Контекст: API key был перехвачен, поэтому злоумышленник получил доступ к API.

  1. Диагностика. Проверка показала, что использовался API key для публичного API. Ключ передавался в заголовке запроса, поэтому был перехвачен злоумышленником.
  2. Причина. API key для публичного API небезопасен, поэтому ключ может быть перехвачен.
  3. Действия. (а) Перешли на JWT аутентификацию, чтобы токен проверялся без передачи ключа; (б) установили срок действия токена, чтобы компрометация ограничивалась; (в) добавили фиксацию аутентификации в логе для диагностики; (г) настроили rate limiting, чтобы DoS атаки prevented; (д) проверили, что ключ не передаётся в URL, чтобы не попадал в логи.
  4. Результат. Токен проверяется без передачи ключа, поэтому перехват не выполняется.

Вывод: API key для публичного API небезопасен, поэтому ключ может быть перехвачен. JWT аутентификация проверяет токен без передачи ключа, поэтому перехват не выполняется.

Дополнительная защита

Ротация ключей. Периодическая смена ключей ограничивает срок действия скомпрометированного ключа.

Мониторинг использования. Мониторинг обнаруживает аномальное использование токенов, поэтому компрометация выявляется.

Практическое следствие: отсутствие ротации и мониторинга приводит к тому, что компрометация не ограничивается и не обнаруживается.

FAQ

Какие методы аутентификации API существуют? API Keys, JWT, OAuth 2.0 и mTLS. Каждый метод решает свою задачу, поэтому выбор зависит от типа приложения и требований безопасности.

Когда использовать API keys? Для внутренних сервисов и сервис-сервисного взаимодействия. API keys для публичных API небезопасны, поэтому ключ может быть перехвачен.

Когда использовать JWT? Для веб-приложений и мобильных приложений. Проверка выполняется без обращения к базе данных, поэтому производительность выше.

Когда использовать OAuth 2.0? Для делегированной авторизации через провайдера. Приложение не хранит пароли пользователей, поэтому безопасность выше.

Источники: OAuth.net, JWT.io, OWASP API Security — ссылки в шапке.