Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Аутентификация в HTTP API HTTP API

Большая часть HTTP API закрыта от прямого доступа и требует прохождения аутентификации. О том, что такое аутентификация, какая она бывает и как работает, мы поговорим в этом уроке.

Аутентификация в HTTP — это процесс проверки подлинности пользователя или клиента, который пытается получить доступ к защищённым ресурсам на сервере. Два из наиболее распространённых методов аутентификации в современных веб-приложениях и API — это Bearer-токены и API-ключи. Эти методы обеспечивают безопасность и контроль доступа, позволяя серверам удостоверяться в том, что запросы исходят от доверенных клиентов.

Bearer-токен

Bearer-токен — это уникальный ключ, который используется для аутентификации и авторизации доступа к ресурсам. После успешной аутентификации, сервер выдаёт клиенту этот токен, который затем используется в каждом последующем запросе.

Как работает Bearer-токен

  1. Получение токена: Когда клиент (например, пользователь через браузер или мобильное приложение) проходит аутентификацию, сервер генерирует уникальный токен. Этот токен может быть получен через специальный эндпоинт, который проверяет учетные данные пользователя, такие как логин и пароль.

    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"}
    
  2. Использование токена: После получения токена, клиент отправляет его в заголовке каждого запроса к серверу. Обычно это делается следующим образом:

    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 для создания нового поста.

  3. Проверка токена: Когда сервер получает запрос с Bearer-токеном, он проверяет его валидность. Это может включать проверку подписи токена, срока его действия и прав доступа. Если токен действителен, сервер отвечает на запрос, предоставляя доступ к ресурсам. Если токен недействителен или истёк, сервер возвращает ошибку, обычно с кодом состояния HTTP 401 Unauthorized.

    Пример ответа на запрос выше:

    {
      "id":"99",
      "authorId":"1",
      "title":"My Post Title",
      "body":"body post"
    }
    

    Обратите внимание, что сервер проставил идентификатор автора. Сервер знает, кому принадлежит токен, поэтому может определить пользователя и использовать его данные.

  4. Обновление токена: Поскольку Bearer-токен имеет ограниченный срок действия, клиент может получить новый токен, используя предыдущий, или снова пройти аутентификацию.

API-ключи

API-ключи — это ещё один способ аутентификации в HTTP, который широко используется для доступа к веб-API. API-ключ это уникальный идентификатор, предоставляемый сервером клиенту для доступа к его ресурсам.

Механизм работы ключей зависит полностью от приложения, так как реализован на уровне приложения, а не HTTP. С HTTP его связывает только то, что сам ключ, обычно, передается в заголовке.

Как работают API-ключи:

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

  2. Использование API-ключа: Клиент отправляет API-ключ вместе с каждым запросом к серверу. API-ключ может быть передан в заголовке, параметре строки запроса или теле запроса. Например, передача ключа через заголовок может выглядеть так:

    curl https://http.hexlet.app/http-api/courses \
        -H "Content-Type: application/json" \
        -H "X-API-Key: tybRrq0Te4tBtQAubh9Qs9qprLyTc2kbBn4laQFPzYxtWymhMZRt5gTQ8a3aBegrgW5FZoEcmijz8micMRFUglLJDAv2QtqSZwzaWugMlyfLvnsIAWhrLS8y"
    
  3. Проверка API-ключа: Сервер получает запрос и проверяет переданный API-ключ. Если ключ действителен, сервер предоставляет доступ к ресурсам. В противном случае сервер возвращает ответ с ошибкой, например, HTTP 403 Forbidden.

Сравнение Bearer-токенов и API-ключей

Базовое различие в работе этих подходов связано со способом получения. Bearer-токен запрашивается программно (из кода), в то время как API ключи копируются руками из веб-интерфейса и подставляются в запросы, например через конфигурацию приложения с помощью переменных окружения.

Хотя оба метода аутентификации — Bearer-токены и API-ключи — позволяют эффективно управлять доступом к защищённым ресурсам, у них есть свои особенности. Bearer-токены предоставляют больше возможностей для управления правами доступа и обеспечения безопасности благодаря своей временной и однократной природе. API-ключи, с другой стороны, проще в использовании и могут быть достаточно эффективны для менее критичных приложений.

В зависимости от требований безопасности и характера приложения, можно выбрать наиболее подходящий метод аутентификации или использовать их комбинацию для достижения максимальной безопасности и удобства работы. В реальных приложениях используются оба метода.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 21 ноября
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 21 ноября
профессия
от 14 960 ₸ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 21 ноября
профессия
от 25 000 ₸ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 21 ноября
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 21 ноября
профессия
от 39 525 ₸ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 21 ноября
профессия
от 25 000 ₸ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 21 ноября
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
Старт 21 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу