تسجيل الدخول الموحد لتثبيت محلي (On-Premise)
هذه الصفحة موجّهة لمشغّلي تثبيت MonoChat المحلي (On-Premise). وهي تشرح كيف تتيح لموظفيك تسجيل الدخول عبر موفّر الهوية (IdP) في شركتك باستخدام OpenID Connect (OIDC)، مثل Microsoft Entra ID أو Okta أو Keycloak أو AD FS أو Google Workspace.
يُضبط تسجيل الدخول الموحد للتثبيت كله في إعدادات الخادم، لا لكل مؤسسة على حدة. يمكن أن ينتمي حساب MonoChat إلى عدة مؤسسات، ويسجّل الأشخاص الدخول قبل اختيار إحداها. تسجيل الدخول يمنح حسابًا لا صلاحية وصول: لا يرى الشخص مؤسسةً إلا بعد أن تدعوه وتمنحه دورًا.
كيف يعمل تسجيل الدخول
عندما ينقر شخص على زر SSO في صفحة تسجيل الدخول، يفتح MonoChat صفحة تسجيل الدخول لدى موفّر الهوية في نافذة منبثقة. بعد أن يسجّل الشخص دخوله هناك، يعيد موفّر الهوية المتصفح إلى MonoChat مع رمز يُستخدم مرة واحدة. يستبدل خادم MonoChat الرمز برمز هوية (ID token) ويتحقق منه قبل تسجيل دخول الشخص:
- تُقرأ نقاط النهاية ومفاتيح التوقيع الخاصة بموفّر الهوية من مستند الاكتشاف
<issuer>/.well-known/openid-configurationعند كل تسجيل دخول. - يستخدم تسجيل الدخول تدفق رمز التفويض مع PKCE (S256) و
stateوnonce. يبقى طلب تسجيل الدخول صالحًا 10 دقائق ويمكن استخدامه مرة واحدة. - يجب أن يكون رمز الهوية موقّعًا بأحد مفاتيح موفّر الهوية وأن يحمل المُصدِر الخاص بك (
iss) ومعرّف العميل (aud) وقيمةnonceالخاصة بالطلب ووقت انتهاء (exp) لم يمضِ بعد. - يجب أن يحتوي رمز الهوية على عنوان البريد الإلكتروني للشخص (
email). يُرفض تسجيل الدخول عندما يفيد موفّر الهوية بأن العنوان غير متحقَّق منه (email_verified: false).
1. سجّل MonoChat لدى موفّر الهوية
أنشئ تطبيقًا (عميلًا) لـ MonoChat لدى موفّر الهوية بهذه القيم:
| الإعداد لدى موفّر الهوية | القيمة |
|---|---|
| نوع التطبيق | تطبيق ويب بسرّ عميل (عميل سرّي) |
| عنوان URI لإعادة التوجيه بعد تسجيل الدخول | https://<your MonoChat domain>/api/oauth/oidc/redirect |
| نوع المنح | رمز التفويض (Authorization code) |
| النطاقات (Scopes) | openid email profile |
| مصادقة العميل عند نقطة نهاية الرمز | سرّ العميل مُرسَل بمصادقة HTTP Basic (client_secret_basic) |
تأكد من أن رمز الهوية يحتوي على المطالبة email. دوّن معرّف العميل وسرّ العميل والمُصدِر. المُصدِر هو قيمة issuer في مستند الاكتشاف لدى موفّر الهوية. صيغ شائعة:
| موفّر الهوية | المُصدِر (Issuer) |
|---|---|
| Microsoft Entra ID | https://login.microsoftonline.com/<tenant id>/v2.0 |
| Okta | https://<your Okta domain>/oauth2/default أو https://<your Okta domain> |
| Keycloak | https://<your Keycloak host>/realms/<realm> |
| AD FS (2016 أو أحدث) | https://<your AD FS host>/adfs |
| Google Workspace | https://accounts.google.com |
افتح <issuer>/.well-known/openid-configuration في المتصفح وانسخ قيمة issuer كما هي تمامًا، بما في ذلك / الختامية إن وُجدت. يرفض MonoChat تسجيل دخول أي شخص عندما تختلف القيمتان.
2. أضف الإعدادات
أضف كتلتي oidc إلى إعدادات الخادم وأعد تشغيل MonoChat. توضع الكتلة العامة تحت public.oauth والكتلة السرية تحت oauth:
{
"oauth": {
"oidc": {
"clientSecret": "<client secret>",
"autoCreateAccounts": true,
"allowedEmailDomains": ["company.com"]
}
},
"public": {
"oauth": {
"oidc": {
"issuer": "https://login.microsoftonline.com/<tenant id>/v2.0",
"clientId": "<client id>",
"redirectPath": "/api/oauth/oidc/redirect",
"scope": "openid email profile",
"buttonLabel": "Sign in with Company SSO"
}
}
}
}
| الإعداد | ما الذي يفعله |
|---|---|
public.oauth.oidc.issuer | المُصدِر من الخطوة 1 |
public.oauth.oidc.clientId | معرّف العميل من الخطوة 1 |
public.oauth.oidc.redirectPath | مسار عنوان URI لإعادة التوجيه من الخطوة 1 |
public.oauth.oidc.scope | النطاقات التي يطلبها MonoChat |
public.oauth.oidc.buttonLabel | نص زر تسجيل الدخول. إذا تُرك فارغًا يظهر "تسجيل الدخول عبر SSO" بلغة الشخص |
oauth.oidc.clientSecret | سرّ العميل. يبقى على الخادم |
oauth.oidc.autoCreateAccounts | true ينشئ حساب MonoChat عند أول تسجيل دخول للشخص عبر SSO، حتى عندما يكون التسجيل بالدعوة فقط (public.disableSignup) |
oauth.oidc.allowedEmailDomains | لا يمكن تسجيل الدخول عبر SSO إلا للأشخاص الذين يقع بريدهم الإلكتروني في أحد هذه النطاقات. احذفه للسماح بكل النطاقات |
بعد ذلك يظهر زر SSO في صفحة تسجيل الدخول.
من يمكنه تسجيل الدخول
- الأشخاص الجدد. مع
autoCreateAccounts: trueينشئ أول تسجيل دخول للشخص عبر SSO حسابه. ومن دونه لا يُنشأ الحساب إلا إذا كانpublic.disableSignupمتوقفًا أو سجّل الشخص الدخول من دعوة. - الأشخاص الذين لديهم حساب بالبريد الإلكتروني نفسه. مع
oauth.autoMerge: trueيربط أول تسجيل دخول عبر SSO الـ SSO بالحساب الموجود، لكن فقط عندما يفيد رمز الهوية بأن العنوان متحقَّق منه (email_verified: true). وفي غير ذلك، ودائمًا من دونautoMerge، يطلب MonoChat من الشخص تسجيل الدخول بكلمة المرور مرة واحدة ثم يربط SSO بالحساب؛ وقبول دعوة إلى مؤسسة يربطه أيضًا. لا يرسل Microsoft Entra ID ولا AD FS قيمةemail_verified، لذا أبقِ تسجيل الدخول بكلمة المرور مسموحًا معهما إلى أن يربط الجميع SSO، أو ادعُ الأشخاص مجددًا. - النطاقات المسموح بها. مع
allowedEmailDomainsيُرفض أي عنوان من نطاق آخر. في Google Workspace (المُصدِرhttps://accounts.google.com) يتحقق MonoChat من المطالبةhd، أي نطاق Workspace للحساب، بدلًا من عنوان البريد الإلكتروني، لأن حساب Google الشخصي يمكنه استخدام عنوان من أي نطاق.
اجعل SSO طريقة الدخول الوحيدة
- اضبط
public.auth.methodsعلى["oidc"]. عندها تعرض صفحة تسجيل الدخول زر SSO فقط، ويرفض الخادم تسجيل الدخول بكلمة المرور وبالحسابات الاجتماعية. - يظل بإمكان مستخدمي root super (من لديهم دور root super في المؤسسة الجذرية) تسجيل الدخول بكلمة المرور على
/auth/signin?fallback=1، فلا يُغلق التثبيت أبدًا إذا تعطّل موفّر الهوية. - لمنع حسابات SSO الجديدة من فتح مؤسسات خاصة بها، اضبط
public.disableTenantCreationعلىtrue. عندها لا يستطيع إنشاء مؤسسات تحت مؤسسة ما إلا من لديهم الدور المناسب فيها.
الشبكة
- أبقِ
/api/oauth/oidc/authorizeوredirectPathالخاص بك متاحين للأشخاص الذين يسجّلون الدخول. يُفتح كلاهما في متصفحهم. - يجب أن يصل خادم MonoChat عبر HTTPS إلى مستند الاكتشاف ونقطة نهاية الرمز ومجموعة المفاتيح (
jwks_uri) لدى موفّر الهوية.
القيود
- لا يوفّر تطبيق MonoChat للجوال SSO بعد. إذا جعلت SSO طريقة الدخول الوحيدة، فلن يتمكن الوكلاء من تسجيل الدخول إلى تطبيق الجوال.
- تسجيل الخروج من MonoChat لا يُخرج الشخص من موفّر الهوية، وتسجيل الخروج من موفّر الهوية لا يُخرجه من MonoChat بعد.
تحقّق من الإعداد
- افتح صفحة تسجيل الدخول وانقر زر SSO. سجّل الدخول لدى موفّر الهوية؛ تُغلق النافذة المنبثقة وتكون قد سجّلت الدخول إلى MonoChat.
- سجّل الدخول بشخص ليس لديه حساب MonoChat بعد، وتأكد من إنشاء الحساب (أو رفضه إن لم تفعّل
autoCreateAccounts). - إذا ضبطت
allowedEmailDomains، فجرّب شخصًا من نطاق آخر وتأكد من رفض تسجيل الدخول. - إذا ضبطت
public.auth.methods، فتأكد من رفض تسجيل الدخول بكلمة المرور، ومن أن مستخدم root super ما زال يستطيع تسجيل الدخول على/auth/signin?fallback=1.