Гибридное приложение JS - хранение токена в localStorage - PullRequest
0 голосов
/ 01 июня 2018

Я разрабатываю гибридное приложение, в котором пользователь может нажать «запомнить меня» при входе в систему с именем пользователя и паролем.В случае, если у пользователя есть только 1 «сохраненная» учетная запись, он автоматически входит в него, но если у него более 1 «сохраненной» учетной записи, приложение отображает список доступных учетных записей (например, учетную запись при входе в Gmail).

Чтобы реализовать описанное выше поведение, я разработал следующую процедуру:

  1. При первом входе в систему имя пользователя и пароль отправляются на сервер через HTTPS
  2. Еслиучетные данные верны, сервер генерирует токен с такой процедурой:
    • объединить хэш имени пользователя и пароля в строку
    • снова хеширует строку с SHA и секретом сервера
    • заменительсимволы в строке
    • создают строку N-символ (токен) из строки
  3. Этот токен затем отправляется обратно на устройство, имя пользователя и этот токенхранятся в LocalStorage
  4. С этого момента пользователь входит в систему с именем пользователя и этим токеном (автоматически или при нажатии учетной записи, в которую он хочет войти)

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

Редактировать: может быть несколько разных людей (например, члены семьи)вошли в учетную запись, потому что приложение контролирует устройство.

1 Ответ

0 голосов
/ 02 июня 2018

Что касается генерации токенов, вы можете взглянуть на то, что называется JWT .Как сказано на странице, JWT - это «метод безопасного представления претензий между двумя сторонами», что означает, что вы можете использовать его для проверки того, что пользователь, использующий вашу страницу, на самом деле является тем, кем он заявляет.Что касается других частей, то вы разработали стандартную стратегию preety (пользователь входит в систему, получает токен, использует этот токен для использования приложения без необходимости повторной регистрации).

Простое объяснение JWT, поскольку выбыло много вопросов:

JWT состоит из трех частей: заголовок, полезная нагрузка и подпись.Заголовок и полезная нагрузка являются общедоступными (т. Е. Пользователь, имеющий токен, может их прочитать, они только закодированы в Base64), поэтому не храните в них секретные данные (при этом имя пользователя и пароль хэшированные с солью должны подойти),Когда вы генерируете jwt, сервер вычисляет хэш заголовка + полезная нагрузка + секрет (секрет, известный только серверу) и помещает его в подпись.Затем, когда пользователь пытается аутентифицировать подпись, она должна соответствовать данным (поскольку сервер снова хэширует заголовок + полезную нагрузку + секрет и сравнивает его с подписью), и только тогда она принимается сервером.Таким образом, не зная, секретный пользователь не может изменить данные самостоятельно.JWT также реализует "из коробки" еще одну дополнительную функцию, которая может вас заинтересовать - срок действия.Таким образом, вы можете автоматически выйти из системы, если они не использовали страницу в течение определенного периода времени.Что касается обновления токенов, есть несколько способов, и вам нужно определить, какой путь вам подходит, Ссылка

...