Интеграция 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 уже сегодня. Свяжитесь с нами для получения консультации.







