Discourse لديه DiscourseConnect مدمج يسمح لك بتغيير Discourse الخاص بك إلى موفر SSO. يمكنك العثور عليه في المقالة “استخدام Discourse كموفر هوية (SSO، DiscourseConnect)”. ومع ذلك، فإن ما يوفره ليس بروتوكول SAML أو Oauth قياسي.
لذلك، نحتاج إلى استخدام وحدة تم إنشاؤها بواسطة Paul B. في منتدى Discourse. هذه وحدة تسمح لنا بربط DiscourseConnect بـ SimpleSAMLphp ومن ثم استخدام SimpleSAMLphp لتوفير بروتوكول تسجيل دخول SAML قياسي. هنا أود أن أقدم شكرًا جزيلًا لمساعدته التي جعلت هذا ممكنًا. يمكنك أيضًا العثور على الوحدة هنا:
الآن لنبدأ الدليل.
أولاً، نحتاج إلى تكوين SimpleSAMLphp.
قم بتنزيل SimpleSAMLphp أولاً.
ثم قم بفك الضغط.
ثم انقل الملف إلى /var/simplesamlphp.
ثم امنح هذه المجلد للمستخدم www-data وإذن 755.
sudo chmod -R 755 /var/simplesamlphp/
قد تتساءل لماذا يجب أن يكون المسار في /var/simplesamlphp، لأن الوثائق الرسمية توضع هنا، وستحتاج إلى تكوين إضافي إذا وضعته في مكان آخر.
ثم قم بتكوين nginx ووجه الفهرس إلى /www في مجلده. إذا كنت تستخدم Apache، فيرجى العثور على التكوين في الوثائق الرسمية.
upstream saml-php-handler {
server unix:/run/php/php8.0-fpm.sock;
}
server {
listen 443 ssl;
server_name YOUR_SAML_DOMAIN;
index index.php;
ssl_certificate YOUR_CERT;
ssl_certificate_key YOUR_KEY;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
location ^~ /simplesaml {
alias /var/simplesamlphp/www;
location ~ ^(?<prefix>/simplesaml)(?<phpfile>.+?\.php)(?<pathinfo>/.*)?$ {
include fastcgi_params;
fastcgi_pass saml-php-handler;
fastcgi_param SCRIPT_FILENAME $document_root$phpfile;
# Must be prepended with the baseurlpath
fastcgi_param SCRIPT_NAME /simplesaml$phpfile;
fastcgi_param PATH_INFO $pathinfo if_not_empty;
}
}
}
ثم قم بتحديث المصدر الخاص بك:
ثم قم بتثبيت حزمة البرامج:
ملاحظة: هنا يتطلب منك التثبيت وفقًا لإصدار PHP الخاص بك. على سبيل المثال، إذا كنت تستخدم php8.0، فستحتاج إلى إضافة “8.0” بعد كل “php”. مثل: php8.0-xml
أعد تشغيل Nginx لتفعيل امتداد PHP الجديد بعد اكتمال التثبيت:
ثم قم بإنشاء مفتاح تشفير (salt):
انسخ هذا المفتاح.
ثم افتح /var/simplesamlphp/config/config.php
'auth.adminpassword',YOUR_PASSWORD;
'secretsalt',YOUR_SALT;
'technicalcontact_name',YOUR_NAME;
'technicalcontact_email' ,YOUR_EMAIL;
'language.default',CHANGE_TO_YOUR_LANGUAGE;
'timezone',CHANGE_TO_YOUR_AREA;
'enable.saml20-idp' => true,
ثم افتح https://YOUR_SAML_DOMAIN/simplesaml، نظريًا يجب أن يعمل SimpleSAMLphp الخاص بك الآن.
ثم قم بتثبيت Composer.
ثم يجب عليك كتابة composer للتشغيل.
انتقل إلى /var/simplesamlphp، قم بتحرير composer.json، قم بتغيير الإصدار إلى dev-master.
السبب في القيام بذلك هنا هو أن وحدة discourse-simplesamlphp تتطلب إصدار “dev-master”، ومع ذلك فإن إصدارها الافتراضي هو رقم، لذلك نحتاج إلى تغيير الإصدار إلى “dev-master”.
ثم ابدأ في تثبيت هذه الوحدة.
المعلمة “–ignore-platform-reqs” هي لمنع عدم تطابق إصدار PHP الخاص بك مع المتطلبات.
الآن يجب أن ترى Composer يبدأ في تثبيت swcc/simplesamlphp-module-authdiscourse.
بعد اكتمال التثبيت، أدخل:
لتمكين هذا المكون الإضافي.
ثم قم بتمكين خياري “أسرار موفر connect Discourse” و “تمكين موفر connect Discourse” في منتدى Discourse الخاص بك.
في “أسرار موفر connect Discourse” أدخل نطاق SAML الخاص بك وسر SSO.
ثم قم بتحرير config/authsources.php في مجلد simplesamlphp:
<?php
$config = [
// This is a authentication source which handles admin authentication.
'admin' => [
'core:AdminPassword',
],
// This is the authentication source using the Discourse authentication.
'discourse-sso' => [
'authdiscourse:Discourse',
'url' => 'https://discourse.your-domain.org',
'secret' => '<your-sso-secret>',
],
];
تحتاج إلى إضافة هذا الجزء إلى مكان مناسب:
'discourse-sso' => [
'authdiscourse:Discourse',
'url' => 'YOUR_DISCOURSE_DOMAIN',
'secret' => 'DISCOURSE_SSO_SECRET',
],
للسماح لـ SimpleSAMLphp باستخدام discourse-sso للمصادقة.
أخيرًا، افتح https://YOUR_SAML_DOMAIN/simplesaml/module.php/core/authenticate.php?as=discourse-sso
أو
افتح https://YOUR_SAML_DOMAIN/simplesaml/ ثم انقر فوق المصادقة ثم انقر فوق discourse-sso للاختبار.
إذا أعادت المعلومات الصحيحة، فهذا يعني أنك قمت بتكوين SimpleSAMLphp الخاص بك بنجاح للاتصال بـ Discourse الخاص بك.
الآن تحتاج إلى تكوين إعدادات موفر الهوية (IDP).
أولاً، تحتاج إلى إنشاء شهادة لموفر الهوية (IDP) باستخدام:
إذا قمت بإنشائه في الدليل الجذر، يمكنك رؤية الشهادة الجديدة هناك.
ثم انقل شهادتك إلى أي مكان تريده، ثم امنحها للمستخدم www-data وإذن 755.
chmod -R 755 /YOUR_CERT_PATH
أخيرًا، قم بتحرير مسار شهادتك ومصدر المصادقة الخاص بك في metadata/saml20-idp-hosted.php.
<?php
$metadata['__DYNAMIC:1__'] = [
/*
* The hostname for this IdP. This makes it possible to run multiple
* IdPs from the same configuration. '__DEFAULT__' means that this one
* should be used by default.
*/
'host' => '__DEFAULT__',
/*
* The private key and certificate to use when signing responses.
* These are stored in the cert-directory.
*/
'privatekey' => '/YOUR_KEY_PATH',
'certificate' => '/YOUR_CERT_PATH',
/*
* The authentication source which should be used to authenticate the
* user. This must match one of the entries in config/authsources.php.
* NOTICE: YOU NEED TO CHANGE THE AUTH METHOD TO "discourse-sso"
*/
'auth' => 'discourse-sso',
];
الآن يستخدم SimpleSAMLphp الخاص بك Discourse كقاعدة بيانات خلفية للمستخدمين، كموفر هوية SAML، ويوفر بروتوكول تسجيل دخول SAML قياسي.
معرف موفر الهوية (URI): https://YOUR_SAML_DOMAIN/simplesaml/saml2/idp/metadata.php
عنوان URL الهدف (يستخدم لإرسال متطلبات هوية موفر الخدمة): https://YOUR_SAML_DOMAIN/simplesaml/saml2/idp/SSOService.php
شهادة X509: https://YOUR_SAML_DOMAIN/simplesaml/module.php/saml/idp/certs.php/idp.crt
أو بالنسبة لموفري الخدمة الذين يسمحون لك بتحميل ملف بيانات تعريف موفر الهوية مباشرة، يمكنك تنزيل بيانات تعريف موفر الهوية: https://YOUR_SAML_DOMAIN/simplesaml/saml2/idp/metadata.php
كل شيء جاهز. يجب أن يعمل كل شيء الآن.
استمتع~
بعد ذلك، قد أقدم كيفية توصيل SimpleSAMLphp الذي يعمل بواسطة Discourse كطريقة تسجيل دخول SAML لـ NextCloud.
أي شيء تم فهمه بشكل خاطئ يمكن الرد عليه في هذا المنشور أو الاتصال بي عبر admin@rail.moe.