Gerege SSO¶
Production · الطبقة 2 — المصادقة / SSO ·
المستودع: sso-gerege-mn · sso.gerege.mn
مزوّد OAuth2 / OpenID Connect لخط القطاع الخاص. وهنا تُدخِل تطبيقاتُ المنظومة والجهاتُ المعتمِدة (RP) الخارجية المواطنين.
الـ Gerege SSO القائم على Nexus شيء آخر
في آب/أغسطس 2026 تفرّع عن Gerege Nexus مستودع جديد اسمه
sso-gerege-nexus، ويُسمّى هو الآخر «Gerege SSO». والسلوك الموصوف في هذه
الصفحة يخصّ شيفرة sso-gerege-mn العاملة في الإنتاج. ولمّا يكن للفرع الجديد
نطاقٌ خاص به بعد، فإنّ عقد sso.gerege.mn لم يتغيّر — ولا حاجة لأن يعدّل
الأطراف المعتمِدة شيئًا.
ثلاثة أدوار¶
1. مزوّد هوية¶
يمكن للجهات المعتمِدة إتاحة Sign in with Gerege. وما هو مدعوم:
| الإمكانية | ملاحظة |
|---|---|
| Authorization code + PKCE (S256) | المسار الأساسي؛ آمن حتى مع العملاء العموميين |
| refresh token متجدّد | مع كشف إعادة الاستخدام — إعادة استعمال رمز قديم تُبطل السلسلة كلها |
client_credentials |
تكامل بين آلة وأخرى |
| Access token | غير شفّاف (opaque) — محتواه غير مرئي للجهة المعتمِدة |
id_token |
JWT موقَّع بـ RS256 |
| Discovery | /.well-known/openid-configuration |
| UserInfo | /userinfo |
2. وكيل eID¶
لا تصل التطبيقات إلى eID Mongolia مباشرةً إطلاقًا. فالدخول الموحّد يعمل وكيلًا لخدمات eID المصرّح بها، ولا يُمرّرها إلّا إلى التطبيقات المسجّلة.
والسبب: تبقى بيانات اعتماد eID عندئذٍ في موضع واحد فقط، ويسير أثر التدقيق في سلسلة واحدة. أمّا توزيع تلك البيانات على كل تطبيق فيجعل التدوير والإلغاء وتتبّع «من فعل ماذا» أمورًا مستحيلة.
3. الموضع الوحيد لتسجيل التطبيقات¶
يُنشأ عميل OAuth وسرّه هنا فقط، ولا يُخزَّن إلّا هنا. وحتى Developer Portal لا يُنشئ عملاء — بل يشرح ما ينبغي فعله ويضع رابطًا عميقًا إلى وحدة تحكّم SSO.
لماذا موضع واحد؟
إذا عاشت بيانات الاعتماد في نظامَين في آن واحد، فستتباعد حتمًا يومًا ما: عميل حُذف في جهة يظلّ يعمل في الأخرى، وتدوير السرّ لا يصل إلى الطرف الثاني، وهكذا. ولا بديل موثوقًا عن مصدرٍ واحد.
طرائق الدخول¶
| الطريقة | ملاحظة |
|---|---|
| eID | الطريقة الأساسية — رمز QR / رابط عميق على الهاتف / إشعار برقم السجل |
| ثانوية — يشترط الربط الأول تحقّقًا بـ eID لتقييده بشخص حقيقي |
لا توجد كلمات مرور، ولا دخول بالبريد أو برمز OTP. وهذا قرار مقصود: كلمة المرور التي لا وجود لها لا يمكن أن تتسرّب.
الخدمات المجاورة¶
البوابات ذات الصلة التي تعمل من المستودع نفسه:
-
dan.gerege.mn— بوابة التعرّف عبر DAN. -
gsign.gerege.mn— بوابة التوقيع. -
xyp.gerege.mn— استعلامات سجل الأشخاص الاعتبارية.
الجلسة وتسجيل الخروج¶
- الجلسة زوج من JWT access + refresh؛ ويتجدّد رمز التحديث دوريًا.
- تسجيل الخروج يُبطل رمز التحديث ورمز الوصول معًا (قائمة منع للوصول).
- بعد الخروج يعود المستخدم إلى النطاق الذي بدأ منه، ولا يُقذف إلى
/login. وهذه القاعدة تحفظ مسار المستخدم لدى الجهة المعتمِدة.
لمحة من تاريخ البنية — الاستغناء عن Hydra¶
كان الدخول الموحّد يستخدم Ory Hydra مزوّدًا لـ OIDC. وقد أُزيلت تلك التبعية
كليًّا، وأُعيدت كتابة الآليات اللازمة بـشيفرة Go خاصة (usecases/oidc).
ودُمجت قاعدة بيانات Hydra المنفصلة مع القاعدة الرئيسة.
والنتيجة:
- اعتمادية خارجية أقل بواحدة،
- قاعدتان وسلسلتا ترحيل صارتا واحدة،
- صار سلوك OIDC تحت سيطرتنا (وبخاصة إمكان ربطه ربطًا وثيقًا بمسار eID).
الشيفرة نفسها التي تعمل بها المنصّة¶
نظام الدخول الموحّد ليس نظامًا مكتوبًا على حدة — بل يعمل على قاعدة الشيفرة
نفسها التي يعمل بها قالب المنصّة. والفارق الوحيد إعداد واحد: مع
AUTH_MODE=provider تُعرض بطاقة الدخول هنا، ومع client يُحوَّل المستخدم إلى
نظام دخول موحّد أعلى. وتُقلَع صورة Docker ذاتها بأيّ من الدورين.
المزيد: الشيفرة المشتركة · المصادقة والصلاحيات.
التكامل (أن تصير جهة معتمِدة)¶
الخطوات العامة:
- سجّل التطبيق — أنشئ عميلًا في وحدة تحكّم SSO واحصل على
client_idوclient_secret. وسجّل عناوين redirect URI بدقّة تامّة. - اقرأ ملف discovery — خذ نقاط النهاية من
/.well-known/openid-configuration. - نفّذ مسار authorization code + PKCE.
- بادِل الرمز — code ← access + refresh +
id_token. - تحقّق من
id_token— توقيع RS256، وiss، وaud، وexp. - اجلب بيانات المستخدم — من
/userinfo.
للمسار التفصيلي وقائمة التحقّق راجع المصادقة والصلاحيات.
سجّل redirect URI بدقّة
هذا أشيع خطأ في OIDC. يجب أن يتطابق عنوان redirect URI حرفًا بحرف؛
فالشرطة المائلة الأخيرة /، والفرق بين http وhttps، والمنفذ — كلّها
مهمّة. وإن نسيت تحديث هذه القائمة عند تغيير النطاق فسيفشل الدخول بصمت.
الوثائق التفصيلية¶
توجد وثائق مستوى التنفيذ (مخطّطات نقاط النهاية، ونموذج قاعدة البيانات، ودليل
المشرف لتسجيل الجهات المعتمِدة) داخل مستودع sso-gerege-mn.