Как на PHP реализовать авторизацию через Microsoft Account (Outlook/Azure AD) с использованием OpenID Connect?

Авторизация через Microsoft Account (Outlook/Azure AD) с использованием OpenID Connect на PHP реализуется через протокол OAuth 2.0 в связке с библиотекой league/oauth2-client или thephpleague/oauth2-microsoft. Ниже — подробное пошаговое руководство.

## 1. Регистрация приложения в Azure Portal

Перейдите на portal.azure.com → «Azure Active Directory» → «Регистрация приложений» → «Новая регистрация». Укажите имя приложения, выберите тип аккаунтов (личные, рабочие или оба), задайте Redirect URI (например, https://yoursite.com/auth/callback). После регистрации сохраните Application (client) ID и создайте Client Secret в разделе «Сертификаты и секреты».

## 2. Установка зависимостей через Composer

bash
composer require league/oauth2-client
composer require thenetworg/oauth2-azure

## 3. Настройка провайдера

php
require ‘vendor/autoload.php’;

$provider = new TheNetworgOAuth2ClientProviderAzure([
‘clientId’ => ‘YOUR_CLIENT_ID’,
‘clientSecret’ => ‘YOUR_CLIENT_SECRET’,
‘redirectUri’ => ‘https://yoursite.com/auth/callback’,
‘tenant’ => ‘common’, // или конкретный tenant ID
‘defaultEndPointVersion’ => ‘2.0’,
]);

## 4. Инициирование авторизации

php
session_start();
if (!isset($_GET[‘code’])) {
$authUrl = $provider->getAuthorizationUrl([
‘scope’ => [‘openid’, ‘profile’, ’email’, ‘offline_access’]
]);
$_SESSION[‘oauth2state’] = $provider->getState();
header(‘Location: ‘ . $authUrl);
exit;
}

## 5. Обработка callback и получение токена

php
if (empty($_GET[‘state’]) || $_GET[‘state’] !== $_SESSION[‘oauth2state’]) {
unset($_SESSION[‘oauth2state’]);
exit(‘Invalid state’);
}

$token = $provider->getAccessToken(‘authorization_code’, [
‘code’ => $_GET[‘code’]
]);

$user = $provider->getResourceOwner($token);
echo ‘Привет, ‘ . $user->claim(‘name’);
echo ‘Email: ‘ . $user->claim(’email’);

## 6. Проверка ID Token (OpenID Connect)

Microsoft возвращает id_token в составе ответа. Для его верификации используйте библиотеку firebase/php-jwt. Публичные ключи доступны по адресу: https://login.microsoftonline.com/common/discovery/v2.0/keys.

## 7. Хранение сессии

После успешной авторизации сохраните данные пользователя в сессии или базе данных. Используйте refresh_token для обновления access_token без повторного входа пользователя.

## Важные моменты

— Для корпоративных аккаунтов используйте конкретный tenant ID вместо ‘common’.
— Убедитесь, что Redirect URI точно совпадает с зарегистрированным в Azure.
— Scope ‘offline_access’ необходим для получения refresh_token.
— Включите HTTPS на продакшн-сервере — Microsoft не принимает HTTP для redirect URI.

Такой подход обеспечивает безопасную авторизацию с поддержкой как личных Microsoft Account, так и корпоративных Azure AD аккаунтов.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.