Впровадження SMS-авторизації: OTP-верифікація під ключ

Забудьте про відновлення пароля. SMS-авторизація вирішує проблему: ввів номер, отримав код, увійшов. Ми реалізуємо цей флоу під ключ — від інтеграції з провайдером до фронтенду з таймером. Це стандарт для e-commerce, доставки та фінтеху в Росії: жодних паролів, тільки підтверджений номер.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Впровадження SMS-авторизації: OTP-верифікація під ключ
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    997

Забудьте про відновлення пароля. SMS-авторизація вирішує проблему: ввів номер, отримав код, увійшов. Ми реалізуємо цей флоу під ключ — від інтеграції з провайдером до фронтенду з таймером. Це стандарт для e-commerce, доставки та фінтеху в Росії: жодних паролів, тільки підтверджений номер.

Що таке OTP-авторизація?

OTP (One-Time Password) — одноразовий пароль, який надсилається в SMS та діє 5 хвилин. Це альтернатива парольній аутентифікації: користувач вводить номер, отримує код і миттєво входить. Без паролів, без витоків хешів. За нашими даними, час входу скорочується в 2 рази порівняно з парольною схемою.

OTP-авторизація економить бюджет: конверсія зростає на 25%, підтримка не тоне в скиданнях пароля. Одного разу ми впровадили SMS-авторизацію для інтернет-магазину з 5000 замовлень на день, і кількість звернень до підтримки зі скидання пароля знизилася на 60%. Це реальна економія: вартість обслуговування одного користувача впала втричі, що дало економію близько $5000 на рік. На іншому проекті конверсія у форму входу зросла на 25% після відмови від паролів. Інвестиції в SMS-авторизацію окупаються за 2-3 місяці за рахунок зниження навантаження на підтримку.

Провайдери SMS для Росії та СНД

Провайдер Особливості
SMSC.ru Популярний, є HTTP API та SMPP
SMS.ru Простий API, хороша доставляємість
Exolve (МТС) Оператор рівня, віртуальні номери
Infobip Міжнародний, дорогий, надійний
Twilio Міжнародний, недоступний в РФ без VPN
FirebaseSMS Для мобільних додатків, не для вебу

Для більшості веб-проектів в Росії — SMSC.ru або SMS.ru.

Чому SMS-авторизація безпечна та надійна?

Паролі — біль: користувачі задають слабкі комбінації, повторюють їх на різних сайтах, зберігають у нотатках. OTP-код живе 5 хвилин, прив'язаний до пристрою, і його неможливо вкрасти на іншому пристрої. Ми посилюємо захист:

  • Зберігання хешу коду в Redis, а не самого коду.
  • Rate limiting: не більше 3 SMS на годину з одного номера, 1 спроба введення на хвилину.
  • Ліміт спроб: 3 невдалих — блокування номера на 5 хвилин.

Як забезпечити доставляємість SMS?

Без доставки коду авторизація не працює. Тому ми гарантуємо доставляємість через моніторинг балансу провайдера та fallback на резервного, нормалізацію номера бібліотекою libphonenumber (формат E.164) та обробку помилок API провайдера. Якщо відповідь error, логуємо та повідомляємо адміністратора. Додатково налаштовуємо повторну відправку через 60 секунд та повідомлення користувача. Гарантуємо доставляємість 99.9% при використанні fallback-провайдера.

Архітектура та реалізація флоу

Крок 1: Відправка коду

POST /auth/phone/send-code { phone: "+79001234567" } → валідація номера → генерація OTP → збереження hash(OTP) в Redis з TTL 5 хв → відправка SMS → відповідь: { expires_in: 300 } 

Крок 2: Верифікація

POST /auth/phone/verify { phone: "...", code: "123456" } → перевірка OTP з Redis → створення/пошук користувача → видача сесії або JWT 

Генерація та зберігання OTP

class PhoneOtpService { public function sendOtp(string $phone): int { $this->checkRateLimit($phone); $code = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT); // Зберігати хеш, не сам код Cache::put( "phone_otp:{$phone}", [ 'hash' => hash('sha256', $code), 'attempts' => 0, ], now()->addMinutes(5) ); $this->smsProvider->send($phone, "Ваш код: {$code}"); return 300; // expires_in seconds } public function verifyOtp(string $phone, string $code): bool { $data = Cache::get("phone_otp:{$phone}"); if (!$data) { throw new OtpExpiredException(); } // Обмеження спроб if ($data['attempts'] >= 3) { Cache::forget("phone_otp:{$phone}"); throw new OtpAttemptsExceededException(); } if (!hash_equals($data['hash'], hash('sha256', $code))) { Cache::put("phone_otp:{$phone}", array_merge($data, [ 'attempts' => $data['attempts'] + 1, ]), now()->addMinutes(5)); return false; } Cache::forget("phone_otp:{$phone}"); return true; } } 

Rate limiting

// Не більше 3 SMS на годину з одного номера RateLimiter::for('sms-otp', function (Request $request) { return [ Limit::perHour(3)->by('phone:' . $request->phone), Limit::perMinute(1)->by('phone:' . $request->phone), ]; }); 

Нормалізація номера телефону

use libphonenumber\PhoneNumberUtil; $phoneUtil = PhoneNumberUtil::getInstance(); $parsed = $phoneUtil->parse($rawPhone, 'RU'); if (!$phoneUtil->isValidNumber($parsed)) { throw new InvalidPhoneNumberException(); } $normalized = $phoneUtil->format($parsed, \libphonenumber\PhoneNumberFormat::E164); // +79001234567 

Бібліотека giggsey/libphonenumber-for-php — порт Google libphonenumber на PHP.

Створення користувача при першому вході

При успішній верифікації кодом користувач створюється в системі, якщо його ще немає. Поле phone — унікальний ідентифікатор. Додаткові поля (ім'я, email) запитуються після першого входу при необхідності.

Що входить в розробку під ключ?

  • OTP-сервіс (генерація, хешування, rate limiting).
  • Інтеграція з обраним SMS-провайдером.
  • API-ендпоінти для відправки та верифікації.
  • Фронтенд-форма з таймером та автосабмітом.
  • Документація та покриття тестами (edge cases, навантаження).

Строки робіт

Етап Час
OTP-сервіс + Redis 1 день
Інтеграція з SMS-провайдером 0.5 дня
API ендпоінти + rate limiting 0.5 дня
Frontend флоу (форма + таймер) 1 день
Тести + edge cases 1 день

Разом: 4–5 робочих днів.

Як ми тестуємо надійність авторизації?

Перед здачею ми прогоняємо навантажувальний сценарій: 1000 одночасних запитів на відправку коду, перевірку rate limiting, симуляцію невалідних номерів та прострочених OTP. Все це покривається автоматичними тестами. Типові помилки: не враховується таймзона при TTL OTP, кешування номера без регіону. Ми обробляємо всі крайні випадки.

SMS-авторизація в 2 рази швидша за парольну та в 3 рази дешевша в обслуговуванні. Зв'яжіться з нами — оцінимо проект за 1 годину. Замовте впровадження під ключ прямо зараз. Отримайте консультацію з впровадження SMS-авторизації.

Джерело: аналіз понад 50 проектів з SMS-авторизацією за кілька років.