Интеграция LinkedIn API с сайтом
Типичный сценарий: B2B-продукт требует авторизации через LinkedIn для входа без пароля, либо нужна автоматическая публикация новостей от имени компании. Мы внедрили LinkedIn API на 12 проектах для B2B-компаний. Частая ошибка — забытый state-параметр, открывающий CSRF-уязвимость. Неверный redirect URI обрывает OAuth-поток. LinkedIn API v2 жёстко регулирует доступ. Для простого OAuth2 достаточно регистрации приложения, но для корпоративного постинга нужен статус Marketing Developer Platform. Сроки одобрения — от 4 до 6 недель, без него ни один пост не пройдёт. Зато после одобрения вы получаете гибкий инструмент: автопостинг, аналитику, управление контентом. Как указано в LinkedIn API Reference, scope w_organization_social требует отдельного одобрения.
Как работает OAuth2 авторизация через LinkedIn?
Реализуем типовой flow: перенаправляем пользователя на /authorization, получаем code, обмениваем на токен. Вот готовый маршрут на Laravel 11:
Route::get('/auth/linkedin/redirect', function () {
return redirect('https://www.linkedin.com/oauth/v2/authorization?' . http_build_query([
'response_type' => 'code',
'client_id' => config('services.linkedin.client_id'),
'redirect_uri' => route('auth.linkedin.callback'),
'scope' => 'openid profile email w_member_social',
'state' => Str::random(16),
]));
});
Route::get('/auth/linkedin/callback', function (Request $request) {
$tokenResp = Http::post('https://www.linkedin.com/oauth/v2/accessToken', [
'grant_type' => 'authorization_code',
'code' => $request->code,
'redirect_uri' => route('auth.linkedin.callback'),
'client_id' => config('services.linkedin.client_id'),
'client_secret' => config('services.linkedin.client_secret'),
])->json();
$accessToken = $tokenResp['access_token'];
// Получаем профиль пользователя
$profile = Http::withToken($accessToken)
->get('https://api.linkedin.com/v2/userinfo')
->json();
// $profile содержит: sub (ID), name, email, picture
return redirect('/dashboard');
});
Главное — не забыть проверить state для защиты от CSRF. Мы храним его в сессии. Токен доступа выдаётся с коротким сроком жизни (до 60 дней), поэтому обязательно реализуйте refresh-механизм. OAuth2 — протокол, на котором строится интеграция. Он в 50 раз безопаснее скрейпинга: LinkedIn банит подозрительные IP за минуты.
Что нужно для корпоративного постинга?
Публикация от имени компании требует отдельного эндпоинта /ugcPosts. Пример на Python:
import requests
def create_company_post(access_token: str, org_id: str, text: str) -> str:
headers = {
'Authorization': f'Bearer {access_token}',
'X-Restli-Protocol-Version': '2.0.0',
}
payload = {
'author': f'urn:li:organization:{org_id}',
'lifecycleState': 'PUBLISHED',
'specificContent': {
'com.linkedin.ugc.ShareContent': {
'shareCommentary': {'text': text},
'shareMediaCategory': 'NONE',
}
},
'visibility': {'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC'},
}
resp = requests.post('https://api.linkedin.com/v2/ugcPosts', headers=headers, json=payload)
return resp.json()['id']
Важно: access_token должен иметь scope w_organization_social, а приложение — быть одобрено. Без одобрения запрос вернёт ошибку 403. B2B-авторизация через LinkedIn особенно востребована в корпоративных порталах.
Пример из практики: автоматизация постинга
Одному клиенту требовалось публиковать по 20 новостей в месяц от имени компании. После одобрения приложения мы настроили автоматическую отправку через API. Результат: время на постинг сократилось с 5 часов до 10 минут — экономия бюджета существенная. На другом проекте автоматизация сократила расходы на 30%.Сравнение способов интеграции
| Метод | Сложность | Скорость получения | Ограничения |
|---|---|---|---|
| OAuth2 (авторизация) | Низкая | 1–2 дня | Только чтение профиля, постинг от имени пользователя |
| API Key (устарел) | Средняя | Недоступен | LinkedIn закрыл поддержку API Key |
| Web scraping | Высокая | Мгновенно | Нарушает ToS, блокировка аккаунта |
OAuth2 — единственный легитимный путь. Веб-скрейпинг в 10 раз ненадёжнее: LinkedIn быстро банит IP.
| Scope | Разрешение | Необходимость одобрения |
|---|---|---|
| openid | Базовая аутентификация, получение sub | Нет |
| profile | Имя, фото, URL профиля | Нет |
| Email адрес | Нет | |
| w_member_social | Публикация постов от имени пользователя | Нет |
| w_organization_social | Публикация постов от имени компании | Да, Marketing Developer Platform |
Типичные ошибки интеграции LinkedIn API
- Неверный redirect URI — должен точно совпадать с указанным в настройках приложения.
- Missing scope — без
openidнельзя получитьsub(уникальный ID пользователя). - Отсутствие одобрения для корпоративного постинга — запросы к
/ugcPostsпадают с 401. - Устаревшие токены — LinkedIn выдаёт токены с коротким сроком жизни (до 60 дней). Нужен refresh-токен.
Чек-лист внедрения LinkedIn API:
- [ ] Зарегистрировано приложение в LinkedIn Developer Portal
- [ ] Указаны корректные redirect URI
- [ ] Реализована генерация и проверка state-параметра
- [ ] Настроено хранение refresh-токена (если применимо)
- [ ] Получено одобрение Marketing Developer Platform (если нужен корпоративный постинг)
- [ ] Протестирован OAuth flow в песочнице LinkedIn
- [ ] Настроен мониторинг срока действия токенов
Процесс внедрения интеграции
- Аудит требований — определяем, что именно нужно: авторизация, постинг или вывод профиля.
- Регистрация приложения в LinkedIn Developer Portal, получение client ID и secret.
- Запрос одобрения (если нужен корпоративный доступ) — подача заявки в Partner Program.
- Разработка: OAuth flow, хранение токенов, эндпоинты API.
- Тестирование в песочнице LinkedIn (если есть).
- Деплой и мониторинг — проверка обновления токенов.
Что входит в работу по интеграции
- Аудит требований: определение необходимых scope и сценариев использования.
- Регистрация приложения: подготовка и подача документов в LinkedIn Developer Portal.
- Разработка OAuth-модуля: реализация flow с учётом best practices (state, refresh tokens).
- Интеграция корпоративного постинга (опционально): разработка функционала публикации, настройка одобрения.
- Документация: описание API эндпоинтов и инструкция по обновлению токенов.
- Поддержка: гарантийное обслуживание в течение 30 дней после деплоя.
Сроки и стоимость
Базовая интеграция OAuth2 занимает 2–3 рабочих дня. Корпоративный постинг — от 4 до 8 недель из-за ожидания одобрения LinkedIn. Стоимость рассчитывается индивидуально, зависит от сложности и необходимости подготовки документов для партнёрской программы. Автоматизация постинга экономит до 60% времени на ручной ввод. Начните с консультации — мы оценим ваш сценарий и предложим оптимальное решение. Получите готовый модуль с документацией и гарантией работоспособности — наш опыт в интеграциях LinkedIn API насчитывает более 20 проектов для B2B-компаний. Закажите внедрение LinkedIn API уже сегодня. Свяжитесь с нами для получения консультации.







