SSO JWT - تمرير المجموعات

أستخدم GitHub - discourse/discourse-jwt: Discourse Auth support for JSON Web Tokens (JWT) · GitHub للمصادقة مع خدمة JWT مخصصة.

تعمل بشكل جيد لتسجيل دخول المستخدم، لكن تمرير المفتاح groups لا يبدو أنه يقوم بأي شيء. لقد راجعت كود ManagedAuthenticator ولم أجد أي شيء يتعلق بالمجموعات.

هل هناك شيء مفقود أم أن فهمي خاطئ؟

شكرًا!

أنت لا تفوت شيئًا — فإضافة JWT لا تدعم تمرير المجموعات. جعل ذلك ممكنًا سيتطلب بعض العمل التطويري على الإضافة.

@david، ما مدى صعوبة تنفيذ هذا لشخص لم يكتب إضافات من قبل؟ هل الأمر بسيط مثل جلب المجموعات المستخلصة من JWT من discourse بناءً على الاسم، ثم إسناد نتيجة الاستعلام (كائنات المجموعات) إلى user.groups؟ لدي بعض الإلمام بالإضافة (ببساطتها) وقد أستطيع القيام بذلك.

أيضًا، هل يجب أن أبدأ في هذا؟ إذا كان بحوزتي JWT، فهل يمكنني المصادقة عبر OpenID Connect؟

يعتمد ذلك على كيفية رغبتك في أن يعمل الأمر… فغالبًا ما تريد أن تتمكن من إنشاء مجموعات عادية في Discourse أيضًا، دون أن تقوم مفاتيح JWT بحذف الأعضاء منها بشكل عشوائي. في نظام SSO الأصلي الخاص بـ Discourse، نحل هذه المشكلة باستخدام معلمتين: “إضافة مجموعات” و “إزالة مجموعات”.

https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L159-L179

في إضافة JWT، يمكنك على الأرجح إضافة هذا المنطق في دالة after_authenticate الخاصة بالمصادق. تأكد من استدعاء super وإرجاع استجابته، حتى تعمل جميع العناصر الموجودة حاليًا بشكل صحيح. مثال على هذا النوع من التجاوز موجود هنا

عظيم! هذا يعطيني ما أردت؛ يجب أن أتمكن من حل الباقي. شكرًا لك!

هل تقدمت في هذا الأمر؟ أتساءل كيف يمكنني تنفيذ تسجيل الدخول الموحد (SSO) باستخدام JWT فقط؟

يعمل إضافة discourse-jwt. ومع ذلك، يبدو أنها مصممة للعمل فقط مع خوارزمية HS256 لسبب ما. من السهل جدًا تعديلها لتعمل مع خوارزميات أخرى.

يمكنك الاطلاع على المستودع الذي جربته: discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub