Большая часть HTTP API закрыта от прямого доступа и требует прохождения аутентификации. О том, что такое аутентификация, какая она бывает и как работает, мы поговорим в этом уроке.
Аутентификация в HTTP — это процесс проверки подлинности пользователя или клиента, который пытается получить доступ к защищённым ресурсам на сервере. Два из наиболее распространённых методов аутентификации в современных веб-приложениях и API — это Bearer-токены и API-ключи. Эти методы обеспечивают безопасность и контроль доступа, позволяя серверам удостоверяться в том, что запросы исходят от доверенных клиентов.
Bearer-токен
Bearer-токен — это уникальный ключ, который используется для аутентификации и авторизации доступа к ресурсам. После успешной аутентификации, сервер выдаёт клиенту этот токен, который затем используется в каждом последующем запросе.
Как работает Bearer-токен
Получение токена: Когда клиент (например, пользователь через браузер или мобильное приложение) проходит аутентификацию, сервер генерирует уникальный токен. Этот токен может быть получен через специальный эндпоинт, который проверяет учетные данные пользователя, такие как логин и пароль.
curl -X POST https://http.hexlet.app/http-api/login \ -H "Content-Type: application/json" \ -d '{"email": "max@hotmail.com","password": "password"}'
В примере выше отправляется POST-запрос на маршрут
/login
. В запросе отправляются данные для аутентификацииemail
иpassword
. Ответ на этот запрос может содержать токен:{"token":"r4AR4Fo0j29s9mFk4IUVA2rGTQmIrHWlioifaJLSQQYHbTXHxtSLFUVp8PANrRoAb7fgkSsbN7lt4a86pcJ07ivUpxBLyyCHaY4Pp9I7hRPphCHM7xpZ1om1"}
Использование токена: После получения токена, клиент отправляет его в заголовке каждого запроса к серверу. Обычно это делается следующим образом:
curl -X POST https://http.hexlet.app/http-api/posts \ -H "Content-Type: application/json" \ -H "Authorization: Bearer r4AR4Fo0j29s9mFk4IUVA2rGTQmIrHWlioifaJLSQQYHbTXHxtSLFUVp8PANrRoAb7fgkSsbN7lt4a86pcJ07ivUpxBLyyCHaY4Pp9I7hRPphCHM7xpZ1om1" \ -d '{"title": "My Post Title", "body": "body post"}'
В этом примере мы отправили POST-запрос на маршрут
/posts
для создания нового поста.Проверка токена: Когда сервер получает запрос с Bearer-токеном, он проверяет его валидность. Это может включать проверку подписи токена, срока его действия и прав доступа. Если токен действителен, сервер отвечает на запрос, предоставляя доступ к ресурсам. Если токен недействителен или истёк, сервер возвращает ошибку, обычно с кодом состояния HTTP 401 Unauthorized.
Пример ответа на запрос выше:
{ "id":"99", "authorId":"1", "title":"My Post Title", "body":"body post" }
Обратите внимание, что сервер проставил идентификатор автора. Сервер знает, кому принадлежит токен, поэтому может определить пользователя и использовать его данные.
Обновление токена: Поскольку Bearer-токен имеет ограниченный срок действия, клиент может получить новый токен, используя предыдущий, или снова пройти аутентификацию.
API-ключи
API-ключи — это ещё один способ аутентификации в HTTP, который широко используется для доступа к веб-API. API-ключ это уникальный идентификатор, предоставляемый сервером клиенту для доступа к его ресурсам.
Механизм работы ключей зависит полностью от приложения, так как реализован на уровне приложения, а не HTTP. С HTTP его связывает только то, что сам ключ, обычно, передается в заголовке.
Как работают API-ключи:
Получение API-ключа: Клиент, желающий получить доступ к API, сначала регистрируется в нужном сервисе, после чего получает уникальный ключ. Все это, обычно, происходит прямо в настройках на сайте используемого сервиса.
Использование API-ключа: Клиент отправляет API-ключ вместе с каждым запросом к серверу. API-ключ может быть передан в заголовке, параметре строки запроса или теле запроса. Например, передача ключа через заголовок может выглядеть так:
curl https://http.hexlet.app/http-api/courses \ -H "Content-Type: application/json" \ -H "X-API-Key: tybRrq0Te4tBtQAubh9Qs9qprLyTc2kbBn4laQFPzYxtWymhMZRt5gTQ8a3aBegrgW5FZoEcmijz8micMRFUglLJDAv2QtqSZwzaWugMlyfLvnsIAWhrLS8y"
Проверка API-ключа: Сервер получает запрос и проверяет переданный API-ключ. Если ключ действителен, сервер предоставляет доступ к ресурсам. В противном случае сервер возвращает ответ с ошибкой, например, HTTP 403 Forbidden.
Сравнение Bearer-токенов и API-ключей
Базовое различие в работе этих подходов связано со способом получения. Bearer-токен запрашивается программно (из кода), в то время как API ключи копируются руками из веб-интерфейса и подставляются в запросы, например через конфигурацию приложения с помощью переменных окружения.
Хотя оба метода аутентификации — Bearer-токены и API-ключи — позволяют эффективно управлять доступом к защищённым ресурсам, у них есть свои особенности. Bearer-токены предоставляют больше возможностей для управления правами доступа и обеспечения безопасности благодаря своей временной и однократной природе. API-ключи, с другой стороны, проще в использовании и могут быть достаточно эффективны для менее критичных приложений.
В зависимости от требований безопасности и характера приложения, можно выбрать наиболее подходящий метод аутентификации или использовать их комбинацию для достижения максимальной безопасности и удобства работы. В реальных приложениях используются оба метода.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.