Проверка подлинности REST API



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



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

462   4  

4 ответов:

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

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

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

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

подумайте об этом - должно быть какое-то рукопожатие, которое говорит вашему API "создать Форум", что этот текущий запрос от аутентифицированного пользователя. Поскольку API-интерфейсы REST, как правило, без гражданства, государство должно быть сохранено где-то. Клиент, использующий 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 будет делать, это проверить токен ("is этот пользователь аутентифицирован?")
  7. если ответ возвращается как нет, то вы бросаете статус HTTP 401 возвращаемся к клиенту. Пусть сами разбираются.
  8. если ответ да, то переходите к возврату запрошенного пользователя

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

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

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

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

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

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

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

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

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

надеюсь, что это помогает вам.

Comments

    Ничего не найдено.