Виды аутентификации

Материал из соответствующей главы книги Let’s Go Further

Во всех перечисленных ниже вариантах предполагается работа через HTTPS.

HTTP Basic Authentication

Логин и пароль передаются в заголовке в виде строки username:password base64-encoded. Пример:

Authorization: Basic YWxpY2VAZXhhbXBsZS5jb206cGE1NXdvcmQ=

Плюсы:

  • простота для клиента – всегда можно передавать один и тот же заголовок для аутентификации.
  • поддерживается многими инструментами, например curl, wget.
  • удобно, когда в бэкенде нет “реальных” пользователей, но нужно закрыть доступ к эндпоинтам.

Минусы:

  • если есть реальные пользователи с хэшами паролей в БД, каждый раз хэшировать переданный пароль для его правки затратно с точки зрения скорости обработки запросов.

Token Authentication

Бэкенд получает логин и пароль, после проверки генерирует и возвращает клиенту токен, который в дальнейшем используется для аутентификации через заголовок вида:

Authorization: Bearer <token>

Stateful token authentication

Сгенерированный токен хранится в БД с указанием соответствующего пользователя и срока действия.

Можно точечно управлять доступом, удаляя токены из БД.

Stateless token authentication

Информация о пользователе и сроке жизни токена хранится в зашифрованном виде в самом токене. Пример технологии – JSON Web Token.

После того, как токен выдан, его невозможно “отозвать”. Можено изменить секрет, используемый для подписания токенов, но это приведёт в негодность все ранее выданные токены, и все пользователям придётся повторить аутентификацию.

Такой подход рекомендуется применять, когда аутентификация пользователя происходит в одном сервисе, а использование – в других, и эти сервисы никак между собой не связаны.

API-key authentication

По аналогии со stateful token – только пользователю выдаётся “вечный” ключ, который он использует в запросах для аутентификации.

Authorization: Key <key>

Сам ключ является случайной строкой. В БД нужно хранить хэш (SHA256 или SHA512) для пущей безопасности.

OAuth 2.0 / OpenID Connect

Сложно в реализации, но не требуется хранить у себя информацию о пользователях и паролях.


📂 Web | Последнее изменение: 22.09.2024 12:18