Как на PHP реализовать авторизацию пользователей через LinkedIn OAuth 2.0 (получение токена и данных профиля)?
Авторизация через LinkedIn OAuth 2.0 на PHP состоит из нескольких этапов: регистрация приложения, перенаправление пользователя, получение кода авторизации, обмен кода на токен и запрос данных профиля.
**Шаг 1. Регистрация приложения в LinkedIn Developer Portal**
Перейдите на https://www.linkedin.com/developers/, создайте приложение и получите `Client ID` и `Client Secret`. В настройках укажите `Redirect URL` — адрес вашего callback-скрипта.
**Шаг 2. Перенаправление пользователя на страницу авторизации**
php
<?php
$clientId = 'ВАШ_CLIENT_ID';
$redirectUri = urlencode('https://ваш-сайт.ru/callback.php');
$state = bin2hex(random_bytes(16));
$_SESSION['oauth_state'] = $state;
$scope = urlencode('openid profile email');
$authUrl = "https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id={$clientId}&redirect_uri={$redirectUri}&state={$state}&scope={$scope}";
header('Location: ' . $authUrl);
exit;
**Шаг 3. Обработка callback и получение токена (callback.php)**
php
‘authorization_code’,
‘code’ => $code,
‘redirect_uri’ => $redirectUri,
‘client_id’ => $clientId,
‘client_secret’ => $clientSecret,
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$tokenData = json_decode($response, true);
$accessToken = $tokenData[‘access_token’];
**Шаг 4. Получение данных профиля пользователя**
С новым API LinkedIn (OpenID Connect) используйте endpoint `/v2/userinfo`:
php
$ch = curl_init(‘https://api.linkedin.com/v2/userinfo’);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
‘Authorization: Bearer ‘ . $accessToken,
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$profileResponse = curl_exec($ch);
curl_close($ch);
$profile = json_decode($profileResponse, true);
echo ‘Имя: ‘ . $profile[‘name’];
echo ‘Email: ‘ . $profile[’email’];
echo ‘Фото: ‘ . $profile[‘picture’];
**Важные рекомендации:**
— Всегда проверяйте параметр `state` для защиты от CSRF-атак.
— Храните `Client Secret` в переменных окружения, а не в коде.
— Токен доступа имеет ограниченный срок действия (обычно 60 дней), предусмотрите его обновление.
— Используйте HTTPS для всех redirect URI.
— Scope `openid profile email` требует подключения продукта `Sign In with LinkedIn using OpenID Connect` в Developer Portal.
Такая реализация позволяет полностью интегрировать LinkedIn OAuth 2.0 в PHP-приложение без сторонних библиотек, используя только встроенный cURL.
