Внедрение 2FA с Node.js и Authy

Вы слышали о 2-факторной аутентификации? Если да, и вы хотите знать, как это реализовать, вы попали в нужное место.

Этот пост продемонстрирует 2FA с Node.js и Authy в следующих шагах -

  1. Создайте свой ключ API на панели инструментов Authy
  2. Создайте простое приложение Node.js
  3. Создать API регистрации
  4. Создать API проверки

Полный исходный код этого приложения доступен здесь.

1. Создайте свой ключ API на панели инструментов Authy.

Чтобы создать свой API-ключ, вам необходимо войти в Authy Dashboard. Authy - это услуга, предоставляемая Twilio специально для двухфакторной аутентификации и еще нескольких интересных вещей в этой области. Вы можете узнать больше об Authy и Twilio на их веб-сайте.

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

Вы можете войти в систему с учетными данными authy или с учетной записью twilio, к которой вы связали свою учетную запись authy.

Как только вы это сделаете, вам будет предложено ввести токен аутентификации. Если вы установили приложение Authy, вы получите уведомление с токеном в нем. В качестве альтернативы вы можете запросить токен по SMS.

Предполагая, что вы теперь являетесь пользователем Authy и вошли в свою панель управления, выполните следующие шаги для создания приложения.

  1. Щелкните ссылку «+ Новое приложение» в нижней части панели навигации.
  2. Откроется диалоговое окно. Назовем наше приложение test-app.
  3. Вы попадете на страницу руководства по API. Вы можете начать изучать, как работает Authy API, или перейти на панель инструментов своего приложения. В рамках этой публикации перейдем к панели инструментов.
  4. Здесь вы можете увидеть два ключа - (а) ключ API для производства и (б) ключ API для тестирования. . Для экспериментов и экспериментов вы можете использовать последний.

2. Создайте простое приложение Node.js.

Давайте быстро создадим простое приложение Node.js.

  • Создайте папку под названием 2fa-app и перейдите в эту папку из терминала.
  • Запустите npm init -y. Это создаст скелет приложения Node.js (в основном файл package.json). Параметр -y ответит утвердительно на все вопросы терминала.

  • Запустите команду npm install express body-parser authy - save, чтобы установить экспресс, body-parser и authy. - save сохранит их в файл package.json.

  • Создайте в терминале файл под названием app.js.

  • Добавьте следующий код в app.js
var express = require('express');
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');
          
var port = process.env.PORT || 8080;
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
          
app.use('/api', router);
    
router.get('/', function(req, res) {
  res.json({ message: 'Hey there!' });
});
          
app.listen(port);
console.log('Server started on port - ' + port);

  • Ура! Теперь у вас есть приложение узла, работающее с простым API.

3. Создайте API регистрации.

Добавьте следующий код в app.js, чтобы создать регистрационный api. Замените ‘your-auth-key’ ключом API, который мы создали на шаге № 1.

var authy = require('authy')('your-auth-key');
router.get('/register', function(req, res) {
  console.log('New register request...');
  var isSuccessful = false;
               
  var email = req.param('email');
  var phone = req.param('phone');
  var countryCode = req.param('countryCode');
  authy.register_user(email, phone, countryCode, function (regErr, regRes) {
    console.log('In Registration...');
    if (regErr) {
      console.log(regErr);
      res.send('There was some error registering the user.');
    } else if (regRes) {
      console.log(regRes);
      authy.request_sms(regRes.user.id, function (smsErr, smsRes) {
        console.log('Requesting SMS...');
        if (smsErr) {
          console.log(smsErr);
          res.send('There was some error sending OTP to cell phone.');
        } else if (smsRes) {
          console.log(smsRes);
          res.send('OTP Sent to the cell phone.');
        }
      });
    }
  });
});

Давайте углубимся в приведенный выше код. Я использую Клиент Authy API для Node.js для связи с сервером аутентификации. / register api принимает 3 параметра запроса (1) адрес электронной почты (2) номер телефона и (3) код страны. Вы можете использовать функцию register_user authy со всеми тремя параметрами и функцию обратного вызова, которая принимает в качестве параметров ошибку и ответ. В этой функции, если вы получаете какие-либо ошибки от authy, просто распечатайте их и отправьте пользователю сообщение: При регистрации пользователя произошла ошибка.

Если ошибок нет, распечатайте ответ, который вы получили от authy. Теперь самое интересное - заставить вас отправлять вам SMS с целью проверки на ваш зарегистрированный номер мобильного телефона. Вы можете добиться этого с помощью функции request_sms. Он принимает идентификатор пользователя (который вы получили из ответа функции register_user) и функцию обратного вызова с ошибкой и ответом. Если вы получаете какие-либо ошибки при запросе SMS, просто зарегистрируйте его и отправьте пользователю сообщение: «При отправке одноразового пароля на мобильный телефон произошла ошибка».

Если ошибок нет, это означает, что SMS-сообщение было успешно отправлено на ваш зарегистрированный номер телефона. Итак, просто отправьте сообщение - «OTP отправлен на мобильный телефон».

Потрясающие! Вы вызвали Authy API и запросили регистрацию.

4. Создайте API проверки.

API регистрации отправил вам одноразовый пароль на ваш зарегистрированный номер мобильного телефона. Пришло время проверить одноразовый пароль. Создадим API для проверки. Добавьте следующий код в свой app.js -

router.get('/verify', function(req, res) {
  console.log('New verify request...');
  var id = req.param('id');
  var token = req.param('token');
        
  authy.verify(id, token, function (verifyErr, verifyRes) {
    console.log('In Verification...');
    if (verifyErr) {
      console.log(verifyErr);
      res.send('OTP verification failed.');
    } else if (verifyRes) {
      console.log(verifyRes);
      res.send('OTP Verified.');
    }
  })
});

Все, что делает этот API, это принимает два параметра запроса (1) идентификатор пользователя и (2) OTP, отправленный через SMS. Теперь вы можете использовать функцию проверки authy с идентификатором пользователя и токеном OTP, а также функцию обратного вызова, которая принимает объекты ошибок и ответов. Если при проверке возникнут какие-либо ошибки, просто зарегистрируйте их и отправьте сообщение: «Проверка OTP не удалась».

Если ошибок нет, значит, проверка OTP прошла успешно. Итак, отправьте сообщение - «OTP Verified».

Прохладный! Вы только что реализовали двухфакторную аутентификацию с использованием Node.js и Authy.

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

Опять же, полный исходный код этого приложения доступен здесь.

Если вы нашли это полезным, не забудьте дать как можно больше хлопков и подписаться :)