Как на 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 аккаунтов.
