2014-12-15 1 views
0

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

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

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

ответ

0

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

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

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

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

0

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

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

+0

Я вижу, что вы говорите. Я думаю, что когда пользователь войдет в систему, сервер может отправить ключ клиенту, который клиент будет добавлять со всеми вызовами APi, пока пользователь остается на стороне клиента. – user3288151

+0

@ user3288151 Нет, он не может, потому что это будет сеанс на стороне сервера. Btw. Я не думаю, что вам действительно нужно написать REST API. – inf3rno