تسجيل الدخول SSO يبدو أنه توقف عن العمل

لقد قمت بدمج SSO من موقعي لعدة سنوات حتى الآن دون مشكلة.

مؤخرًا بدأ المستخدمون يقولون إنه عندما يقومون بتسجيل الدخول، يتم إعادة توجيههم إلى موقعي لتسجيل الدخول ثم ينتهي بهم الأمر مرة أخرى في Discourse ولا يزال يظهر أنهم بحاجة إلى تسجيل الدخول. لقد كنت أحاول تصحيح الأخطاء ولكني لا أرى أي مشاكل. يبدو الأمر وكأن شيئًا ما يحدث بشكل خاطئ في النهاية عندما يقوم بإعادة التوجيه لتسجيل الدخول.

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

إليك مقطع فيديو سريع يوضح ما أراه…

لقد اتبعت هذه المعلومات:

… وأستخدم أحدث مكتبة discourse-sso javascript.

هذا هو AWS Lambda الخاص بي والذي يتصدره API Gateway…

'use strict';

exports.handler = (event, context, callback) => {
    console.log(event);

    var discourse_sso = require('discourse-sso');
    var sso = new discourse_sso("********************"); // secret hidden

    var body = JSON.parse(event.body);

    var payload = body.sso; // fetch from incoming request 
    var sig = body.sig; // fetch from incoming request 
    
    if(sso.validate(payload, sig)) {
        var nonce = sso.getNonce(payload);
        
        var userparams = {
            // Required, will throw exception otherwise 
            "nonce": nonce,
            "external_id": body.externalId,
            "email": body.email,
            // Optional 
            "username": body.username,
            "name": body.name
        };
        
        console.log("User: " + JSON.stringify(userparams));
        
        var q = sso.buildLoginString(userparams);

        console.log("q: " + q);

        // Redirect
        var response = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"q":q})
        };
        
        callback(null, response);
    } else {
        // What to do if doesn't validate?
        var responseError = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"error":"SSO Validation Error"})
        };

        callback(null, responseError);
    }
};

عند النقر فوق زر تسجيل الدخول من Discourse، فإنه يستدعي تطبيق الويب الخاص بي حيث يتم التحقق من صحة المستخدم ثم، إذا نجح التحقق، يستدعي ما يلي…

						if (state.get(["appState", "urlParams", "sso"]) && state.get(["appState", "urlParams", "sig"])) {
							var userMetadata = getUserMetadata(result);

							var body = {
								sso: state.get(["appState", "urlParams", "sso"]),
								sig: state.get(["appState", "urlParams", "sig"]),
								externalId: keyPrefix,
								email: userMetadata.email,
								name: userMetadata.name,
								username: username
							};

							request
								.post('https://**********.execute-api.us-east-1.amazonaws.com/prod/discourse-sso')
								.send(body)
								.end(function (err, res) {
									if (err || !res.ok) {
										alert(err.message);
									} else {
window.location.replace("https://forum.miralouaero.com/session/sso_login?" + res.body.q);
									}
								});
						}

سأكون ممتنًا لأي مساعدة في فهم ما قد يحدث.

من المحتمل أن يكون هذا ناتجًا عن خطأ في Chrome 97، الذي تم إصداره هذا الشهر. بينما ننتظر جوجل لطرح حل، أضفنا حلاً بديلاً لـ Discourse. يجب أن يؤدي ترقية موقعك إلى أحدث إصدار إلى حل المشكلة.

3 إعجابات

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

أخشى لا. استضافة discourse.org المُدارة لدينا محدثة. هل يمكنك مشاركة المزود الذي تستخدمه؟ قد نتمكن من التواصل معهم وإبلاغهم بالتحديث.

إذا تطابقت عناوين البريد الإلكتروني، فسيعمل بسلاسة. في البداية، سيحتاج المستخدمون إلى استخدام زر “نسيت كلمة المرور” لإنشاء كلمة مرور.

إعجاب واحد (1)

@jeffbonasso أرى أنك تستضيف لدينا، وسنبحث عن حل لك. هل يمكنك إنشاء تذكرة باستخدام لوحة التحكم الخاصة بنا، مع الإشارة إلى هذا الموضوع؟

لا، هذا سيعمل. إذا قمت بإعادة تشغيله، فسيتعرف SSO على عنوان البريد الإلكتروني.
ولكن قد يواجه المستخدمون الحاليون صعوبة في تسجيل الدخول، حيث لا يملكون كلمة مرور للمنتدى مباشرة.

@david هل لي أن أسأل - أي التزام من Discourse يحتوي على هذا الإصلاح؟

إعجاب واحد (1)

بالنسبة للفرع المستقر، هذا هو الإصلاح:

هناك التزام مماثل على الفرعين التجريبي (beta) والاختبارات المارة (tests-passed) أيضاً.

إعجابَين (2)

شكراً ديفيد،

هذا الإصلاح موجود بالفعل في منتداك منذ 13 يناير @jeffbonasso ، لذلك لا يمكن أن يكون هذا هو السبب (أو أن التقارير التي تلقيتها كانت قبل ذلك التاريخ؟)

إعجاب واحد (1)

تم إنشاء الفيديو الذي أنشأته باستخدام مستخدم اختبار أنشأته هذا الصباح وكان السلوك متسقًا مع ما كان يواجهه العميل. المثير للاهتمام أنني حاولت للتو تسجيل الدخول باستخدام سفاري ونجحت. ثم حاولت مرة أخرى باستخدام كروم وها هو يعمل الآن أيضًا. إصدار كروم الذي اختبرته للتو هو الإصدار 97.0.4692.99 (البناء الرسمي) (x86_64). سأتواصل مع عميل كان يواجه مشكلات لمعرفة ما إذا كان لا يزال يواجه مشكلات.

إعجابَين (2)

للعلم… أفاد العميل أنه يستخدم متصفح Brave، وهو مشتق من Chrome. قال إنه لا يزال لا يعمل. ثم جرب Edge وكان يعمل.

التحايل الخاص بنا هو خاص بـ Chrome، قد نحتاج إلى توسيع الشبكة هنا @Falco / @david
أتساءل عما إذا كان ينبغي علينا إضافة إعداد موقع لتعطيل عمال الخدمة الذي يمكن للأشخاص تشغيله إذا واجهوا مشاكل كهذه؟

لقد تم إصلاحه بالفعل في أحدث إصدار من Chrome منذ 2022-01-19T03:00:00Z لذلك أعتقد أن مشتقات Chrome ستتبع قريبًا مع الإصدار الذي يتضمن هذا الإصلاح، 97.0.4692.99، يتضمن أيضًا إصلاحًا أمنيًا واحدًا حرجًا و 15 إصلاحًا عاليًا.

إعجابَين (2)

لقد طبقنا إصلاح DiscourseConnect على جميع المتصفحات. كان الإصلاح العام اللاحق خاصًا بـ Chrome، ولكنه يجب أن يستهدف أيضًا Edge/Brave بفضل سلاسل وكيل المستخدم الخاصة بهما:

Edge: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55'

ويبدو أن Brave لا يخصص وكيل المستخدم الافتراضي لـ Chrome

3 إعجابات