Реалізація авторизації через Одноклассники на сайті

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація авторизації через Одноклассники на сайті
Проста
від 1 робочого дня до 3 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Впровадження Одноклассників OAuth аутентифікації для веб-сайтів

Одноклассники — частина екосистеми VK Group. Авторизація через OK актуальна для аудиторії 35+, особливо у Росії та СНГ. Реалізується через OAuth2 з особливостями підпису запитів до OK API.

Реєстрація додатка

  1. ok.ru/dk?st.cmd=appcenter (або розділ розробників)
  2. Створити зовнішнє додаток
  3. Указати адресу сайту й дозволені redirect URI
  4. Отримати: App ID, Public key, Secret key

Laravel Socialite

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');
    }
}

Підпис запитів до OK API

OK API має специфіку: запити підписуються MD5-хешем від параметрів + session_secret_key. Socialite-провайдер обробляє це автоматично, але при прямих запитах до API потрібно враховувати:

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);
}

Доступні дані

Поле Доступність
UID (унікальний ID) Завжди
Ім'я та прізвище Завжди
Аватар Завжди
Email Вимагає scope GET_EMAIL, може відсутствувати
Дата народження Через додатковий запит до users.getInfo
Місто Через додатковий запит

Терміни

1–2 дні.