انتقل إلى المحتوى الرئيسي

مزامنة الدليل

مزامنة الدليل تربط Ithbat بمصدر الهوية في مؤسستك -- سواء Active Directory أو LDAP أو Cloud IdP. أي تغيير في الدليل (تعيين جديد، مغادرة، نقل قسم، تعديل عضوية مجموعة) ينعكس تلقائيًا في Ithbat.


مصادر الدليل المدعومة

المصدرالبروتوكولملاحظات
Microsoft Active DirectoryLDAP/LDAPSAD محلي عبر LDAP آمن
Azure AD / Entra IDSCIMعبر SCIM Provisioning المدمج في Azure
Google WorkspaceSCIMعبر Google SCIM connector
OktaSCIMعبر Okta SCIM provisioning
JumpCloudSCIMعبر JumpCloud SCIM connector
LDAP عامLDAP/LDAPSأي دليل متوافق مع LDAP v3

للـ Cloud IdPs (مثل Azure AD و Okta و Google و JumpCloud)، أعدّ SCIM Provisioning من جانب الـ IdP ووجّهه لـ SCIM Endpoint في Ithbat. راجع SCIM 2.0.

هذه الصفحة تغطي مزامنة الدليل لمصادر LDAP/AD المحلية -- المُدارة من لوحة تحكم Ithbat بشكل مستقل عن SCIM.


آلية العمل

sequenceDiagram
participant AD as Active Directory / LDAP
participant Ithbat as Ithbat IAM
participant Admin as Admin Console

Admin->>Ithbat: Create directory connection
Ithbat->>AD: Test LDAP bind
AD-->>Ithbat: Bind successful
loop Sync job (scheduled or manual)
Ithbat->>AD: LDAP query users + groups
AD-->>Ithbat: User and group records
Ithbat->>Ithbat: Diff against current state
Ithbat->>Ithbat: Create / update / deactivate users
Ithbat->>Ithbat: Update group memberships
end
Admin->>Ithbat: View sync job results

المزامنة تعمل وفق جدول تحدده أنت. يمكنك أيضًا تشغيل Sync يدوي في أي وقت من لوحة المسؤول أو عبر الـ API.


إنشاء Directory Connection

عبر لوحة تحكم المسؤول

  1. انتقل إلى الإعدادات ← مزامنة الدليل ← إضافة اتصال.
  2. اختر نوع الدليل (Active Directory أو LDAP عام).
  3. أدخل بيانات الاتصال (الحقول مشروحة أدناه).
  4. انقر اختبار الاتصال للتأكد من صحة بيانات الاعتماد.
  5. انقر حفظ.

عبر الـ API

POST /api/v1/directories
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}
Content-Type: application/json

{
"name": "Corporate AD",
"type": "active_directory",
"host": "ldap.acme.com",
"port": 636,
"useTLS": true,
"bindDN": "CN=ithbat-sync,OU=ServiceAccounts,DC=acme,DC=com",
"bindPassword": "s3cr3t!",
"baseDN": "DC=acme,DC=com",
"userSearchFilter": "(objectClass=person)",
"groupSearchFilter": "(objectClass=group)",
"syncSchedule": "0 */4 * * *"
}

حقول الاتصال

الحقلالوصف
nameاسم تعريفي للاتصال
typeactive_directory أو ldap
hosthostname أو IP للـ LDAP Server
port389 لـ LDAP، 636 لـ LDAPS
useTLSتفعيل LDAPS (TLS). يُنصح به في Production
bindDNالـ DN لحساب الخدمة الذي يستعلم من الدليل
bindPasswordكلمة مرور الـ Bind Account
baseDNالـ DN لنقطة بداية البحث عن المستخدمين والمجموعات
userSearchFilterLDAP Filter لكائنات المستخدمين. الافتراضي: (objectClass=person)
groupSearchFilterLDAP Filter لكائنات المجموعات. الافتراضي: (objectClass=group)
syncScheduleCron Expression للمزامنة التلقائية. اتركه فارغ لتعطيل الجدولة

Sync Schedule

حقل syncSchedule يقبل Standard Cron Expression (5 حقول، UTC):

التعبيرمتى يعمل
0 */4 * * *كل 4 ساعات
0 2 * * *يوميًا الساعة 02:00 UTC
0 0 * * 1أسبوعيًا يوم الاثنين عند منتصف الليل

لتعطيل الجدولة والتشغيل اليدوي فقط، احذف syncSchedule أو عيّنه كسلسلة نصية فارغة.


تشغيل Manual Sync

عبر لوحة تحكم المسؤول

  1. انتقل إلى الإعدادات ← مزامنة الدليل ← {اسم الاتصال}.
  2. انقر مزامنة الآن.

عبر الـ API

POST /api/v1/directories/{id}/sync
Authorization: Bearer {token}

الـ Response:

{
"jobId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"status": "running",
"startedAt": "2026-02-24T10:00:00Z"
}

متابعة حالة المزامنة

جلب كل الاتصالات

GET /api/v1/directories
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}

جلب اتصال واحد

GET /api/v1/directories/{id}
Authorization: Bearer {token}

جلب Sync Jobs لاتصال

GET /api/v1/directories/{id}/jobs
Authorization: Bearer {token}

الـ Response يرجع قائمة Sync Jobs:

{
"id": "9b1deb4d-...",
"directoryId": "3fa85f64-...",
"status": "completed",
"usersCreated": 5,
"usersUpdated": 12,
"usersDeactivated": 1,
"groupsCreated": 2,
"groupsUpdated": 3,
"errors": [],
"startedAt": "2026-02-24T10:00:00Z",
"completedAt": "2026-02-24T10:00:45Z"
}

جلب Sync Job محدد

GET /api/v1/directories/{id}/jobs/{jobId}
Authorization: Bearer {token}

سلوك المزامنة

عندما يعمل Sync Job، Ithbat يقارن نتائج الـ LDAP Query بالحالة الحالية في المستفيد:

التغيير في الدليلالذي يحدث في Ithbat
مستخدم جديد في LDAPينشئ حساب بحالة emailVerified: true
تغيّرت Attribute لمستخدميحدّث الملف الشخصي (firstName، lastName، email، phone)
تعطّل مستخدم في ADيوقف الحساب في Ithbat ويبطل الـ Sessions
انحذف مستخدم من ADيوقف الحساب (لا يحذفه -- لكي سجل التدقيق يبقى محفوظ)
إنشاء مجموعةينشئ مجموعة مقابلة في Ithbat
إضافة عضو لمجموعةيضيف المستخدم للمجموعة المقابلة
إزالة عضو من مجموعةيزيل المستخدم من المجموعة المقابلة
ملاحظة

Ithbat يوقف المستخدمين المحذوفين من الدليل بدلاً من أن يحذفهم. هذا يحفظ سجل التدقيق ويتيح إعادة التفعيل لاحقًا. إذا أردت حذف مستخدم نهائيًا، نفّذ ذلك يدويًا من لوحة المسؤول بعد التنسيق مع فريق الأمان.


Attribute Mapping

Ithbat يربط LDAP Attributes بحقول الملف الشخصي. الـ Mapping الافتراضي لـ Active Directory:

حقل IthbatAD Attribute
emailmail
firstNamegivenName
lastNamesn
phonetelephoneNumber
displayNamedisplayName
externalIdobjectGUID

إذا كنت تستخدم LDAP عام أو كان الـ AD Schema لديك يتضمن أسماء مختلفة، حدّد Custom Mapping:

PUT /api/v1/directories/{id}
Authorization: Bearer {token}
Content-Type: application/json

{
"attributeMapping": {
"email": "mail",
"firstName": "givenName",
"lastName": "sn",
"phone": "mobile",
"externalId": "entryUUID"
}
}

Conflict Resolution

عندما يحدث تعارض بين قيمة من الدليل وقيمة عُدّلت يدويًا في Ithbat:

  • الدليل يتقدم -- للـ Attributes المشمولة في الـ Mapping (مثل email و firstName و lastName و phone). الـ Sync القادم يستبدل التعديلات المحلية.
  • Ithbat يتقدم -- للـ Attributes غير المشمولة (مثل metadata والحقول المخصصة وتعيينات الأدوار). مزامنة الدليل لا تمس هذه الحقول.

إذا أردت تبقي ملف مستخدم خارج المزامنة (مثلًا تغيير اسم قانوني)، أزل المستخدم من نطاق الدليل أو أعدّ Exclusion Filter.


اختبار الاتصال

قبل تشغيل Sync Job، تأكد أن Ithbat يصل للـ LDAP Server:

POST /api/v1/directories/{id}/test
Authorization: Bearer {token}

الـ Response:

{
"success": true,
"usersFound": 247,
"groupsFound": 18
}

إذا فشل الاختبار، الـ Response يوضح السبب -- مشكلة شبكة، أو فشل مصادقة، أو baseDN غير صالح.


تحديث وحذف الاتصالات

تحديث اتصال

PUT /api/v1/directories/{id}
Authorization: Bearer {token}
Content-Type: application/json

{
"syncSchedule": "0 1 * * *",
"bindPassword": "new-password"
}

حذف اتصال

حذف الاتصال لا يحذف المستخدمين أو المجموعات التي تمت مزامنتها. فقط المزامنات القادمة من هذا المصدر لن تعمل.

DELETE /api/v1/directories/{id}
Authorization: Bearer {token}

Directory Sync API Reference

MethodEndpointالصلاحية
GET/api/v1/directoriesdirectory:read
GET/api/v1/directories/{id}directory:read
GET/api/v1/directories/{id}/jobsdirectory:read
GET/api/v1/directories/{id}/jobs/{jobId}directory:read
POST/api/v1/directoriesdirectory:write
PUT/api/v1/directories/{id}directory:write
DELETE/api/v1/directories/{id}directory:write
POST/api/v1/directories/{id}/testdirectory:write
POST/api/v1/directories/{id}/syncdirectory:write

الخطوات التالية