Как поставить аутентификацию пользователя в мобильном приложении - PullRequest
12 голосов
/ 21 января 2012

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

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

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

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

Спасибо.

1 Ответ

10 голосов
/ 21 января 2012

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

Это означает, что сервер должен отслеживать токены аутентификации, которые он генерирует. Вы также можете отслеживать время создания токена и истечение срока его действия.

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

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

Обновление:

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...