← All posts

مغادرة Auth0: ما الذي ينتقل فعلاً، والشيء الوحيد الذي لن يسلّموه لك

Authagonal·June 16, 2026
auth0oidcsamlidentitymigration

معظم الفرق لا تغادر Auth0 لأنها لا تحبه. إنها تغادر لأن الفاتورة قفزت، أو لأن SAML و SCIM تبيّن أنهما يقبعان خلف طبقة مؤسسية تُحتسب لكل اتصال، وكل رابط SSO لعميل جديد يضيف إلى العدّاد. ثم ينظرون إلى الترحيل الفعلي لمزوّد الهوية لديهم، فيقررون أنه يبدو مرعباً، ويبقون عاماً آخر.

الأمر أقل رعباً مما يبدو. إليك ما تتضمنه عملية ترحيل Auth0 حقيقية: الأجزاء المملة، والأجزاء الشائكة، والجزء الصعب الوحيد فعلاً، حتى تتمكن من الحكم بنفسك.

ما الموجود في مستأجر Auth0 لديك

ثمة حفنة من الأشياء يجب أن تستقر في مكان جديد:

  • التطبيقات ← عملاء OAuth/OIDC. عناوين رد النداء، وعناوين تسجيل الخروج، والأصول المسموح بها، وأنواع المنح، وسر العميل. عمل آلي بحت.
  • واجهات API (خوادم الموارد) + النطاقات ← الجماهير (audiences) والنطاقات، موصولة بالعملاء الذين يستخدمونها (يتتبّع Auth0 ذلك بوصفه "منح العملاء").
  • الأدوار وإسناداتها ← الأدوار + روابط الأدوار لكل مستخدم.
  • الاتصالات ← اتصالات مؤسسية (OIDC/SAML)، واجتماعية، وقاعدة بيانات. يُطابَق OIDC المؤسسي بنظافة مع مزوّد اتحادي؛ أما البقية فتعيد ضبطها.
  • المستخدمون ← الملفات الشخصية، وبيانات التعريف، والهويات الاجتماعية/المؤسسية المرتبطة.

لا شيء من ذلك صعب من حيث المبدأ. التوتر ينبع من ثلاثة أمور محددة.

الأمور الثلاثة التي تجعل الناس متوترين

1. الحفاظ على ثبات الهويات. يُشار إلى مستخدميك عبر sub الخاص بهم (وإلى تطبيقاتك عبر client_id) في كل مكان: رموز التحديث التي تحتفظ بها التطبيقات النهائية، وصفوف SCIM في مزوّدي هوية العملاء، ومعرّفات المستخدمين المخزّنة في قاعدة بياناتك أنت. إذا سكّت عملية ترحيل معرّفات جديدة، انهار كل ذلك بصمت. الحل بسيط في الوصف وأساسي في الإتقان: حافظ على user_id الخاص بـ Auth0 بوصفه sub، وأبقِ client_id حرفياً كما هو. عندها لا يلاحظ أي شيء في الأسفل وقوع التغيير.

2. كلمات المرور: المسألة الصعبة فعلاً. واجهة Management API في Auth0 لا تُرجع أبداً تجزئات (hashes) كلمات المرور. هذه سياسة متعمّدة من Auth0، وليست ثغرة في أدواتك. أمامك مساران صادقان:

  • اطلب التصدير المجمّع بمساعدة الدعم من Auth0، الذي يمنحك ملف NDJSON يحوي تجزئة bcrypt لكل مستخدم. وbcrypt قابل للنقل: أي شيء يتحقق من bcrypt يمكنه أخذ تلك التجزئات حرفياً، ولا يضطر مستخدموك إلى إعادة ضبط أي شيء.
  • أو تجاوز التجزئات تماماً، واجعل المستخدمين يضبطون كلمة مرور جديدة عند أول تسجيل دخول. لا شيء "يُفقَد"، إذ لم تكن هناك تجزئة لحملها، لكنها خطوة مرئية لمستخدميك.

لا توجد واجهة API ذاتية الخدمة للتجزئات. أي شخص يخبرك بأن تصدير Auth0 بنقرة واحدة يتضمن كلمات المرور دون ملف الدعم ذاك إنما يلوّح بالكلام دون أساس.

3. سقف الألف مستخدم. تُرجع واجهة سرد المستخدمين في Auth0 ألف مستخدم كحدّ أقصى. أما المستأجر الأكبر، فملف التصدير المجمّع (نفسه الذي يحمل التجزئات) هو المصدر الحقيقي والكامل للمستخدمين، لا الواجهة الحيّة.

جعلها بنقرة واحدة

هذا ما بنيناه داخل Authagonal. توجّه أداة الاستيراد إلى تطبيق Auth0 من نوع machine-to-machine (نطاقات قراءة فقط)، فتقوم بما يلي:

  • تشغّل معاينة للقراءة فقط أولاً: تحصي كل تطبيق وواجهة API ودور واتصال ومستخدم ستستوردها، وتُعلّم أي شيء يحتاج إلى انتباه. لا يُكتب شيء حتى تؤكّد العملية.
  • تنقل التطبيقات، ونطاقات/جماهير API، والأدوار + الإسنادات، والمستخدمين + بيانات التعريف، واتصالات OIDC المؤسسية، مع الحفاظ على sub و client_id كي تبقى الرموز والمراجع الحالية قابلة للحلّ.
  • تعيد تجزئة أسرار عملاء Auth0 (المتاحة بنصّها الصريح عند القراءة) كي تبقى تطبيقاتك تُصادق دون تدوير.
  • تستورد تجزئات كلمات مرور bcrypt حرفياً إذا قدّمت ملف التصدير، وذلك الملف يرفع أيضاً سقف الألف مستخدم. لا يوجد تصدير؟ يضبط المستخدمون كلمة مرور عند أول تسجيل دخول.

ولأن الميزات المؤسسية (SAML و SCIM و MFA وسجلات التدقيق والنطاقات المخصصة) مشمولة في كل خطة بدلاً من احتسابها لكل اتصال، فإن الشيء الذي دفعك نحو المخرج لا ينتظرك على الجانب الآخر.

ملاحظة جانبية حول اختبار عمليات الترحيل

نختبر أداة الاستيراد على قاعدة بيانات حقيقية ومُهيّأة ببيانات، لا على نماذج وهمية (mocks)، وقد أثبتت جدارتها. يخزّن ASP.NET Identity الحقل LockoutEnd بنوع datetimeoffset، وقراءته بـ GetDateTime() تطلق استثناءً على ذلك النوع. كان مستخدم واحد محظور من شأنه أن يُفشل عملية استيراد بأكملها. لا تكتشف ذلك إلا بتشغيل أداة الاستيراد الحقيقية على بيانات حقيقية. إن كنت تقيّم أي أداة ترحيل، فاسأل كيف تُختبَر: "نحن نحاكي واجهة API المصدر" ليس كقول "نشغّلها على مستأجر مليء بالبيانات".

إن كنت تتطلّع إلى المخرج

عملية الترحيل أكثر مللاً مما تخشى: عاينها، وحافظ على معرّفاتك، وقرّر مسار كلمات المرور لديك، والقيد الحقيقي الوحيد هو تصدير التجزئات من Auth0. وإن أردت أن ترى ما الذي سينتقل من مستأجرك، فالمعاينة للقراءة فقط وتُريك كل شيء قبل أن تؤكّد.

انتقل من Auth0