إعداد مصادقة Salesforce باستخدام مكون OAuth2 الأساسي

باستخدام إضافة دعم OAuth2 الأساسي (المضمنة في نواة Discourse منذ الإصدار v2025.11.0)، يمكنك إعداد مصادقة Salesforce.

للقيام بذلك، قم بإنشاء تطبيق OAuth2 متصل على Salesforce:

  • إنشاء → Apps → New connected app

  • تأكد من السماح بالوصول إلى “الوصول إلى المعلومات الأساسية”

  • اضبط “عنوان URL للاستدعاء” على https://YOURFORUM.COM/auth/oauth2_basic/callback : ملاحظة: يجب أن تعمل منتدى Discourse الخاص بك عبر HTTPS.

  • دوّن معرف العميل (client id) والسر (secret)

على جانب Discourse، قم بتكوين الإعدادات التالية (الموجودة تحت Admin > Login > OAuth2.0):

  • oauth2 enabled: true
  • oauth2 client id and secret، كما هو موضح في القسم السابق
  • oauth2 authorize url: https://login.salesforce.com/services/oauth2/authorize
  • oauth2 token url: https://login.salesforce.com/services/oauth2/token
  • oauth2 fetch user details: true (هذا هو الإعداد الافتراضي، لكن تأكد من تفعيله)
  • oauth2 user json url: https://login.salesforce.com/services/oauth2/userinfo
  • oauth2 json user id path: user_id
  • oauth2 json username path: preferred_username
  • oauth2 json name path: name
  • oauth2 json email path: email
  • oauth2 email verified: true
  • oauth2 authorize options: scope, display, immediate, state

إذا كنت تواجه مشكلة، فتأكد من تفعيل oauth2 debug auth وتفحص ملفات السجل في /logs.

9 إعجابات

شكرًا لك على هذا المنشور، الذي كان لا يُقدر بثمن في إعداد مشروع حديث تطلب تسجيل الدخول إلى Salesforce.

في حالتنا، كان تطبيق Salesforce عبارة عن مجتمع (Community)، مما يعني أننا اضطررنا إلى تغيير بعض التفاصيل المذكورة أعلاه. أنشر هذا في هذا الموضوع القديم في حال كان مفيدًا لأي شخص آخر. لقد كاد أن يحطم عقلي ليوم كامل.

  • عنوان URL لتفويض oauth2: https://[اسم_المجتمع].force.com/services/oauth2/authorize
  • عنوان URL لرمز oauth2: https://[اسم_المجتمع].force.com/services/oauth2/token
  • مسار معرف المستخدم في استدعاء oauth2: id

تم استنتاج تغييرات المسار تدريجيًا (وبشكل مؤلم) من مستندات Salesforce وغيرها:
https://auth0.com/docs/connections/social/salesforce
Salesforce Help

ومع ذلك، واجهنا مشاكل مع أخطاء 403 Forbidden، والتي كانت عبارة عن HTML غير منسق ولم تبدو مثل خطأ في Discourse بالنسبة لي، مما أدى إلى الكثير من تصحيح أخطاء Salesforce وشق الأسنان. لكن المشكلة كانت في Discourse.

Forbidden

ليس لديك إذن للوصول إلى هذا المورد.

بالإضافة إلى ذلك، تم التقاط خطأ 500 Internal Server Error أثناء محاولة استخدام ErrorDocument للتعامل مع الطلب.

على الرغم من أن التحويل إلى عنوان URL للاستدعاء (Callback URL) بدا أنه يعمل، إلا أن وحدة تحكم المتصفح سجلت فشل المصادقة. في النهاية، كان السبب في فشل المصادقة هو عدم تعيين مسار معرف المستخدم في استدعاء oauth2. تم حل كل شيء بتعيينه إلى id.

جميع الإعدادات الأخرى كما في المنشور السابق.

إعجابَين (2)

شكرًا لكم على الإرشادات، وقد تمكنا من المصادقة بنجاح باستخدام Salesforce، لكننا واجهنا مشكلة. يبدو أن كائنات/حقول Salesforce لا تُمرَّر بنجاح إلى Discourse. فبعد تسجيل الدخول الناجح إلى Salesforce على Discourse، يبدو أن Discourse يعامل المستخدم كجديد ويطلب منه اسم المستخدم والبريد الإلكتروني والاسم، رغم أنه ينبغي أن تأتي هذه البيانات من حقول الاسم والبريد الإلكتروني واسم المستخدم في استجابة JSON الخاصة بـ OAuth2.

هل يمكنكم مساعدتنا في معرفة تنسيق JSON المطلوب لكائنات/حقول Salesforce المستخدمة في إضافة OAuth2؟ لقد جربنا الصيغ object.field و object_field و field فقط. ولا يبدو أن هناك أي خطأ يُبلغ عنه، لكن لا شيء يُمرَّر من Salesforce إلى Discourse عبر JSON للتعرف على تسجيل الدخول على أنه ليس مستخدمًا جديدًا في Discourse.

تحديث بسيط هنا: لقد وجدنا حلاً لمشكلتنا، وهذه الإعدادات من جانبنا لربط حقول Salesforce.

يجب إعداد الإعدادات التالية:

### oauth2 fetch user details - **checked**
### oauth2 user json url - **https://<yoursfsite.com>/services/oauth2/userinfo**
### oauth2 user json url method - **get**
### oauth2 json user id path - **user_id**
### oauth2 json username path - **preferred_username**
### oauth2 json name path - **name**
### oauth2 json email path - **email**

نأمل أن يساعد هذا الآخرين الذين يبحثون عن حل لمشكلة الاتصال بـ OAuth2 مع Salesforce.

إعجابَين (2)

شكرًا لك على المعلومات @sonny.mendoza - لقد دمجتُها في التعليمات في أعلى هذا الموضوع، حتى تساعد الآخرين في المستقبل :slight_smile:

3 إعجابات