OAuth2 الأساسي في Discourse

:discourse2: ملخص يدعم Discourse OAuth2 Basic مزودي OAuth2 الأساسيين، بافتراض وجود نقطة نهاية JSON حيث يمكن استرداد تفاصيل المستخدم بواسطة الرمز المميز.
:open_book: دليل التثبيت هذه الإضافة مدمجة في نواة Discourse. لا حاجة لتثبيت الإضافة بشكل منفصل.

الميزات

تتيح لك هذه الإضافة استخدام مزود OAuth2 أساسي كمصدر للمصادقة في Discourse. يجب أن تعمل مع العديد من المزودين، مع التحذير من أنه يجب عليهم توفير نقطة نهاية JSON لاسترداد معلومات عن المستخدم الذي تقوم بتسجيل الدخول.

هذا مفيد بشكل أساسي للأشخاص الذين يستخدمون مزودي تسجيل دخول غير شائعين. إذا كنت ترغب في استخدام Google أو Facebook أو Twitter، فهي متضمنة بشكل افتراضي ولا تحتاج إلى هذه الإضافة. يمكنك أيضًا البحث عن مزودي تسجيل دخول آخرين في مستودع Github الخاص بنا.

التكوين

التكوين الأساسي

  1. أولاً، قم بتسجيل تطبيق Discourse الخاص بك مع مزود OAuth2. سيتطلب URI إعادة التوجيه الذي سيكون:

    http://DISCOURSE_HOST/auth/oauth2_basic/callback

:information_source: استبدل DISCOURSE_HOST بالقيمة المناسبة، وتأكد من استخدام https إذا كان مفعّلًا. يجب أن يزودك مزود OAuth2 بـ client ID و secret، بالإضافة إلى بضع عناوين URL.

  1. انتقل إلى الإدارةالإعداداتتسجيل الدخول عبر OAuth2 وأدخل التكوين الأساسي لمزود OAuth2:
  • oauth2_enabled - قم بتفعيل هذه الخانة لتمكين الميزة
  • oauth2_client_id - معرف العميل من مزودك
  • oauth2_client_secret - سر العميل من مزودك
  • oauth2_authorize_url - عنوان URL للمصادقة الخاص بمزودك
  • oauth2_token_url - عنوان URL للرمز المميز الخاص بمزودك.

:information_source: إذا لم تتمكن من معرفة قيم الإعدادات المذكورة أعلاه، راجع وثائق المطور من مزودك أو اتصل بدعمهم الفني.

تكوين نقطة نهاية JSON للمستخدم

أصبح Discourse الآن قادرًا على استلام رمز مصادقة من مزود OAuth2 الخاص بك. للأسف، يتطلب Discourse معلومات إضافية لإكمال المصادقة.

نحتاج إلى نقطة نهاية API يمكن الاتصال بها لاسترداد معلومات حول المستخدم بناءً على الرمز المميز.

على سبيل المثال، يوفر مزود OAuth2 SoundCloud عنوان URL من هذا النوع. إذا كان لديك رمز مصادقة SoundCloud، يمكنك إجراء طلب GET إلى https://api.soundcloud.com/me?oauth_token=A_VALID_TOKEN وستحصل على كائن JSON يحتوي على معلومات عن المستخدم.

لتكوين ذلك في Discourse، نحتاج إلى تعيين قيمة إعداد oauth2_user_json_url. في هذه الحالة، سندخل القيمة التالية:

https://api.soundcloud.com/me?oauth_token=:token

الجزء الذي يحتوي على :token يخبر Discourse بأنه يحتاج إلى استبدال هذه القيمة بالرمز المميز للمصادقة الذي تلقاه عند اكتمال المصادقة.

هناك خطوة أخيرة واحدة لإكمالها. نحتاج إلى إخبار Discourse بالسمات المتاحة في JSON الذي استلمناه. إليك استجابة نموذجية من SoundCloud:

{
  "id": 3207,
  "permalink": "jwagener",
  "username": "Johannes Wagener",
  "uri": "https://api.soundcloud.com/users/3207",
  "permalink_url": "http://soundcloud.com/jwagener",
  "avatar_url": "http://i1.sndcdn.com/avatars-000001552142-pbw8yd-large.jpg?142a848",
  "country": "Germany",
  "full_name": "Johannes Wagener",
  "city": "Berlin"
}

يجب تعيين متغيرات oauth2_json_user_id_path، oauth2_json_username_path، oauth2_json_name_path، و oauth2_json_email_path لتشير إلى السمات المناسبة في JSON.

السمة الإلزامية الوحيدة هي id - نحتاجها حتى عندما يسجل المستخدم الدخول في المستقبل يمكننا استرجاع الحساب الصحيح. السمات الأخرى رائعة إذا كانت متوفرة — ستجعل عملية التسجيل أسرع للمستخدم حيث سيتم تعبئتها تلقائيًا في النموذج.

إليك كيف قمت بتكوين إعدادات مسار JSON:

  oauth2_json_user_id_path: 'id'
  oauth2_json_username_path: 'permalink'
  oauth2_json_name_path: 'full_name'

استخدمت permalink لأنه يبدو أكثر تشابهًا مع ما يتوقعه Discourse لاسم المستخدم مقارنة بالاسم المستخدم في JSON الخاص بهم. لاحظ أنني لم أذكر مسار البريد الإلكتروني: لا يوفر SoundCloud عنوان بريد إلكتروني، لذا سيحتاج المستخدم إلى تقديمه والتحقق منه عند التسجيل لأول مرة في Discourse.

إذا كانت الخصائص التي تريدها من كائن JSON الخاص بك متداخلة، يمكنك استخدام النقاط. على سبيل المثال، إذا كان API يعيد هيكلًا مختلفًا مثل هذا:

{
  "user": {
    "id": 1234,
    "email": {
      "address": "test@example.com"
    }
  }
}

يمكنك استخدام user.id لـ oauth2_json_user_id_path و user.email.address لـ oauth2_json_email_path.

إذا كانت المفتاح نفسه يتضمن نقاطًا، فستحتاج إلى وضع علامات اقتباس مزدوجة حوله، أو استخدام علامة تعويضية للنقاط بعلامة مائلة للخلف. على سبيل المثال، بالنظر إلى هذا JSON:

{
  "example.com/uid": "myuid"
}

ستحدد المسار كـ example\.com/uid أو "example.com/uid"

مزامنة المجموعة وحقل المستخدم

  • oauth2_json_groups_path: مسار JSON الذي يحتوي على مجموعات المستخدم كمصفوفة من السلاسل النصية. بعد تسجيل دخول أول عضو، ستكون هذه المجموعات متاحة للاختيار في قسم «المجموعات المرتبطة» من إعدادات المجموعة في Discourse. اتركها فارغة لتعطيل مزامنة المجموعات.

  • oauth2_user_field_mappings: خرائط لمسارات JSON سيتم تخزينها في حقول مستخدم Discourse. يتم تحديد حقول المستخدم بمعرفها الرقمي، الذي يمكن العثور عليه في عنوان URL عند تحريرها عبر لوحة الإدارة.

:warning: إذا قمت بتعيين oauth2_json_email_path، يجب أن يؤكد مزود OAuth2 أن المستخدم يملك عنوان البريد الإلكتروني هذا. الفشل في القيام بذلك قد يؤدي إلى الاستيلاء على الحساب في Discourse!

:discourse2: مستضاف لدينا؟ هذه الإضافة متاحة في خططنا للأعمال والشركات. OAuth 2.0 & OpenID Connect Support | Discourse - Civilized Discussion

:spiral_notepad: هل تحتاج إلى أتمتة تسجيلات دخول المستخدمين؟ راجع Auto-provisioning user accounts when SSO is enabled

28 إعجابًا
Keycloak with Discourse
Discourse SSO with OAuth2
Login from another user database
Shopify Integration
OAuth2 integration with Drupal
How can we enable Auth0 SSO in Discourse
Is "partial" SSO possible?
How to login to discourse from external website
OAuth connection of discourse
How to use Oauth2 service provided by discourse?
How to force users link phone number when they using Discourse?
Set up Salesforce auth using OAuth2 basic support plugin
OAuth2 Custom Redirects Plugin
Login flow (Flask -> Discourse -> Flask) with OAuth
Auto-provisioning user accounts when SSO is enabled
Login on discourse using mastodon credentials
Custom Login / Registration from another API
Oauth2 with fusionauth cert issues
Open source will support customized provider SSO
SSO with TownNews CMS
What is supposed to go in “DISCOURSE_HOST”?
Custom Provider log-in with OAuth only sign-up/log-in
Discord, Google and Microsoft login, is oAuth2 enough?
Drupal 8 and Discourse shared SSO
Discourse for self hosting
Gate our community to just members of our Shopify site?
Discourse + Intercom (Current User Id)
Integration into custom auth system where emails are not unique?
Twitter login doesn't work on meta
ADFS Authentication
Question about Docker Manager?
Discourse OpenID Connect (OIDC)
🧩 How to Build an Android App User Community with Discourse? [HeyApks Project]
Bundling more popular plugins with Discourse core
Pulling user auth0 sub from OAuth2.0 plugin
Github and Twitter Login/Sign-Up Functionality?
Error during SSO integration - Wholistic Minds
Automatically creating a user when logging in with Webflow/Memberspace
Switching out authentication for a passwordless alternative
Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)
Intergrate Discourse with keycloak
CodeBerg support
Removing Yahoo login from Core, and deprecating OpenID 2.0
Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin
Populating email field on login page
Migrate a Jive Clearspace forum to Discourse
SSO and Auth0
Suggestion for improving Integrated Authentication development
Shopify Integration