Інтеграція AD/LDAP для корпоративного мобільного застосунку

Ми — команда мобільних розробників з 10+ річним досвідом інтеграції корпоративних систем. Пряма [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol)-інтеграція в мобільному застосунку — майже завжди архітектурна помилка: порти 389/636 закриті файрволом, LDAP-bind credentials н

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція AD/LDAP для корпоративного мобільного застосунку
Складний
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    896
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Ми — команда мобільних розробників з 10+ річним досвідом інтеграції корпоративних систем. Пряма LDAP-інтеграція в мобільному застосунку — майже завжди архітектурна помилка: порти 389/636 закриті файрволом, LDAP-bind credentials не можна зберігати на пристрої, з'єднання через мобільний інтернет до on-premise AD нестабільне. Правильна схема — backend-проксі: мобільний → backend API → AD/LDAP. Це гарантує безпеку та масштабованість. Ми реалізуємо інтеграцію під ключ, використовуючи сучасні протоколи та шифрування. Наші сертифіковані інженери проведуть аудит вашої інфраструктури та запропонують оптимальне рішення. Замовте консультацію — оцінимо проект безкоштовно.

Чому не можна підключатися до LDAP напряму з мобільного?

Мобільні мережі непередбачувані, а корпоративні LDAP-сервери знаходяться за суворим файрволом. При спробі прямого з'єднання ви зіткнетеся з мережевими блокуваннями, вимогою відкривати порти (що порушує політики безпеки) і вразливістю зберігання облікових даних на пристрої. Навіть при використанні VPN додадуться затримки та складність керування. Backend-проксі вирішує ці проблеми: всі з'єднання ініціюються із захищеного сегмента мережі, а мобільний застосунок працює тільки через HTTPS з JWT.

Архітектура інтеграції: backend-проксі

Backend виступає LDAP-проксі: приймає запити від мобільного через HTTPS з JWT-авторизацією, звертається до AD/LDAP всередині корпоративної мережі, повертає дані в REST-форматі.

Мобільний ──HTTPS/JWT──► Backend API ──LDAP 636──► Active Directory └──LDAP 389──► OpenLDAP 

Для аутентифікації через AD на backend використовуємо LDAP-bind:

// Node.js, ldapjs const client = ldap.createClient({ url: "ldaps://dc01.company.local:636", tlsOptions: { rejectUnauthorized: true, ca: [fs.readFileSync("ca.crt")] }, }); async function authenticateUser(username, password) { const userDN = `cn=${username},ou=Users,dc=company,dc=local`; return new Promise((resolve, reject) => { client.bind(userDN, password, (err) => { if (err) { reject(new InvalidCredentialsError()); } else { resolve(true); client.unbind(); } }); }); } 

Після успішного bind backend генерує JWT і повертає на мобільний. Пароль користувача ніколи не покидає backend.

Параметр Прямий доступ Backend-проксі
Безпека Низька: пароль на пристрої Висока: пароль не зберігається
Масштабованість Обмежена: стабільність мережі Висока: кешування, балансування
Швидкість Залежить від мережі клієнта Оптимізована на backend
Складність впровадження Проста, але небезпечна Потребує розробки

Як захистити облікові дані користувачів?

Пароль користувача передається від мобільного на backend через HTTPS. Backend виконує LDAP-bind — єдине місце, де пароль використовується. Після підтвердження автентичності backend генерує JWT з обмеженим терміном дії (наприклад, 1 година). Мобільний пристрій зберігає тільки JWT, пароль ніде не кешується. При звільненні співробітника акаунт в AD деактивується, backend при наступному refresh_token виявляє невдалий LDAP lookup та інвалідує JWT — доступ негайно блокується.

Отримання атрибутів користувача

AD зберігає багатий набір атрибутів: displayName, mail, telephoneNumber, department, manager, memberOf (групи), thumbnailPhoto (аватар). Для корпоративного застосунку це цінне джерело даних — не потрібно дублювати профілі користувачів.

async function getUserAttributes(username) { const base = "ou=Users,dc=company,dc=local"; const opts = { filter: `(sAMAccountName=${username})`, scope: "sub", attributes: [ "displayName", "mail", "department", "manager", "memberOf", "thumbnailPhoto", ], }; return new Promise((resolve, reject) => { client.search(base, opts, (err, res) => { let entry = null; res.on("searchEntry", (e) => (entry = e.object)); res.on("end", () => resolve(entry)); res.on("error", reject); }); }); } 

thumbnailPhoto — це JPEG у base64 прямо в AD. Повертаємо його як base64-рядок або зберігаємо в object storage і повертаємо URL.

memberOf містить DN груп: CN=VPN-Users,OU=Groups,DC=company,DC=local. Групи визначають права користувача в застосунку — парсимо CN з DN і мапимо на application roles.

Як побудувати оргструктуру з AD?

AD містить ієрархію через атрибут manager (DN керівника) та directReports. Побудувати дерево оргструктури через рекурсивні LDAP-запити — можливо, але повільно при глибоких ієрархіях. Краще: кешувати структуру на backend з періодичним оновленням (раз на годину/добу), мобільний запитує готовий граф.

// Android — відображення оргструктури data class OrgNode( val employeeId: String, val name: String, val position: String, val department: String, val avatarUrl: String?, val directReports: List<OrgNode> ) @Composable fun OrgChart(rootNode: OrgNode) { LazyColumn { item { EmployeeCard(node = rootNode, level = 0) } items(rootNode.directReports) { report -> EmployeeCard(node = report, level = 1) // Рекурсивно для вкладених рівнів через expandable state } } } 

Пошук співробітників

Повнотекстовий пошук по AD через LDAP-фільтр:

const filter = `(&(objectClass=person)(|(displayName=*${query}*)(mail=*${query}*)(sAMAccountName=*${query}*)))`; 

Продуктивність: wildcard на початку фільтра (*${query}*) не використовує індекс AD, пошук повільний при великій базі. Для застосунків з тисячами співробітників — синхронізуємо AD в Elasticsearch або PostgreSQL full-text search, пошук робимо там.

Синхронізація та кеш

AD — джерело правди для даних про співробітників. Мобільний застосунок працює з кешем backend. Для актуальності: webhook-події через AD Event Log (якщо AD 2016+) або polling раз на 15-30 хвилин на зміни через атрибут uSNChanged.

При звільненні співробітника акаунт в AD деактивується. Backend при наступному refresh_token бачить failed LDAP lookup та інвалідує JWT. Мобільний перенаправляється на логін.

Особливості Azure AD (Entra ID)

Якщо компанія використовує Azure AD (Microsoft Entra ID) — прямого LDAP немає, тільки Microsoft Graph API або OIDC. Graph API значно зручніший: REST, JSON, багата документація. GET /users/{id}?$select=displayName,mail,department,manager,memberOf повертає все те ж, що й LDAP, але без ADO-бібліотек.

Для гібридного середовища (on-premise AD + Azure AD з Azure AD Connect) — дані синхронізуються, можна використовувати або Graph API, або on-premise LDAP залежно від вимог безпеки.

Що входить в роботу

  • Аудит поточної інфраструктури AD/LDAP та мобільного застосунку
  • Проєктування архітектури backend-проксі
  • Реалізація аутентифікації через LDAP-bind з JWT
  • Створення API для отримання атрибутів, оргструктури, пошуку
  • Налаштування кешування та синхронізації
  • Інтеграція з Azure Graph API (при необхідності)
  • Документація та навчання команди замовника
  • Технічна підтримка на етапі експлуатації

Орієнтовні терміни та вартість

Інтеграція AD/LDAP (backend-проксі + мобільний клієнт + оргструктура + пошук): 3–6 тижнів. Вартість визначається після аудиту. Для точної оцінки зв'яжіться з нами для аудиту.

Наша команда виконала понад 40 проєктів з інтеграції AD/LDAP для банків, рітейлу та промисловості. Гарантуємо сумісність з будь-якими LDAP-серверами (OpenLDAP, FreeIPA, Active Directory). Зв'яжіться з нами для аудиту та отримайте індивідуальну комерційну пропозицію.