реализовать проверку подлинности телефона - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь реализовать проверку подлинности телефона в моем ядре Apis ядра asp.net, что-то вроде WhatsApp. поток:

  1. пользователь открывает мобильное приложение
  2. если он не текущий пользователь, он может написать свой номер телефона
  3. сервер должен отправить проверочный код на свой мобильный и сохраните validObject в inMemroyCache со сроком действия 1 минута и отправьте идентификатор подтверждения в приложение.
  4. пользователь вводит код, затем мобильное приложение отправляет код с validId через https на серверную часть
  5. серверная часть проверяет код и проверочный идентификатор хранится в кеше.
  6. если true backend отправит идентификатор проверки (не угадывается) с статусом и операция (вход или регистрация новой учетной записи) в мобильное приложение с временный токен , который хранится в кэше памяти с тайм-аутом.
  7. теперь мобильное приложение будет взаимодействовать с API входа / регистрации API на основе параметра операции на предыдущем шаге. и отправьте маркер временного доступа без пароля в приложение для аутентификации пользователя

Я отделил API проверки кода от остальной логики, основанной на лучших методиках API, поскольку каждый API отвечал за выполнение одной задачи.

Мой вопрос: другие приложения следуют этой практике или есть какие-то другие практики? Правильно ли хранить временные токены в кэше, а не хранить их в базе данных.

как Firebase управляет аутентификацией телефона?

1 Ответ

1 голос
/ 24 марта 2019

Если под аутентификацией по телефону вы подразумеваете одноразовый пароль, моим предлагаемым решением будет запрос пользователя OTP, и мы отправим ему подтверждение его запроса.

Затем сгенерируйте код и сохраните его в некоторой серверной базе данных. Далее отправьте пользователю тот же точный код. Мы сохраняем код в серверной базе данных, чтобы сравнить его с тем, что отправил нам пользователь.

Пользователь, предположительно, получает текстовое сообщение, отправляет нам правильный код и приходит на наш сервер, мы сравниваем два кода, и если пользователь ввел правильный код, мы отправим ему дополнительный идентификационный токен, такой как Json Веб-токен для идентификации пользователя для будущих запросов.

Размещение токена на нашем внутреннем сервере делает его более удобным для пользователя и избавляет нас от необходимости кэшировать что-либо с setTimeout или с истечением срока действия.

Таким образом, если пользователь закрывает приложение и не возвращается к нему, пока через день или два он все еще может аутентифицироваться, и нам не нужно беспокоиться о том, что токен находится в кеше.

В основном я работал с Json Web Token и файлами cookie, и я не являюсь разработчиком ASP.NET, чтобы было ясно.

Технология одноразового пароля - это всегда амбициозный проект для ИМО.

Таким образом, нам нужно сохранить код, который пользователь должен вводить в устройство, чтобы мы могли сравнить его в какой-то момент в будущем. Когда вы генерируете код, сохраните его в Firebase, чтобы в будущем вы могли обратиться к Firebase и сказать, что пользователь с номером телефона 212-555-1212 только что отправил вам код 1234, это правильный код?

Итак, Firebase работает с OTP, если вы можете хранить код в Firebase. Однако на самом деле проблема заключается в том, чтобы написать пользователю код. Это актуальное SMS-сообщение. Чтобы справиться с этим, вы не можете использовать только Firebase, вы можете интегрировать чрезвычайно популярный Twilio. Twilio - это общение с пользователями с помощью телефонных SMS-сообщений, поэтому мы можем использовать Twilio для отправки пользователю кода.

Другая часть создает Web-токен Json, опять же, я не являюсь разработчиком ASP.NET, но он поддерживает веб-токены JSON из того, что я посмотрел здесь: JWT-аутентификация для ASP.NET Web API

Вы также можете позаботиться об аутентификации или пользовательской системе внутри Firebase. Как только пользователь вводит OTP, мы генерируем JSON Web Token через Firebase.

Таким образом, все хранилище JSON и вся информация, которая отражает, кто пользователь, все, что можно сохранить в Firebase.

В заключение я сказал, что нам нужно сравнить наш код на сервере. Ну, а какой сервер?

Firebase - это просто хранилище данных, это место для хранения данных JSON, оно не дает нам возможности запускать пользовательский код.

Так ты пишешь сервер для сравнения кодов? Мы НЕ хотим делать это сравнение на устройстве пользователя.

Так что же нам делать? Кроме того, как мы генерируем код? Для этого также не используйте устройство пользователя.

Так, где мы генерируем код? Мы знаем, как использовать хранилище данных Firebase для хранения кода, но как мы его сгенерируем?

Опять же, я не являюсь разработчиком ASP.NET, возможно, вы можете использовать Node или Express, Python или Rails, но, возможно, вы можете найти способ с низким напряжением и низким трением.

Хорошо, вот как я это вижу:

ASP.NET - Показать пользователю форму для регистрации и входа через OTP

Twilio - отправлять текстовые сообщения пользователю

Firebase - Хранить данные пользователя, включая учетные записи пользователей и правильные коды OTP

Google Cloud Functions - Святая корова, откуда это взялось?

Вы можете прочитать об этом здесь: https://medium.com/google-cloud/running-net-on-google-cloud-functions-977e1a1c489

Итак, Облачные функции Google - это фрагменты кода, которые запускаются один раз по требованию на серверах Google. GCF тесно взаимодействует и интегрируется с хранилищами данных Firebase.

Мы можем добавить некоторую логику или обработку к данным, находящимся внутри Firebase.GCF позволит вам использовать некоторую настраиваемую логику для генерации ваших кодов и сохранения их в Firebase, а GCF также может сравнивать код после его отправки пользователем.

AWS Lambda и GCF практически идентичны по функциональности, что может бытьвариант также.Независимо от того, какое решение вы используете, они являются передаваемыми навыками.

Я только что предложил много сложностей, надеюсь, это поможет.

...