مزامنة الدليل
مزامنة الدليل تربط Ithbat بمصدر الهوية في مؤسستك -- سواء Active Directory أو LDAP أو Cloud IdP. أي تغيير في الدليل (تعيين جديد، مغادرة، نقل قسم، تعديل عضوية مجموعة) ينعكس تلقائيًا في Ithbat.
مصادر الدليل المدعومة
| المصدر | البروتوكول | ملاحظات |
|---|---|---|
| Microsoft Active Directory | LDAP/LDAPS | AD محلي عبر LDAP آمن |
| Azure AD / Entra ID | SCIM | عبر SCIM Provisioning المدمج في Azure |
| Google Workspace | SCIM | عبر Google SCIM connector |
| Okta | SCIM | عبر Okta SCIM provisioning |
| JumpCloud | SCIM | عبر 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
عبر لوحة تحكم المسؤول
- انتقل إلى الإعدادات ← مزامنة الدليل ← إضافة اتصال.
- اختر نوع الدليل (Active Directory أو LDAP عام).
- أدخل بيانات الاتصال (الحقول مشروحة أدناه).
- انقر اختبار الاتصال للتأكد من صحة بيانات الاعتماد.
- انقر حفظ.
عبر الـ 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 | اسم تعريفي للاتصال |
type | active_directory أو ldap |
host | hostname أو IP للـ LDAP Server |
port | 389 لـ LDAP، 636 لـ LDAPS |
useTLS | تفعيل LDAPS (TLS). يُنصح به في Production |
bindDN | الـ DN لحساب الخدمة الذي يستعلم من الدليل |
bindPassword | كلمة مرور الـ Bind Account |
baseDN | الـ DN لنقطة بداية البحث عن المستخدمين والمجموعات |
userSearchFilter | LDAP Filter لكائنات المستخدمين. الافتراضي: (objectClass=person) |
groupSearchFilter | LDAP Filter لكائنات المجموعات. الافتراضي: (objectClass=group) |
syncSchedule | Cron Expression للمزامنة التلقائية. اتركه فارغ لتعطيل الجدولة |
Sync Schedule
حقل syncSchedule يقبل Standard Cron Expression (5 حقول، UTC):
| التعبير | متى يعمل |
|---|---|
0 */4 * * * | كل 4 ساعات |
0 2 * * * | يوميًا الساعة 02:00 UTC |
0 0 * * 1 | أسبوعيًا يوم الاثنين عند منتصف الليل |
لتعطيل الجدولة والتشغيل اليدوي فقط، احذف syncSchedule أو عيّنه كسلسلة نصية فارغة.
تشغيل Manual Sync
عبر لوحة تحكم المسؤول
- انتقل إلى الإعدادات ← مزامنة الدليل ← {اسم الاتصال}.
- انقر مزامنة الآن.
عبر الـ 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:
| حقل Ithbat | AD Attribute |
|---|---|
email | mail |
firstName | givenName |
lastName | sn |
phone | telephoneNumber |
displayName | displayName |
externalId | objectGUID |
إذا كنت تستخدم 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
| Method | Endpoint | الصلاحية |
|---|---|---|
GET | /api/v1/directories | directory:read |
GET | /api/v1/directories/{id} | directory:read |
GET | /api/v1/directories/{id}/jobs | directory:read |
GET | /api/v1/directories/{id}/jobs/{jobId} | directory:read |
POST | /api/v1/directories | directory:write |
PUT | /api/v1/directories/{id} | directory:write |
DELETE | /api/v1/directories/{id} | directory:write |
POST | /api/v1/directories/{id}/test | directory:write |
POST | /api/v1/directories/{id}/sync | directory:write |
الخطوات التالية
- SCIM 2.0 ← استخدم SCIM للـ Cloud IdPs بدل LDAP
- إدارة المستخدمين ← إدارة المستخدمين الذين أنشأتهم مزامنة الدليل
- سجل التدقيق ← تتبع أحداث المزامنة والتغييرات على الحسابات