Добрый вечер.
Я программирую бэкэнд, содержащий HTTP API, который позволяет клиенту войти или зарегистрироваться по предоставленному номеру телефона. Из-за этого этот процесс сильно отличается от традиционного потока аутентификации.
Поскольку аутентификация, ориентированная на телефонный номер, не является безопасной (но чрезвычайно удобной), вы не можете позволить пользователю войти в чужую учетную запись исключительно с использованием номера телефона, что часто встречается в случаях повторного использования телефонных номеров ( Примером является Lyft ).
Вот почему я подумал подражать лишь части того, как Lyft в настоящее время справляется с этим, требуя от пользователя указать свой адрес электронной почты во время регистрации и восстановления учетной записи (я полагаю, что вход в систему осуществляется с помощью дополнительной магической строки со смартфона).
В моем веб-API для входа в систему пользователь отправляет следующие данные: номер телефона, идентификатор смартфона, а также идентификатор и код подтверждения смс.
Вот когда важную роль играют бизнес-правила для аутентификации:
- Если идентификатор смартфона не соответствует номеру телефона, сохраненному в базе данных (возможно, телефон был изменен или сброшен), сервер предполагает, что номер уже принадлежит другому пользователю, и отвечает 409 (Конфликт)
- Если номер не принадлежит никому, сервер отвечает 403 (Запрещено), это означает, что вы можете зарегистрировать новую учетную запись с этим номером.
- Успешный путь - когда идентификатор смартфона соответствует номеру телефона, клиенту возвращаются два токена (токены обновления и доступа).
Для регистрации (регистрации) также существует почти аналогичный набор бизнес-правил, для процесса регистрации также требуется электронная почта пользователя для последующего подтверждения учетной записи (и счетов), это подтверждение эффективно связывает номер телефона и электронная почта с этим клиентом.
Этот же адрес электронной почты может быть позже использован для восстановления учетной записи (если пользователь переключил смартфон или номер), тем самым предотвращая общую проблему, связанную с аутентификацией телефонного номера.
Я решил отделить Identity от моей модели домена, которая называется PhoneNumberAuth (я даже создал ограниченный контекст).
У меня есть множество вопросов по этому поводу. ASP.NET Identity - это обычный способ проверки подлинности стандартными способами (электронная почта, внешние и т. Д.).
В том или ином случае я буду использовать Идентификацию для Авторизация (роли, претензии и т. Д.).
Я просто хочу, чтобы помощь (или руководство) закончилась лучшим решением.
[EDIT]
Одна вещь, которую я хочу, это сгенерировать токен подтверждения электронной почты, Identity предоставляет простой способ их создания и управления. Но для этого сложно интегрировать Identity с моей собственной аутентификацией.