Вход в систему без пароля с помощью номера телефона - PullRequest
0 голосов
/ 06 мая 2018

Добрый вечер.

Я программирую бэкэнд, содержащий HTTP API, который позволяет клиенту войти или зарегистрироваться по предоставленному номеру телефона. Из-за этого этот процесс сильно отличается от традиционного потока аутентификации.

Поскольку аутентификация, ориентированная на телефонный номер, не является безопасной (но чрезвычайно удобной), вы не можете позволить пользователю войти в чужую учетную запись исключительно с использованием номера телефона, что часто встречается в случаях повторного использования телефонных номеров ( Примером является Lyft ).

Вот почему я подумал подражать лишь части того, как Lyft в настоящее время справляется с этим, требуя от пользователя указать свой адрес электронной почты во время регистрации и восстановления учетной записи (я полагаю, что вход в систему осуществляется с помощью дополнительной магической строки со смартфона).

В моем веб-API для входа в систему пользователь отправляет следующие данные: номер телефона, идентификатор смартфона, а также идентификатор и код подтверждения смс. Вот когда важную роль играют бизнес-правила для аутентификации:

  • Если идентификатор смартфона не соответствует номеру телефона, сохраненному в базе данных (возможно, телефон был изменен или сброшен), сервер предполагает, что номер уже принадлежит другому пользователю, и отвечает 409 (Конфликт)
  • Если номер не принадлежит никому, сервер отвечает 403 (Запрещено), это означает, что вы можете зарегистрировать новую учетную запись с этим номером.
  • Успешный путь - когда идентификатор смартфона соответствует номеру телефона, клиенту возвращаются два токена (токены обновления и доступа).

Для регистрации (регистрации) также существует почти аналогичный набор бизнес-правил, для процесса регистрации также требуется электронная почта пользователя для последующего подтверждения учетной записи (и счетов), это подтверждение эффективно связывает номер телефона и электронная почта с этим клиентом.

Этот же адрес электронной почты может быть позже использован для восстановления учетной записи (если пользователь переключил смартфон или номер), тем самым предотвращая общую проблему, связанную с аутентификацией телефонного номера.

Я решил отделить Identity от моей модели домена, которая называется PhoneNumberAuth (я даже создал ограниченный контекст).

У меня есть множество вопросов по этому поводу. ASP.NET Identity - это обычный способ проверки подлинности стандартными способами (электронная почта, внешние и т. Д.).

  • Должен ли я расширить классы Identity для охвата моих пользовательских бизнес-правил? Если так, какой путь лучше?
  • Должен ли я вместо этого создать фасадный класс для реализации моих бизнес-правил? Как я сделал здесь: https://gist.github.com/Henry-Keys/856bc84355b30c4095c88b8c28d547da

В том или ином случае я буду использовать Идентификацию для Авторизация (роли, претензии и т. Д.). Я просто хочу, чтобы помощь (или руководство) закончилась лучшим решением.

[EDIT] Одна вещь, которую я хочу, это сгенерировать токен подтверждения электронной почты, Identity предоставляет простой способ их создания и управления. Но для этого сложно интегрировать Identity с моей собственной аутентификацией.

...