Безопасен ли этот поток аутентификации без пароля?
Я хотел бы реализовать поток аутентификации без пароля для моего мобильного приложения, для которого требуется только, чтобы пользователь щелкнул ссылку в своем электронном письме для входа в систему. Аналогично тому, как 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 теперь содержат токен в заголовках, и пользователь готов к работе.