Я хотел бы реализовать поток аутентификации без пароля для моего мобильного приложения, для которого требуется только, чтобы пользователь щелкнул ссылку в своем электронном письме для входа в систему. Аналогично тому, как Slack обрабатывает аутентификацию.Я буду использовать node
и jwt
для этой реализации.
Я думаю, что придумал безопасный дизайн, но я уверен, что что-то упустил.Я хотел бы получить некоторую критику от сообщества *.
Вот и мы:
- Пользователь открывает мобильное приложение.
- Мы проверяем, есть ли у пользователя токенв их локальном хранилище.
- Если они это сделают, мы добавляем этот токен к их заголовкам и отправляем на домашнюю страницу приложения.
- В противном случае мы просим их ввести свой адрес электронной почты, чтобы начать работу.
- Когда они нажимают «Отправить», мы отправляем
email address
в конечную точку requestMagicLink
на нашем сервере. - Сервер проверяет базу данных на пользователя с этим
email address
- Если мы найдем пользователя с этим электронным письмом, мы берем
id
у этого пользователя - Если пользователя не существует, мы создаем нового пользователя и получаем это
id
- Мы используем JWT для создания токена с
id
, а наш secret
, срок действия которого истекает после 1 hour
- . Мы отправляем этот токен пользователю по ссылке в электронном письме.
- При щелчке эта ссылка отправляет запрос GET на наш сервер в конечной точке
magicLogin
с token
в параметре запроса - Если он не проходит проверку, мы перенаправляем пользователя на экран, где мы запрашиваем его адрес электронной почты для начала.
- Если он успешен, мы генерируем новый токен JWT, используя их
id
и наш secret
, что doesn't have an expiration
, а затем передаем его обратно пользователю в параметрах URL, который перенаправляет их на страницу успеха в нашемapp. - Приложение берет токен из параметра и сохраняет его в локальном хранилище, пока пользователь не выберет выход из системы, и пользователь не будет перенаправлен на домашнюю страницу.
- Запросы к APIвсе теперь содержат токен в заголовках, и пользователь может идти.