فشل إنشاء حساب OAuth بسبب اكتشاف CSRF فور تسجيل الدخول إلى Auth0 في نفس المتصفح

لقد قمنا بتكوين المكون الإضافي oauth2 باتباع التعليمات الموجودة في تكوين التسجيل وتسجيل الدخول باستخدام Auth0 باستخدام المكون الإضافي OAuth2 الأساسي.

تتدفق العملية على النحو التالي:

  • يقوم المستخدمون بالتسجيل في \u003chttps://getdbt.com/community/join-the-community\u003e
  • يتلقون بريدًا إلكترونيًا للتأكيد من Auth0
  • يصلون إلى \u003chttps://getdbt.com/community/email-verified\u003e
  • ينقرون على الحصول على المساعدة في منتدى المجتمع، ويتم توجيههم إلى Auth0 لتسجيل الدخول
  • بعد تسجيل الدخول، يتم إعادة توجيههم إلى discourse.getdbt.com ولكن مع عرض تحذير CSRF.

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

فيديو Loom يوضح هذا الإجراء:

لقد قمت بتمكين oauth2 debug auth وفي السجلات يمكنني رؤية (oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected

أسئلتي:

  1. هل هذه مشكلة في Discourse أم مشكلة في Auth0؟ أفترض أنها مشكلة في Discourse نظرًا لأن تدفق تسجيل دخول مماثل تقريبًا لـ Slack يعمل دون مشكلة.
  2. لماذا يعمل هذا على صفحة تسجيل الدخول ولكنه لا يعمل عند تشغيل تسجيل الدخول من جانب Auth0؟
  3. تشير رسالة خطأ CSRF الافتراضية إلى أنها تحدث عندما يتغير المتصفح، أو عندما تستغرق عملية تسجيل الدخول وقتًا طويلاً. لا ينطبق أي من هذين الأمرين، فما الذي يمكن أن يسببه أيضًا؟

مرحباً @joellabes - هل يمكنك التحقق من عنوان URL الذي أدخلته في إعداد Auth0 "Application Login URI"؟

يجب أن يكون {your forum}/auth/oauth2_basic. إذا كان لديك /callback في النهاية، فقد يتسبب ذلك في المشكلة التي وصفتها.

إعجابَين (2)

شكراً @david - حاليًا ليس لدي أي شيء في مربع URI لتسجيل الدخول للتطبيق، ولكن لدي شيء في عناوين URL المسموح بها لإعادة التوجيه:

هل يجب أن أضع https://discourse.getdbt.com/auth/oauth2_basic في حقل URI لتسجيل الدخول للتطبيق وأترك https://discourse.getdbt.com/auth/oauth2_basic/callback في حقل عناوين URL المسموح بها لإعادة التوجيه؟

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

نعم، يمكنك تجربة ذلك.

هل يمكنك مشاركة المزيد من التفاصيل حول كيفية تنفيذ رابط “الحصول على المساعدة في منتدى المجتمع”؟ إلى أين يذهب الرابط؟ أفترض حاليًا أن الزر تتم معالجته بواسطة Auth0، وأن إضافة تكوين عنوان URL الجديد هذا سيؤدي إلى ربط الزر بشكل صحيح بـ /auth/oauth2_basic لبدء تدفق تسجيل الدخول.

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

عذرًا على الرد البطيء - عدت للتو بعد عطلة عيد الميلاد!

لقد فعلت هذا:

ولكن لا يزال نفس النتيجة تظهر.

يشير هذا الرابط إلى https://dev-zb38hsho.us.auth0.com/samlp/5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr، حيث dev-zb38hsho هو معرف مثيل Auth0 الخاص بنا و 5GpVvVgryMnBaNJFuLt5DW3bs89jO0hr هو معرف العميل لتطبيق Discourse في Auth0.

زيارة هذا الرابط تعيد التوجيه إلى https://dev-zb38hsho.us.auth0.com/u/login?state=SESSION_SPECIFIC_TOKEN.

المفتاح هو أن Discourse يحتاج إلى بدء تدفق المصادقة على /auth/oauth2_basic، ثم إعادة التوجيه إلى Auth0، ثم العودة إلى /auth/oauth2_basic/callback.

كنت آمل أن نتمكن من جعل Auth0 يبدأ تسجيل الدخول بالبدء بعنوان URL الأول، ولكن يبدو أنه يقفز Discourse مباشرة إلى عنوان URL الخاص بالرد.

هل يمكنك تحديث الزر ليشير إلى /auth/oauth2_basic في المنتدى؟ سيبدأ هذا تدفق المصادقة ويعيد التوجيه فورًا إلى Auth0، لذا يجب أن يكون تجربة المستخدم الإجمالية كما هي.

4 إعجابات

نعم، هذا يعمل! يتوقف عند صفحة فاصلة تحتوي على زر “متابعة”؛ هل تفاعل المستخدم إلزامي لتشغيل تدفق OAuth بأمان أو شيء من هذا القبيل؟

إذا كانت هناك طريقة لجعله

فسيكون ذلك مكافأة، ولكن هذا رائع! شكراً لك :folded_hands:

تظهر هذه الصفحة عندما تكون هناك طرق تسجيل دخول متعددة على موقع ما. إذا قمت بتعطيل “تسجيل الدخول المحلي” (اسم المستخدم/كلمة المرور) فسيتم الانتقال مباشرة إلى عملية تسجيل الدخول.

3 إعجابات

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.