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

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

179 голосов
/ 03 ноября 2011

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

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

Ответы [ 5 ]

113 голосов
/ 20 ноября 2013

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

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

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

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

  1. Создать API входа / выхода, например: /api/v1/login и api/v1/logout
  2. В этих API входа и выхода выполните аутентификацию с вашим хранилищем пользователей.
  3. В результате получается токен (обычно JSESSIONID), который отправляется обратно клиенту (через Интернет, на мобильный телефон и т. Д.)
  4. Начиная с этого момента, все последующие вызовы, сделанные вашим клиентом, будут включать этот токен
  5. Допустим, ваш следующий вызов сделан для API с именем /api/v1/findUser
  6. Первое, что этоКод API будет проверять токен («аутентифицирован ли этот пользователь?»)
  7. Если ответ возвращается как НЕТ, вы возвращаете HTTP 401 Status обратно на клиент.Пусть они справятся с этим.
  8. Если ответ ДА, тогда продолжайте возвращать запрошенного пользователя

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

71 голосов
/ 19 ноября 2012

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

  • Обычная аутентификация - используется кодировка Base64 для имени пользователя и пароля
  • Дайджест-аутентификация - хэширует имя пользователя и пароль перед отправкой их по сети.

OAuth - лучшее, что он может получить. Преимущества, которые дает oAuth - это отзывной или истекающий токен. См. Ниже о том, как реализовать: Рабочая ссылка из комментариев: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf

37 голосов
/ 16 мая 2014
  1. Используйте Базовую аутентификацию HTTP для аутентификации клиентов, но обрабатывайте имя пользователя / пароль только как маркер временного сеанса .

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

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

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

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

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

7 голосов
/ 19 ноября 2012

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

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

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

0 голосов
/ 15 марта 2019

Я использую аутентификацию JWT.В моем приложении просто отлично работает.

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

Этот токен должен быть отправлен каждому другому методу в моем веб-API в заголовке запроса.

Это довольно легкореализовать и очень легко проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...