Как разрешить пользователям проходить аутентификацию с помощью моего REST API?

1

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

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

Итак, как пользователь, входящий в систему, выглядит "под капотом"? Это что-то вроде:

  1. Пользователь вводит свое имя пользователя и пароль
  2. Они отправляются через POST (или PUT) в конечную точку API
  3. Если учетные данные действительны, генерируется уникальный ключ API и возвращается клиенту
  4. Если учетные данные недействительны, ошибка возвращается клиенту

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

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

Заранее спасибо за то, что помогли мне разобраться!

Теги:
rest

1 ответ

2
Лучший ответ

API GroupMe, например, использует подход на основе токенов для аутентификации пользователей своего API (это позволяет пользователям их API создавать скрипты для вызова API от их имени).

Чтобы успешно совершать вызовы API, я (как пользователь API) должен был войти в систему и создать приложение, которое предоставило мне токен доступа (см. Изображение).

Изображение 174551

Этот токен доступа (в случае groupme) - это то, что я должен был включить со всеми запросами, чтобы запрос был успешным. Формат может отличаться в зависимости от того, какой API вы используете, но в случае groupme он выглядит так:

https://api.groupme.com/v3/PAGE_TO_CALL?token=YOUR_ACCESS_TOKEN

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

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

Вот наиболее актуальная выдержка:

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

В обычных веб-приложениях обработка аутентификации обычно осуществляется путем принятия имени пользователя и пароля и сохранения идентификатора пользователя в сеансе. Пользовательский браузер сохраняет cookie с идентификатором сеанса. Когда пользователь посещает страницу на сайте, для которой требуется аутентификация, браузер отправляет файл cookie, приложение просматривает сеанс по идентификатору (если он еще не истек), и поскольку идентификатор пользователя был сохранен в сеансе, пользователь разрешено просматривать страницу.

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

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

Существует стандартный способ сделать это, что стало очень популярным. Он назывался OAuth. В частности, версия 2 стандарта OAuth. Есть много отличных ресурсов в Интернете для реализации OAuth, поэтому я бы сказал, что выходит за рамки этого урока. Если вы используете Ruby, есть несколько больших библиотек, которые обрабатывают большую часть работы для вас, например OmniAuth.

  • 0
    Итак, вы имеете в виду, что вместо «входа в систему» вам пришлось вручную запрашивать токен доступа в их системе, чтобы использовать его при отправке запросов к их API. Вы сказали, что должны были войти в систему, чтобы создать приложение, и я предполагаю, что их собственный сайт взаимодействует с их API. Как этот процесс входа работает с их собственной системой? Я надеюсь, что мой вопрос немного яснее.
  • 0
    что вы имеете в виду в процессе входа? Вы имеете в виду использование токена доступа для аутентификации с помощью их API или вход на dev.groupme.com для создания приложения и получения токена доступа?
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню