Інтеграція 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 за хвилини.
Що потрібно для корпоративного постингу?
Публікація від імені компанії вимагає окремого endpoint /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, зберігання токенів, endpoint-и API.
- Тестування в пісочниці LinkedIn (якщо є).
- Деплой і моніторинг — перевірка оновлення токенів.
Що входить у роботу з інтеграції
- Аудит вимог: визначення необхідних scope і сценаріїв використання.
- Реєстрація застосунку: підготовка та подання документів у LinkedIn Developer Portal.
- Розробка OAuth-модуля: реалізація flow з урахуванням best practices (state, refresh tokens).
- Інтеграція корпоративного постингу (опціонально): розробка функціоналу публікації, налаштування схвалення.
- Документація: опис API endpoint-ів та інструкція з оновлення токенів.
- Підтримка: гарантійне обслуговування протягом 30 днів після деплою.
Терміни та вартість
Базова інтеграція OAuth2 займає 2–3 робочих дні. Корпоративний постинг — від 4 до 8 тижнів через очікування схвалення LinkedIn. Вартість розраховується індивідуально, залежить від складності та необхідності підготовки документів для партнерської програми. Автоматизація постингу економить до 60% часу на ручне введення. Почніть з консультації — ми оцінимо ваш сценарій і запропонуємо оптимальне рішення. Отримайте готовий модуль з документацією та гарантією працездатності — наш досвід в інтеграціях LinkedIn API налічує понад 20 проєктів для B2B-компаній. Замовте впровадження LinkedIn API вже сьогодні. Зв'яжіться з нами для отримання консультації.







