Intereting Posts

Как поместить аутентификацию пользователя в мобильное приложение

Меня интересует лучший способ сделать пользовательский аут в мобильном приложении. На данный момент настройка довольно проста. Я сохраняю имя пользователя и пароль в приложении и отправляю его в api каждый раз, когда мне нужно запустить ограниченный запрос.

Я считаю, что это, вероятно, неправильный путь.

Будет ли лучший способ отправить имя пользователя и пароль, когда пользователь войдет в систему, а затем сохранит идентификатор этого пользователя? Проблема заключается в том, что api принимает идентификатор пользователя, а не имя пользователя и пароль. Идентификатор пользователя будет намного проще «угадать», и злонамеренные люди смогут отправить req в api со случайными действиями пользователя, выполняющими свои действия под их учетной записью. У меня есть ключ api. Это достаточно безопасно?

Проблема в том, что я хочу начать интеграцию twitter и facebook oauth в приложение. Я не много читал об этом, но думаю, что вы получаете «токен». Как это будет работать с настройкой, которую вы предлагаете? Будет ли полезно создавать токен в моей собственной базе данных пользователей и использовать токен (будь то мой, facebook или твиттер) в качестве авторизации? Или было бы целесообразно, чтобы каждая служба разделялась и обрабатывала их отдельно?

Спасибо.

Solutions Collecting From Web of "Как поместить аутентификацию пользователя в мобильное приложение"

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

Это означает, что сервер должен отслеживать токены auth, которые он создает. Вы также можете отслеживать время создания токенов и вызывать токены через некоторое время.

Токен должен быть достаточно длинной случайной строкой, поэтому ее нельзя легко догадаться. Как это сделать, ответ был до: Как создать случайную буквенно-цифровую строку?

Лично я предпочитаю подход UUID.

Обновить:

Эта проблема уже решена в веб-браузерах, через файлы cookie и сеансы. Вы можете повторно использовать этот механизм в своих запросах на Android (хотя некоторые пуристы REST опровергают этот подход):

  1. Включить сеансы на сервере.

  2. Когда пользователь регистрируется на сервере, добавьте некоторые данные в сеанс, например, время входа в систему:

    request.getSession().setAttribute("timeOfLogin", System.currentTimeMillis()); 
  3. Поскольку сеансы включены, вам также необходимо включить поддержку файлов cookie в ваших запросах HttpClient: использование файлов cookie через действия при использовании HttpClient

  4. Каждый раз, когда запрос выполняется, сервер должен проверить, содержит ли сеанс атрибут timeOfLogin . В противном случае он должен вернуть ответ HTTP 401.

  5. Когда пользователь выходит из системы, вызовите URL-адрес выхода из системы и очистите файлы cookie на клиенте.