Безопасен ли этот поток аутентификации без пароля?

Я хотел бы реализовать поток аутентификации без пароля для моего мобильного приложения, для которого требуется только, чтобы пользователь щелкнул ссылку в своем электронном письме для входа в систему. Аналогично тому, как Slack обрабатывает аутентификацию. Я буду использовать node а также jwt для этой реализации.

Я думаю, что придумал безопасный дизайн, но я уверен, что что-то упустил. Я хотел бы получить некоторую критику от сообщества.

Вот так:

  • Пользователь открывает мобильное приложение.
  • Мы проверяем, есть ли у пользователя токен в его локальном хранилище.
  • Если они это сделают, мы добавим этот токен к их заголовкам и отправим на домашнюю страницу приложения.
  • Иначе, мы приглашаем их ввести свой адрес электронной почты, чтобы начать
  • Когда они нажимают "Отправить", мы размещаем email address к requestMagicLink конечная точка на нашем сервере.
  • Сервер проверяет базу данных для пользователя с этим email address
  • Если мы найдем пользователя с таким адресом электронной почты, мы возьмем id от этого пользователя
  • Если пользователь не существует, мы создаем нового пользователя и получаем, что id
  • Мы используем JWT для генерации токена с id, и наш secret который истекает после 1 hour
  • Мы отправляем этот токен пользователю по ссылке в электронном письме.
  • При нажатии на эту ссылку отправляется запрос GET на наш сервер по адресу magicLogin конечная точка с token в параметре запроса
  • Мы проверяем, что токен правильный, используя JWT и наш secret,
  • Если проверка не пройдена, мы перенаправляем пользователя на экран, на котором мы запрашиваем его адрес электронной почты, чтобы начать работу.
  • Если это успешно, мы генерируем новый токен JWT, используя их id, и наш secret тот doesn't have an expiration, а затем передать его обратно пользователю в параметрах URL-адреса, который перенаправляет их на страницу успеха в нашем приложении.
  • Приложение берет токен из параметра и сохраняет его в локальном хранилище, пока пользователь не решит выйти из системы, и пользователь не будет перенаправлен на домашнюю страницу.
  • Все запросы к API теперь содержат токен в заголовках, и пользователь готов к работе.

0 ответов

Другие вопросы по тегам