REST API — Управление сеансом пользователя без сохранения состояния

Это может быть что-то тривиальное для многих из вас, но мне не повезло в понимании правильного потока для моего сценария использования. Я создаю API для наших мобильных приложений (IOS & Android) и, как и большинство веб-приложений, API имеет определенные функции / страницы (с точки зрения веб-сайта), которые могут быть доступны только зарегистрированному пользователю. Поскольку сеансы обычно не приветствуются в конструкции API, мне интересно, как отслеживать такие вещи в API. Мой вопрос, как мне определить это:

  1. Пользователь вошел в систему со стороны клиента. Поэтому, когда пользователь входит в систему, отправляя свое имя пользователя и пароль, серверная сторона авторизует пользователя после проверки из БД. На этом этапе, что я должен отправить клиенту, что он должен отправить мне с каждым запросом для будущей идентификации?
  2. Убедившись, что я получаю запрос для реального пользователя … пользователь A, например, не может запросить информацию пользователя B. Другими словами, я думаю о том, что если я делаю что-то на основе идентификатора пользователя (или некоторого токена, поскольку он тоже должен иметь какое-то шифрование), тогда кто-то может каким-то образом нарушить мою безопасность и запросить контент для идентификатора другого пользователя … Как я обеспечу это?

По сути, я ищу руководство по поддержанию состояния без гражданства.

1

Решение

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

На стороне сервера I вы можете создать таблицу session_data (session_id, user_id, last_access_time, session_data), которая будет отображать session_id для пользователя. Сессия устареет после того, как last_access_time устареет.

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

В этом случае такую ​​таблицу можно перенести в любое быстрое хранилище.

1

Другие решения

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

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

0