مشكلة تسجيل الدخول والخروج الموحد لـ Keycloak

مرحباً!
@David ساعدني من فضلك، أيها العظيم! ))))

لقد قمت بضبط حزمة إضافات Discourse + Keycloak SSO + SAML + OpenID Connect بنجاح. هناك شيء واحد فقط يخلّ بجمال هذا الإعداد وهو تسجيل الخروج.

عند تسجيل الخروج من المنتدى، يتم إلغاء تفويض المستخدم، وهذه الخطوة تعمل بشكل جيد.
لكن عند مراجعة الجلسات المفتوحة في Keycloak، لا يتم حذف جلسة المستخدم الذي غادر المنتدى.
أظن أن السبب يعود إلى إعدادات رابط تسجيل الخروج. لكنني لا أعرف أين يتم ضبطها - هل في Discourse أم في Keycloak؟

إليك إعدادات SAML الخاصة بي في Keycloak:

وإليك إعدادات OpenID Connect الخاصة بي في Keycloak:

يدعم مكون OpenID Connect الإضافي تسجيل الخروج الذي يبدأه مزود الهوية (RP). هل يدعم Keybase هذه الميزة؟

الآن يتبقى فهم ما هو هذا الأمر وما إذا كان موجودًا في Keycloak ))))
أين يتم تكوين هذا الخيار في إضافة openid-connect؟

يتم تكوينه في إعدادات الموقع:

شكرًا! سأحاول البحث في جوجل عما يقدمه Keycloak بخصوص هذا السؤال.

نعم! إنها تعمل بشكل ممتاز! أود التوضيح أنه من الضروري تعيين متغير openid_connect_rp_initiated_logout_redirect.

@david لدي سؤال آخر. سؤال مهم.
أنا الآن في المراحل النهائية من اختبار Keycloak SSO، ويحتاج الأمر إلى اختيار بروتوكول - SAML أو OpenID Connect.
لقد فضلت OpenID Connect، لكنني واجهت الآن مشكلة مزعجة تتعلق بإنشاء مستخدمين جدد عند استخدام OpenID Connect.

لفهم المشكلة، سأبدأ من الجانب الآخر. عند إنشاء مستخدم جديد في المنتدى باستخدام SAML، يتم إنشاء المستخدم في نظام SSO ثم يتم إرساله بشكل شفاف لإنشائه في Discourse. ويتم تفعيله فورًا - وهذا مهم!
أي أنه عندما أضغط على “تسجيل حساب” في منتدى Discourse، أنتقل إلى Keycloak حيث أنشئ مستخدمًا، وأؤكد بريده الإلكتروني، وما إلى ذلك. بعد ذلك، يتم نقلي إلى منتدى Discourse، حيث يكون المستخدم قد تم إنشاؤه بالفعل وتفعيله تلقائيًا:

لكن إذا استخدمت مكون OpenID Connect، فإن النافذة التالية تظهر عند إنشاء مستخدم جديد:

هذا غير مريح للغاية! ما الغرض من ذلك؟ فبريد المستخدم الإلكتروني قد تم تأكيده بالفعل عند إنشاء الحساب في SSO. هل هناك طريقة للتخلص من هذه النافذة؟

شكرًا جزيلاً مقدّمًا!

إذا ظهرت هذه الرسالة لـ OpenID Connect، فهذا يعني أن مزوّد الهوية أرسل رسالة email_verified: false إلى Discourse. إذا قمت بتفعيل إعداد التصحيح التفصيلي، فسيتم طباعة جميع بيانات المصادقة إلى /logs لتفحصها. نأمل أن تكون هناك طريقة ما لإخبار Keycloak بتمرير حالة التحقق بشكل صحيح.

إذن لماذا يتجاهل هذا إضافة SAML؟

في إضافة SAML، يتم التحكم في ذلك من خلال الإعداد العالمي saml_default_emails_valid (الافتراضي: true).

وجدت الحل! ))))
في Keycloak:

قم بتعطيل هذه الخيارات:

طالما أنك متأكد بنسبة 100% من أن Keycloak قد تحققت من البريد الإلكتروني، فلا بأس بذلك. أما إذا لم تكن عناوين البريد الإلكتروني محققة، فإن القيام بذلك سيفتح موقع Discourse الخاص بك أمام المهاجمين.

نعم، هذا صحيح…
الآن نختبر حالة جديدة - منتديان مع عميل OpenID واحد لـ Keycloak ))

بالمناسبة، @david، ما الذي تعتقد أنه أكثر صحة:

  1. استخدام عميل OpenID واحد لجميع المنتديات وتحديد عناوين إعادة التوجيه الصالحة المطلوبة، كما هو الحال الآن:

  2. أم استخدام عميل OpenID خاص بكل منتدى؟

أنا لست على دراية بـ Keycloak، لكن أي من الطريقتين تبدو مقبولة. إذا أردت لاحقًا وجود ضوابط وصول منفصلة لكل منتدى، فقد يكون إنشاء عملاء منفصلين لكل منها أسهل في التنفيذ :man_shrugging: