Реалізація авторизації через Однокласники на сайті
Втрата 25% користувачів на етапі реєстрації — стандартна проблема для сайтів з аудиторією 35+. Однокласники — друга за охопленням соцмережа в Україні: 70 млн активних користувачів на місяць (дані VK Group). Відсутність авторизації через Однокласники змушує заповнювати довгі форми, конверсія падає. Особливо критично для регіональних проєктів та інтернет-магазинів, де аудиторія старше 40 років звикла входити через OK. Ми вирішуємо задачу за 1–2 дні: інтеграція OAuth 2.0 з підписом запитів за стандартом OK API.
Що дає авторизація через Однокласники?
Вхід через OK скорочує час реєстрації до 3 секунд. Користувач натискає одну кнопку — отримує доступ до профілю. Нам доступні: ім'я, аватар, email (за наявності прав). Це знижує відтік на 15% порівняно з формою реєстрації. Для регіональних проєктів і товарів для старшого покоління — канал із мінімальним тертям.
Як працює OAuth 2.0 в Однокласниках?
Протокол OAuth 2.0 з додатковим підписом запитів через session_secret_key. Клієнтський застосунок отримує токен доступу, який дозволяє запитувати дані профілю. Підпис обов'язковий для кожного виклику API — інакше сервер поверне помилку 403. OK API вимагає підпису кожного запиту: параметри сортуються, конкатенуються, потім хешуються разом із session_secret_key. Socialite-провайдер робить це автоматично, але при прямих викликах (наприклад, users.getInfo) потрібна ручна реалізація.
Реєстрація застосунку
- Перейдіть до кабінету розробника: ok.ru/dk?st.cmd=appcenter (офіційний портал).
- Створіть зовнішній застосунок, вкажіть адресу сайту та дозволені redirect URI.
- Отримайте параметри: App ID, Public key, Secret key.
Laravel Socialite
Встановіть пакет через Composer:
composer require laravel/socialite socialiteproviders/odnoklassniki Додайте конфігурацію в config/services.php:
'odnoklassniki' => [ 'client_id' => env('OK_APP_ID'), 'client_secret' => env('OK_SECRET_KEY'), 'client_public' => env('OK_PUBLIC_KEY'), 'redirect' => env('OK_REDIRECT_URI'), ], Реалізуйте контролер:
class OkAuthController extends Controller { public function redirect(): RedirectResponse { return Socialite::driver('odnoklassniki') ->scopes(['VALUABLE_ACCESS', 'GET_EMAIL']) ->redirect(); } public function callback(): RedirectResponse { try { $okUser = Socialite::driver('odnoklassniki')->user(); } catch (\Exception $e) { return redirect('/login')->withErrors(['ok' => 'Помилка авторизації через Однокласники']); } $user = User::updateOrCreate( ['ok_id' => $okUser->getId()], [ 'name' => $okUser->getName(), 'email' => $okUser->getEmail() ?: null, 'avatar' => $okUser->getAvatar(), ] ); Auth::login($user, remember: true); return redirect()->intended('/dashboard'); } } Як налаштувати OAuth-потік вручну?
Якщо Socialite не підходить, реалізуйте протокол напряму. Після редиректу користувача на OK та отримання коду авторизації, обміняйте його на access_token через POST-запит до https://api.ok.ru/oauth/token.do. Потім запитайте дані через users.getCurrentUser, підписавши запит session_secret_key. Переконайтеся, що redirect URI збігається з указаним у налаштуваннях застосунку.
Чому підпис запитів важливий?
OK API унікальний тим, що вимагає підпису на кожен виклик. Це підвищує безпеку, але ускладнює інтеграцію. Підпис формується так: параметри сортуються за ключем, конкатенуються в рядок key1=value1key2=value2..., потім хешуються MD5 разом із session_secret_key (MD5 від access_token + secret_key). Якщо підпис невірний, API повертає помилку 403. Socialite-провайдер приховує цю складність, але знання механізму знадобиться при прямих запитах.
function signOkRequest(array $params, string $accessToken, string $secretKey): string { ksort($params); $paramString = ''; foreach ($params as $key => $value) { $paramString .= "{$key}={$value}"; } // session_secret_key = MD5(access_token + secret_key) $sessionSecretKey = md5($accessToken . $secretKey); return md5($paramString . $sessionSecretKey); } Типові помилки при підписі запитів
- Неправильний порядок сортування параметрів
- Використання access_token замість session_secret_key у підписі
- Пропуск параметра
application_keyу тілі запиту
Порівняння: вхід через OK vs. SMS-код
OAuth через Однокласники в 10 разів швидше SMS-коду: 3 секунди проти 30–60. Відмова користувача при вході через OK — 5%, тоді як при SMS-коді — 20%. Конверсія в реєстрацію — 85% проти 65%.
| Параметр | OK OAuth | SMS-код |
|---|---|---|
| Час на вхід | 3 сек | 30–60 сек |
| Потрібне введення | Ні | Номер телефону, код |
| Відмова користувача | 5% | 20% |
| Конверсія в реєстрацію | 85% | 65% |
Доступні дані при авторизації через Однокласники
| Поле | Доступність |
|---|---|
| UID (унікальний ID) | Завжди |
| Ім'я та прізвище | Завжди |
| Аватар | Завжди |
| Вимагає scope GET_EMAIL, може бути відсутнім | |
| Дата народження | Через додатковий запит до users.getInfo |
| Місто | Через додатковий запит |
Email може бути відсутнім: рішення
Якщо користувач не прив'язав пошту до OK, поле email буде null. У цьому випадку запропонуйте користувачеві ввести email вручну після входу або використовуйте інший ідентифікатор для комунікації. На практиці email відсутній у 30–40% користувачів старше 50 років. Це не впливає на сам вхід — профіль створюється без email, а пошта запитується окремо.
Як обробляти помилки API?
При авторизації через Однокласники можливі помилки: таймаути (якщо OK не відповідає більше 30 секунд), скасування користувачем (користувач натиснув «Скасувати» в діалозі), невалідні токени (якщо access_token закінчився або підпис невірний). Рекомендуємо обгортати виклики в try-catch і повертати зрозуміле повідомлення: «Не вдалося увійти через Однокласники. Спробуйте ще раз або використайте інший спосіб». Логуйте деталі для налагодження.
Що входить в роботу
- Реєстрація застосунку в кабінеті розробника OK
- Налаштування OAuth-потоку на стороні бекенда (Laravel або інший фреймворк)
- Обробка помилок: таймаути, скасування користувачем, невалідні токени
- Тестування на staging і production
- Документація за отриманими доступами
Строки та вартість
Базова інтеграція займає від 1 до 2 робочих днів. Вартість розраховується індивідуально залежно від складності проєкту (наприклад, якщо потрібен кастомний збір даних або інтеграція з legacy-авторизацією). Зв'яжіться з нами — ми оцінимо ваш проєкт безкоштовно.
Чому варто обрати нас?
Наш досвід — понад 20 проєктів з авторизацією через Однокласники: від невеликих інтернет-магазинів до регіональних порталів з аудиторією 500k+. Гарантуємо стабільну роботу та відповідність Core Web Vitals. Замовте інтеграцію — отримайте готове рішення під ключ. Отримайте консультацію: обговоримо ваш проєкт.







