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

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

Например, когда пользователь вошел в систему, а затем хочет создать тему форума. Как я узнаю, что пользователь уже зарегистрировался?

Ответ 1

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

OAuth - лучшее, что может получить. Обратитесь к инструкции о том, как реализовать:

Рабочая ссылка из комментария: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf

Ответ 2

Например, когда пользователь имеет login.Now позволяет сказать, что пользователь хочет создать тему форума, Как я узнаю, что пользователь уже вошел в систему?

Подумайте об этом - должно быть какое-то рукопожатие, которое сообщает вашему API "Создать форум", что этот текущий запрос принадлежит аутентифицированному пользователю. Поскольку API REST обычно не имеет состояния, состояние должно быть где-то сохранено. Ваш клиент, потребляющий API REST, отвечает за поддержание этого состояния. Как правило, это в виде некоторого токена, который проходит с момента входа пользователя в систему. Если токен хорош, ваш запрос хорош.

Проверьте, как Amazon AWS выполняет аутентификацию. Это прекрасный пример "передачи доллара" от одного API к другому.

* Я подумал о добавлении некоторого практического ответа на мой предыдущий ответ. Попробуйте Apache Shiro (или любую библиотеку аутентификации/авторизации). Итог, старайтесь избегать пользовательского кодирования. После того, как вы включили свою любимую библиотеку (я использую Apache Shiro, btw), вы можете сделать следующее:

  • Создайте API входа/выхода из системы, например: /api/v1/login и api/v1/logout
  • В этих API входа и выхода из системы выполните проверку подлинности с помощью пользовательский магазин
  • Результат - это токен (обычно, JSESSIONID), который отправляется обратно клиенту (веб, мобильный, любой)
  • С этого момента все последующие вызовы, сделанные вашим клиентом будет включать этот токен
  • Предположим, что ваш следующий вызов выполняется в API под названием /api/v1/findUser
  • Первое, что должен сделать этот код API, это проверить токен ("is этот пользователь аутентифицирован? ")
  • Если ответ возвращается как НЕТ, то вы выбрасываете статус HTTP 401 обратно на клиента. Пусть они справятся с этим.
  • Если ответ "ДА", затем верните запрошенный пользователь

Это все. Надеюсь это поможет.

Ответ 3

  • Используйте HTTP Basic Auth для проверки подлинности клиентов, но обрабатывайте имя пользователя/пароль только как временный токен сеанса.

    Маркер сеанса - это только заголовок, прикрепленный к HTTP-запросу каждый, например: Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0

    Строка Ym9ic2Vzc2lvbjE6czNjcmV0 выше - это строка "bobsession1: s3cret" (которая является именем пользователя/паролем), закодированная в Base64.

  • Чтобы получить маркер временного сеанса выше, укажите функцию API (например: http://mycompany.com/apiv1/login), которая принимает имя мастера-мастера и мастер-пароль в качестве ввода, создает на сервере временное имя пользователя/пароль HTTP Basic Auth и возвращает токен (например: Ym9ic2Vzc2lvbjE6czNjcmV0). Это имя пользователя/пароль должно быть временным, оно должно истечь через 20 минут или около того.

  • Для дополнительной безопасности убедитесь, что служба REST обслуживается через HTTPS, так что информация не передается открытым текстом

Если вы используете Java, Spring Библиотека безопасности обеспечивает хорошую поддержку для реализации вышеописанного метода

Ответ 4

Я думаю, что лучший подход - использовать OAuth2. Google, и вы найдете много полезных сообщений, которые помогут вам настроить его.

Это упростит разработку клиентских приложений для вашего API из веб-приложения или мобильного устройства.

Надеюсь, это поможет вам.