Виды аутентификации
Материал из соответствующей главы книги 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