Реалізація авторизації через Microsoft/Azure AD на сайті

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація авторизації через Microsoft/Azure AD на сайті
Середня
~2-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

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

Microsoft OAuth через Azure Active Directory — стандарт для B2B-додатків, корпоративних порталів і SaaS-сервісів, орієнтованих на компанії, що використовують Microsoft 365. Дозволяє співробітникам входити з корпоративними облік даними без створення окремих паролів.

Типи додатків

  • Single-tenant — тільки користувачі одного конкретного Microsoft-тенанта (компанії)
  • Multi-tenant — користувачі будь-яких Azure AD організацій
  • Personal accounts — особисті Microsoft/Outlook аккаунти
  • Combination — й організації, й особисті аккаунти

Для корпоративних інтеграцій вибирайте single-tenant або multi-tenant. Для споживацьких додатків — personal + organizational accounts.

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

  1. portal.azure.com → Azure Active DirectoryApp registrationsNew registration
  2. Указати Redirect URI: https://example.com/auth/microsoft/callback
  3. Вибрати Supported account types (single/multi-tenant)
  4. Після створення: зберегти Application (client) ID і Directory (tenant) ID
  5. Certificates & secretsNew client secret → зберегти значення (видно тільки одразу)
  6. API permissions → додати: openid, profile, email, User.Read

Laravel Socialite

composer require laravel/socialite socialiteproviders/microsoft-azure
// config/services.php
'azure' => [
    'client_id'     => env('AZURE_CLIENT_ID'),
    'client_secret' => env('AZURE_CLIENT_SECRET'),
    'redirect'      => env('AZURE_REDIRECT_URI'),
    'tenant'        => env('AZURE_TENANT_ID', 'common'), // 'common' для multi-tenant
],

class MicrosoftAuthController extends Controller
{
    public function redirect(): RedirectResponse
    {
        return Socialite::driver('azure')
            ->scopes(['openid', 'profile', 'email', 'User.Read'])
            ->redirect();
    }

    public function callback(): RedirectResponse
    {
        try {
            $msUser = Socialite::driver('azure')->user();
        } catch (\Exception $e) {
            return redirect('/login')->withErrors(['microsoft' => 'Помилка авторизації Microsoft']);
        }

        $user = User::updateOrCreate(
            ['azure_id' => $msUser->getId()],
            [
                'name'              => $msUser->getName(),
                'email'             => $msUser->getEmail(),
                'email_verified_at' => now(),
                'azure_tenant_id'   => $msUser->user['tid'] ?? null,
            ]
        );

        Auth::login($user, remember: true);
        return redirect()->intended('/dashboard');
    }
}

Single-Tenant: Обмеження по організації

Для single-tenant вмість 'common' у tenant указується конкретний Tenant ID:

// config/services.php
'azure' => [
    'tenant' => env('AZURE_TENANT_ID'), // конкретний тенант
],

Azure буде видавати токени тільки користувачам цієї організації.

Multi-Tenant: Валідація тенанта

При multi-tenant додатку потрібно перевіряти, що користувач з дозволеної організації:

public function callback(): RedirectResponse
{
    $msUser = Socialite::driver('azure')->user();
    $tenantId = $msUser->user['tid'] ?? null;

    $allowedTenants = explode(',', config('services.azure.allowed_tenants', ''));

    if ($allowedTenants && !in_array($tenantId, $allowedTenants)) {
        return redirect('/login')->withErrors([
            'microsoft' => 'Ваша організація не має доступу до цього додатка'
        ]);
    }

    // ...
}

Отримання додаткових даних через MS Graph

$graphResponse = Http::withToken($msUser->token)
    ->get('https://graph.microsoft.com/v1.0/me', [
        '$select' => 'id,displayName,mail,userPrincipalName,jobTitle,department,officeLocation',
    ]);

$profile = $graphResponse->json();
// $profile['jobTitle']      — посада
// $profile['department']    — підрозділ
// $profile['officeLocation']— офіс

Аватар працівника:

$photoResponse = Http::withToken($msUser->token)
    ->get('https://graph.microsoft.com/v1.0/me/photo/$value');

if ($photoResponse->ok()) {
    Storage::disk('public')->put("avatars/{$user->id}.jpg", $photoResponse->body());
}

Часова розкладка робіт

Етап Час
Реєстрація в Azure + налаштування дозволів 0.5 дня
OAuth callback + зберігання tenant ID 1.5 дня
MS Graph: додаткові дані, аватар 1 день
Тести з реальним тенантом 1 день

Разом: 4–5 днів.