مرحبًا،
اليوم حاولت تمديد المصادقة على منتدانا إلى AzureAD / O365. (لدي بالفعل مصادقة SAML مع دليل Active Directory الداخلي الخاص بنا، لكن المزيد والمزيد من المستخدمين ينتقلون إلى AzureAD).
لذلك جربت الموردين الثلاثة القادرين على ذلك:
و
للأسف، لم يفعل discourse-azure-ad شيئًا - لم يظهر حتى زرًا في شاشة تسجيل الدخول/التسجيل.
عمل openid-connect، ولكن بسبب طبيعة نقطة نهاية Azure الخاصة بـ “جميع المستأجرين” ( https://login.microsoftonline.com/organizations/v2.0/.well-known/openid-configuration ) التي تُرجع …/{tenantid}/… في URI لـ “المُصدر”، فإن ذلك يعمل فقط للمستخدمين في مستأجر AzureAD/Office365 الخاص بنا (وليس للمستخدمين في مستأجرين آخرين).
لذا، كان مكون Office365-Auth هو الخيار الأخير المتبقي.
عمل (أيضًا للمستخدمين من مستأجرين آخرين في AzureAD)، لكنه كان يحتوي على خلل: عندما لم تكن بريد AzureAD المستخدم في تسجيل الدخول هو البريد الإلكتروني الأساسي لمستخدم Discourse (الموجود مسبقًا)، فشل تسجيل الدخول:
أي:
كان عليّ إضافة العنوان الثاني حتى يتم مطابقة تسجيل الدخول مع المستخدم عند التسجيل - ولكن طالما كان العنوان “ثانويًا”، فشل تسجيل الدخول بخطأ (“ليس لديك الصلاحيات للقيام بذلك”) (بينما كان التسجيل يعمل!).
أيضًا، لم يسمح لي الموفر بـ “ربط” تسجيل الدخول الجديد من شاشة المستخدم (ميزة جديدة رائعة :)).
سرعت في تحديد مشكلة تسجيل الدخول المتعلقة بالبريد الإلكتروني إلى هذا الجزء من الكود:
أنا لست على دراية كافية بـ Ruby و Discourse لأقول ذلك بالتأكيد، لكنني أعتقد أن هذا الكود سيحاول تحديث البريد الإلكتروني الأساسي كلما لم يتطابق أحد عناوين البريد الإلكتروني (وهو ما سيفشل عندما يكون هناك أكثر من عنوان بريد إلكتروني والبريد الأساسي ليس هو البريد من O365).
ومع ذلك، قام openid-connect بهذا الجزء بشكل صحيح، بل قدم إعدادًا لتحديث البريد الإلكتروني (أو عدم تحديثه) وربط تسجيل الدخول من شاشة المستخدم. لذلك قمت بنسخ الأسطر ذات الصلة من openid-connect إلى office365-auth دون خجل، وقمت بتعليق “after_authenticate” في office365-auth، وأصبحت لدي عملية تسجيل دخول تعمل من أي مستأجر AzureAD مع إمكانية الربط إذا كان البريد الإلكتروني أحد عناوين البريد للمستخدم.
التغييرات ذات الصلة موجودة في مستودع Github الخاص بي وسأقوم بإنشاء طلب دمج (pull request). لكن تبقى مشكلة واحدة ![]()
بما أنني أضفت إمكانية الاتصال/الإلغاء، فإن الموفر أصبح مرئيًا في ملف المستخدم - لكنه يفتقر إلى اسمه؟!:
كيف يمكنني إضافة ذلك؟ هل هناك روابط للوثائق ذات الصلة؟ لا يبدو أن إدخاله في ملف client.en.yml كافٍ… أو أنني أغفلت شيئًا آخر.
بعد إصلاح هذه المشكلة، سأكون سعيدًا بتقديم طلب دمج للموفر المحدّث/المُصلّح…

