Новое

Как настроить двухфакторную аутентификацию через SMS для клиентов

Как настроить двухфакторную аутентификацию через SMS для клиентов
О материале
Автор: Камилла Ершова
Обновлено:
Рубрика: Тарифы и цены

Двухфакторная аутентификация через SMS позволяет добавлять второй уровень защиты к паролю, используя код, отправленный на мобильный телефон. Настройка включает выбор SMS-провайдера, интеграцию с системой, настройку шаблонов сообщений и обеспечение безопасности доставки.

Что такое SMS 2FA и почему она важна

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

  • Удобство: Пользователям не требуется дополнительное приложение или аппаратный ключ.
  • Широкая доступность: Почти каждый смартфон может получать SMS.
  • Быстрая интеграция: Многие провайдеры предлагают готовые библиотеки для популярных языков программирования.

По данным обзора 2025 года, 68 % компаний малого и среднего бизнеса используют SMS 2FA как основной метод дополнительной защиты.

Выбор SMS-провайдера и настройка учетной записи

Первый шаг — выбрать надежного провайдера, который соответствует требованиям по безопасности и бюджету. Обратите внимание на доставляемость сообщений, поддержку API и соответствие стандартам GDPR и CCPA.

  1. Зарегистрируйтесь в системе, предоставив реквизиты компании и контактные данные.
  2. Получите API-ключ и секретный токен для аутентификации.
  3. Настройте белый список IP-адресов, если провайдер поддерживает эту функцию.
  4. Добавьте номера телефонов для тестирования в личном кабинете.

Пример конфигурации для провайдера SmsGateway:

{ "api_key": "SG.YOUR_API_KEY", "secret": "YOUR_SECRET_TOKEN", "sender_id": "MyService", "callback_url": "https://myapp.com/webhook/sms-status"
}

Настройка исходящих сообщений

После получения учетных данных используйте метод sendVerificationCode для отправки одноразового кода. Пример запроса:

POST /v1/messages
Host: api.smsgateway.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json { "to": "+1234567890", "message": "Ваш код верификации: 123456", "template": "verification_code"
}

Интеграция SMS 2FA в приложение или сервис

Интеграция обычно выполняется в два этапа: фронтенд-запрос на отправку кода и бэкенд-проверка полученного значения.

Пример потока работы:

  1. Пользователь вводит логин и пароль.
  2. Система генерирует шестизначный токен, сохраняет его хеш в базе данных и отправляет код через SMS.
  3. Пользователь вводит полученный код; сервер сравнивает хеш и завершает аутентификацию.

Рекомендуемый минимальный TTL для SMS-кода — 5 минут. Храните полный код только в памяти; не сохраняйте его в журналах.

Пример кода на Node.js

const express = require('express');
const crypto = require('crypto');
const axios = require('axios'); const app = express();
app.use(express.json()); // Генерация и отправка кода
app.post('/auth/request-code', async (req, res) => { const { phone } = req.body; const code = Math.floor(100000 + Math.random() * 900000); const hash = crypto.createHash('sha256').update(code.toString()).digest('hex'); await db.userCodes.create({ phone, hash, expiresAt: Date.now() + 5*60*1000 }); await axios.post('https://api.smsgateway.com/v1/messages', { to: phone, message: `Ваш код: ${code}` }, { headers: { Authorization: `Bearer ${process.env.SMS_API_KEY}` } }); res.json({ success: true });
}); // Проверка кода
app.post('/auth/verify-code', async (req, res) => { const { phone, code } = req.body; const record = await db.userCodes.findOne({ phone, used: false, expiresAt: { $gt: Date.now() } }); if (!record) return res.status(400).json({ error: 'Код недействителен или истек' }); const hash = crypto.createHash('sha256').update(code.toString()).digest('hex'); if (hash !== record.hash) return res.status(400).json({ error: 'Неверный код' }); record.used = true; await record.save(); // Создать сессию, установить JWT и т.д. res.json({ token: generateJwt(phone) });
});

Обеспечение безопасности SMS 2FA

SMS 2FA уязвима к SIM‑swapping, перехвату сообщений и атаке «человека посередине». Для снижения рисков следуйте следующим практикам:

  • Ограничьте количество попыток ввода кода (например, не более 5 за 10 минут).
  • Используйте каналы доставки с подтвержденной доставляемостью, например, RCS или push-уведомления, в дополнение к SMS.
  • Ведите логирование только факта попытки верификации, а не самого кода.
  • Обучите пользователей распознавать подозрительные SMS (например, запросы на изменение пароля от неизвестных номеров).

По данным National Institute of Standards and Technology (NIST), SMS‑based authentication не рекомендуется для высокобезопасных приложений из-за рисков, связанных с SIM‑swap и перехватом сообщений.

NIST Special Publication 800‑63B, 2025

Если безопасность является критически важной, рассмотрите возможность использования аппаратных токенов (TOTP, U2F) или биометрии в сочетании с SMS в качестве резервного варианта.

Тестирование, мониторинг и оптимизация

После развертывания SMS 2FA необходимо проверить доставляемость, время доставки и обработку ошибок.

  1. Запустите автоматизированные тесты с использованием различных операторов и географических регионов.
  2. Отслеживайте показатели: доставлено, доставлено с задержкой, не доставлено, прочитано.
  3. Настройте алерты в случае превышения порога неудачных попыток верификации.
  4. Проведите аудит логирования для подтверждения отсутствия хранения полных кодов.

Регулярно обновляйте API-ключ и секретный токен провайдера, используя ротацию ключей. Используйте HTTPS для всех запросов к SMS‑API.

Сравнительная таблица: SMS 2FA vs других методов

МетодСкоростьСтоимостьБезопасностьУдобство
SMS 2FA2–5 секундНизкая (за сообщение)Средняя (риск SIM‑swap)Высокая (нет дополнительного оборудования)
TOTP (Google Authenticator)1–3 секундыБесплатно (софт)Высокая (изолированный ключ)Средняя (требует установки приложения)
U2F/Hardware token2–4 секундыСредняя (покупка устройства)Высокая (аппаратное подтверждение)Средняя (нужно носить с собой)
Push‑notification1–3 секундыСредняя (зависит от провайдера)Высокая (криптографическая верификация)Высокая (встроено в многие устройства)

Часто задаваемые вопросы

  • Какой длины должен быть SMS-код?
    Рекомендуется использовать 6‑значный числовой код; он обеспечивает достаточную энтропию и помещается в одном SMS.
  • Можно ли использовать один и тот же код для нескольких пользователей?
    Нет. Каждый код должен быть уникальным и одноразовым; храните хеш отдельно от plain‑text.
  • Что делать, если пользователь не получает SMS?
    Проверьте статус SIM‑карты, роуминг и настройки SPAM‑фильтра оператора. Предоставьте кнопку «повторно отправить» с ограничением по времени.
  • Как защититься от SIM‑swap атак?
    Включите уведомления о смене SIM‑карты, если их поддерживает оператор, и рассмотрите возможность использования дополнительного фактора (например, TOTP) для критически важных транзакций.
  • Нужно ли хранить SMS-коды в базе данных?
    Храните только хеш и метаданные (время создания, срок действия). Полный код должен существовать только в оперативной памяти.
  • Какой провайдер SMS лучше всего подходит для международного бизнеса?
    Выбирайте провайдера с глобальной доставляемостью, поддержкой RCS и прозрачной ценовой политикой за пределами родной страны.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *