SSO
يتوفّر الدخول الموحّد (عبر SAML2) في OpenReplay Enterprise Edition فقط.
إعداد موفّر الهوية (IDP)
Section titled إعداد موفّر الهوية (IDP)في لوحة تحكّم موفّر الهوية الخاص بك، أنشئ تطبيقًا جديدًا باسم openreplay (يمكنك استخدام هذه الأيقونة). في صفحة الإعداد، تأكّد من ضبط القيمة التالية (يُرجى التأكّد من استبدال YOUR_DOMAIN بالقيمة الصحيحة، على سبيل المثال https://openreplay.mycompany.com):
| المتغيّر | القيمة |
|---|---|
| ACS URL (يُسمّى أيضًا Single Sign On URL أو Consumer URL) | |
| Entity ID (يُسمّى أيضًا Audience) | |
| Single Logout URL (يُسمّى أيضًا SLO URL) | (اختياري) |
| Name ID (يكون أحيانًا قابلاً للتهيئة في قسم ‘Attribute Statements’ أو قسم ‘Parameters’) | Email أو EmailAddress أو urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress، وذلك بحسب موفّر الهوية الخاص بك |
| SAML initiator | اضبطه على Service Provider (اختياري) |
في قسم ‘Attribute Statements’ أو قسم ‘Parameters’، يُرجى التأكّد من تعريف الحقول التالية:
| الحقل | القيمة |
|---|---|
| tenantKey | يمكن العثور على قيمته في Dashboard ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة إذا كنت تستخدم خطّة Cloud Dedicated الخاصة بنا) |
| firstName | user.firstName |
| lastName | user.lastName |
| internalId | المعرّف الداخلي أو user.email (معرّف المستخدم في نظام إدارة الهويات الخاص بك) (اختياري) |
| groups | يمثّل دور المستخدم وصلاحية المسؤول الخاصة به في OpenReplay، وبحسب موفّر الهوية الخاص بك قد يكون user.role أو group، وما إلى ذلك (اختياري، القيمة الافتراضية = member بدون صلاحية مسؤول)، ولتبسيط إدارة أدوار OpenReplay من جانب موفّر الهوية (IdP)، يمكنك إنشاء مجموعة باسم OpenReplay-admin تضمّ المستخدمين الذين يملكون صلاحية المسؤول، ومجموعة باسم OpenReplay-member تضمّ المستخدمين الذين يحملون الدور ‘member’ |
ينبغي أن تتوفّر لديك الآن جميع القيم المطلوبة للخطوة/القسم التالي.
إعداد SSO (SAML2)
Section titled إعداد SSO (SAML2)إذا كنت تستخدم خطّة Cloud dedicated الخاصة بنا، فانتقل إلى Console ثم انقر على المثيل (instance) واضبط المتغيّرات ضمن قسم SSO.
أما إذا كنت تشغّل Enterprise Edition الخاصة بنا، فشغّل openreplay -e، ثم أزِل التعليق وحدِّث متغيّرات البيئة أدناه في قسم chalice:
| المتغيّر | الوصف |
|---|---|
| idp_entityId | قيمة entityId الخاصة بموفّر الهوية لديك، ويُشار إليها أيضًا بـ Issuer URL |
| idp_sso_url | قيمة singleSignOnService الخاصة بموفّر الهوية لديك، ويُشار إليها أيضًا بـ SAML 2.0 Endpoint (HTTP) |
| idp_x509cert | قيمة x509cert، ويجب أن تكون سلسلة نصّية من سطر واحد، بدون فواصل أسطر. يمكنك استخدام هذه الأداة لتنسيق قيمتك |
| idp_name | اسم موفّر الهوية (اختياري) |
| idp_sls_url | قيمة singleLogoutService الخاصة بموفّر الهوية لديك، ويُشار إليها أيضًا بـ SLO Endpoint (HTTP) (اختياري) |
| enforce_SSO | إذا ضُبط على true، فستُحظر جميع عمليات الاتصال باستخدام اسم المستخدم وكلمة المرور (اختياري، القيمة الافتراضية=false) |
| idp_group_prefixes | بادئات أسماء مجموعات موفّر الهوية (IdP) (اختياري، القيمة الافتراضية=OpenReplay-,or-) |
بعد ذلك، احفظ واخرج باستخدام :wq لتسري التغييرات:
شهادة OpenReplay
Section titled شهادة OpenReplayهذا الأمر اختياري، إذ يمكنك إضافة شهادة x509 لمزيد من الأمان في الدخول الموحّد (SSO):
- شغّل هذا الأمر على خادمك أو على جهازك الآمن (يمكنك تغيير مدّة صلاحية شهادتك وفقًا لاحتياجاتك):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout openreplay-sso.key -out openreplay-sso.crt
- على خادمك، شغّل
openreplay -e - ضمن قسم
chalice، أضِف متغيّرات البيئة التالية:
- sp_crt: يجب أن تكون سلسلة نصّية من سطر واحد، بدون فواصل أسطر، من ملف ‘openreplay-sso.crt’ المُولَّد (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
- sp_key: يجب أن تكون سلسلة نصّية من سطر واحد، بدون فواصل أسطر، من ملف ‘openreplay-sso.key’ المُولَّد
- احفظ واخرج باستخدام
:wqلتسري التغييرات - أضِف ملف ‘openreplay-sso.crt’ المُولَّد إلى إعداد تطبيق موفّر الهوية الخاص بك
مثال باستخدام Okta
Section titled مثال باستخدام Okta- سجّل الدخول إلى لوحة إدارة Okta وانتقل إلى ‘Applications’ > ‘Applications’
- اضغط على ‘Create new app integration’، ثم اختر SAML 2.0 واضغط على ‘Next’
- اضبط ‘App Name’ على OpenReplay (يمكنك رفع هذه الأيقونة) لتطبيقك) ثم اضغط على ‘Next’
- اضبط:
- Single sign on URL على
/api/sso/saml2/acs/YOUR_DOMAIN - Audience URI (SP Entity ID) على
/api/sso/saml2/metadata/YOUR_DOMAIN - Name ID format على
EmailAddress
- اضغط على Next، واختر ‘This is an internal app that we have created’ ثم اضغط على ‘Finish’
- في علامة التبويب Sign On، مرِّر للأسفل واضغط على ‘Show legacy configuration’ ثم اضغط على ‘Edit’
- عرِّف الحقول أدناه في ‘Profile Attribute Statements’:
- tenantKey: التنسيق
Basicواضبط القيمة على، وتُوجَد في لوحة OpenReplay ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة إذا كنت تستخدم خطّة Cloud Dedicated الخاصة بنا)TENANT_KEY - firstName: التنسيق
Basicواضبط القيمة علىuser.firstName - lastName: التنسيق
Basicواضبط القيمة علىuser.lastName - internalId: التنسيق
Basicواضبط القيمة علىuser.email
- عرِّف الحقل أدناه في ‘Group Attribute Statement’ (هذا اختياري):
- groups: التنسيق
BasicالمرشّحMatch RegexالقيمةOpenReplay-*(أو يمكنك تحديد مرشّح وتعبير منتظم مختلفين وفقًا لاحتياجاتك)
- اضغط على ‘save’ ومرِّر للأعلى إلى اليمين واضغط على ‘View Setup Instructions’ لرؤية إعداد SAML2 الخاص بك
إذا كنت تستخدم خطّة Cloud dedicated الخاصة بنا، فانتقل إلى Console ثم انقر على المثيل (instance) واضبط المتغيّرات ضمن قسم SSO.
أما إذا كنت تشغّل Enterprise Edition الخاصة بنا:
- اتصل عبر SSH بتثبيت OpenReplay الخاص بك وشغّل
openreplay -e - ضمن قسم
chalice، أزِل التعليق ثم اضبط متغيّرات البيئة التالية:
- idp_entityId: Identity Provider Issuer
- idp_sso_url: Identity Provider Single Sign-On URL
- idp_x509cert: شهادة X.509، ويجب أن تكون سلسلة نصّية من سطر واحد، بدون فواصل أسطر (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
- idp_name: Okta
- أخيرًا، احفظ واخرج باستخدام
:wqلتسري التغييرات
مثال باستخدام Azure Active Directory
Section titled مثال باستخدام Azure Active Directory- سجّل الدخول إلى بوّابة Azure الخاصة بك وانتقل إلى ‘Azure Active Directory’
- اضغط على ’+ Add’، واختر ‘Enterprise application’ ثم انقر على ‘Create your own application’
- اضبط ‘App Name’ على OpenReplay ثم اختر ‘Integrate any other application you don’t find in the gallery (Non-gallery)’ واضغط على ‘Create’
- انتقل إلى ‘Single sign-on’ في القائمة الجانبية اليسرى واضبط القيم أدناه في كتلة ‘Basic SAML Configuration’:
- Identifier (Entity ID) على
/api/sso/saml2/metadata/YOUR_DOMAIN - Reply URL (Assertion Consumer Service URL) على
/api/sso/saml2/acs/YOUR_DOMAIN - Logout URL على
/api/sso/saml2/sls/YOUR_DOMAIN
- أضِف المطالبات (claims) أدناه في كتلة ‘Attribute & Claims’ وتأكّد من ترك حقل ‘Namespace’ فارغًا لكلٍّ منها:
- tenantKey: اضبط القيمة على
، وتُوجَد في لوحة OpenReplay ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة/المطالبة إذا كنت تستخدم خطّة Cloud Dedicated الخاصة بنا)TENANT_KEY - firstName: اضبط القيمة على
user.givenname - lastName: اضبط القيمة على
user.surname - internalId: اضبط القيمة على
user.mail
- انتقل إلى ‘Users and groups’ وعيِّن المستخدمين الذين تختارهم للتطبيق
إذا كنت تستخدم خطّة Cloud dedicated الخاصة بنا، فانتقل إلى Console ثم انقر على المثيل (instance) واضبط المتغيّرات ضمن قسم SSO (تُوجَد القيم في ‘Azure Active Directory’ > ‘OpenReplay’ > ‘Single sign-on’).
أما إذا كنت تشغّل Enterprise Edition الخاصة بنا:
- اتصل عبر SSH بتثبيت OpenReplay الخاص بك وشغّل
openreplay -e - ضمن قسم
chalice، أزِل التعليق ثم اضبط متغيّرات البيئة التالية (تُوجَد القيم في ‘Azure Active Directory’ > ‘OpenReplay’ > ‘Single sign-on’):
- idp_entityId: Azure AD Identifier
- idp_sso_url: Login URL
- idp_sls_url: Logout URL
- idp_x509cert: شهادة X.509، ويجب أن تكون سلسلة نصّية من سطر واحد، بدون فواصل أسطر (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
- idp_name: Active Directory
- أخيرًا، احفظ واخرج باستخدام
:wqلتسري التغييرات
مثال باستخدام Google Workspace (المعروف سابقًا بـ G Suite)
Section titled مثال باستخدام Google Workspace (المعروف سابقًا بـ G Suite)إضافة سمات مخصّصة:
Section titled إضافة سمات مخصّصة:- في وحدة تحكّم مسؤول Google، انتقل إلى ‘Directory’ > ‘Users’ > ‘More options’ > ‘Manage custom attributes’.
- انقر على ‘Add Custom Attribute’.
- اضبط الحقول التالية:
- Category: ‘OpenReplay’
- Custom fields:
- Name: ‘role’
- Info type: ‘Text’
- Visibility: ‘Visible to user and admin’
- No. of values: ‘Single-value’
- Custom fields:
- Name: ‘adminPrivileges’
- Info type: ‘Yes or No’
- Visibility: ‘Visible to user and admin’
- No. of values: ‘Single-value’
- انقر على ‘Add’
- لإضافة قيم إلى السمات المخصّصة الجديدة، انتقل إلى ‘Users’
- اختر المستخدم (المستخدمين) المطلوب
- انقر على ‘User information’ ثم عدِّل قسم ‘OpenReplay’
- غيِّر قيمة role إلى الدور المطلوب في ‘OpenReplay’ (يجب أن يطابق الدور ذلك المُنشأ في لوحة OpenReplay ضمن ‘Preferences’ > ‘Roles’)
- غيِّر قيمة adminPrivileges إلى ‘Yes’ إذا كان يُسمح للمستخدم بامتلاك صلاحيات مسؤول في OpenReplay
- انقر على ‘Save’
الإعداد:
Section titled الإعداد:- سجّل الدخول إلى وحدة تحكّم مسؤول Google وانتقل إلى ‘Apps’
- اضغط على ‘Web and mobile apps’ ثم انقر على ‘Add app’ > ‘Add custom SAML app’
- اضبط ‘App name’ على OpenReplay (يمكنك رفع هذه الأيقونة من أجل ‘App icon”) ثم اضغط على ‘Continue’
- انسخ ‘SSO URL’ و’Entity ID’ و’Certificate’ ثم انقر على ‘Continue’ (سنستخدم هذه القيم في الخطوة 11)
- اضبط:
- ACS URL على
( /api/sso/saml2/acs/YOUR_DOMAIN /TENANT_KEYTENANT_KEYيُوجَد في لوحة OpenReplay ضمن ‘Preferences’ > ‘Account’، لكن إذا كنت تستخدم خطّة Cloud Dedicated الخاصة بنا، فاترك قيمة tenantKey فارغة) - Entity ID على
/api/sso/saml2/metadata/YOUR_DOMAIN - Name ID format على
Email - Name ID على
Basic information > Primary Email
- انقر على ‘Continue’ ثم اضغط على ‘Add Mapping’ لإضافة السمات أدناه:
Basic information > First Name-> firstNameBasic information > Last Name-> lastNameBasic information > Primary Email-> internalIdOpenReplay > groups-> groups
- انقر على ‘Finish’
- في وحدة تحكّم مسؤول Google، انتقل إلى ‘Apps’ > ‘Web and mobile apps’ واختر ‘OpenReplay’
- انقر على ‘User access’، واختر ‘ON for everyone’ ثم اضغط على ‘Save’
إذا كنت تستخدم خطّة Cloud dedicated الخاصة بنا، فانتقل إلى Console ثم انقر على المثيل (instance) واضبط المتغيّرات ضمن قسم SSO.
أما إذا كنت تشغّل Enterprise Edition الخاصة بنا:
- اتصل عبر SSH بتثبيت OpenReplay الخاص بك وشغّل
openreplay -e - ضمن قسم
chalice > env، أزِل التعليق واضبط السمات التالية باستخدام القيم من الخطوة 4:
- idp_sso_url: الصق قيمة ‘SSO URL’
- idp_entityId: الصق قيمة ‘Entity ID’
- idp_x509cert: استخدم هذه الأداة لتنسيق الشهادة المنسوخة/المُنزَّلة
- idp_name: اضبط القيمة على
G-Suite - idp_tenantKey:
يُوجَد في لوحة OpenReplay ضمن ‘Preferences’ > ‘Account’TENANT_KEY
- أخيرًا، احفظ واخرج باستخدام
:wqلتسري التغييرات
مثال باستخدام JumpCloud
Section titled مثال باستخدام JumpCloud- سجّل الدخول إلى لوحة إدارة JumpCloud وفي القائمة اليسرى، انتقل إلى ‘SSO’
- اضغط على ’+ Add New Application’، ثم اختر ‘Custom SAML App’
- اضبط ‘Display Label’ على OpenReplay (يمكنك رفع هذه الأيقونة لتطبيقك) ثم انتقل إلى علامة التبويب ‘SSO’
- اضبط:
- IdP Entity ID على
openreplay/(TENANT_KEYTENANT_KEYيُوجَد في لوحة OpenReplay ضمن ‘Preferences’ > ‘Account’، لكن إذا كنت تستخدم خطّة Cloud Dedicated الخاصة بنا، فاترك قيمة tenantKey فارغة) - SP Entity ID على
/api/sso/saml2/metadata/YOUR_DOMAIN - ACS URL على
/api/sso/saml2/acs/YOUR_DOMAIN - SAMLSubject NameID على
email - SAMLSubject NameID Format: على
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress - Signature Algorithm على
RSA-SHA256 - فعِّل Sign Assertion
- IDP URL بحيث ينتهي بـ
openreplay-(لا يمكن تغيير هذه القيمة لاحقًا، وإذا كنت تستخدم خطّة Cloud Dedicated الخاصة بنا، فاترك جزء tenantKey فارغًا)TENANT_KEY
- إذا اتّبعت تعليمات شهادة OpenReplay، فيمكنك رفع ملف ‘openreplay-sso.crt’ المُولَّد بالضغط على ‘Upload SP Certificate’، وإلا فتجاهل هذه الخطوة
- عرِّف الحقول أدناه في ‘USER ATTRIBUTE MAPPING’ بالضغط على زرّ ‘add attribute’:
- firstName: اضبط القيمة على
firstname - lastName: اضبط القيمة على
lastname - internalId: اضبط القيمة على
email - groups: اختياري، دور المستخدم وصلاحية المسؤول الخاصة به في OpenReplay، فإذا كانت قيمة ثابتة لجميع المستخدمين، فينبغي أن تعرّفها في الخطوة التالية، وإلا فعليك إضافة سمة نصّية جديدة إلى مجموعة JumpCloud، وتسميتها
OpenReplay-groupsوضبط القيمة على اسم الدور، ثم في إعداد SSO، اختر ‘Custom User or Group Attribute’ واضبط القيمة علىOpenReplay-groups.
- عرِّف الحقول أدناه في ‘CONSTANT ATTRIBUTES’ بالضغط على زرّ ‘add attribute’:
- tenantKey: اضبط القيمة على
، وتُوجَد في لوحة OpenReplay ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة إذا كنت تستخدم خطّة Cloud Dedicated الخاصة بنا)TENANT_KEY - groups: اختياري، تجاهله إذا عُرِّف في الخطوة السابقة، دور المستخدم وصلاحية المسؤول الخاصة به في OpenReplay، ويجب أن يطابق اسم الدور المُعرَّف مسبقًا في OpenReplay (القيمة الافتراضية =
memberبدون صلاحية مسؤول)
- في هذه المرحلة، يمكنك الانتقال إلى علامة التبويب ‘User Groups’، واختيار مجموعة المستخدمين الذين سيُتاح لهم الوصول إلى OpenReplay، أو يمكنك فعل ذلك لاحقًا
- اضغط على ‘activate’ و’continue’ في النافذة المنبثقة للتأكيد
- اضغط على أيقونة تطبيق OpenReplay الجديد، ثم من القائمة المنسدلة اليسرى ‘IDP Certificate Valid’ اختر ‘Download certificate’
إذا كنت تستخدم خطّة Cloud dedicated الخاصة بنا، فانتقل إلى Console ثم انقر على المثيل (instance) واضبط المتغيّرات ضمن قسم SSO.
أما إذا كنت تشغّل Enterprise Edition الخاصة بنا:
- اتصل عبر SSH بتثبيت OpenReplay الخاص بك وشغّل
openreplay -e - ضمن قسم
chalice، أزِل التعليق ثم اضبط متغيّرات البيئة التالية:
- idp_entityId:
openreplay/TENANT_KEY - idp_sso_url:
https://sso.jumpcloud.com/saml2/openreplay-TENANT_KEY - idp_x509cert: الشهادة المُنزَّلة، ويجب أن تكون سلسلة نصّية من سطر واحد، بدون فواصل أسطر (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
- idp_name: JumpCloud
- أخيرًا، احفظ واخرج باستخدام
:wqلتسري التغييرات
توفير SCIM (نظام إدارة الهوية عبر النطاقات، System for Cross-domain Identity Management)
Section titled توفير SCIM (نظام إدارة الهوية عبر النطاقات، System for Cross-domain Identity Management)يدعم Openreplay خيار توفير هويات المستخدمين في Enterprise Edition.
للتكامل مع خدمة SCIM الخاصة بـ Openreplay، ما عليك سوى تمكين توفير SCIM في لوحة تحكّم موفّر الهوية الخاص بك. يُرجى التأكّد من ضبط القيم التالية لضمان تكامل سلس:
| المتغيّر | الوصف |
|---|---|
| SCIM connector base URL | /api/sso/scim/v2/ |
| User unique identifier field name | email |
| Support provisioning actions | Push new users, Push profile updates, Push groups |
| Authentication mode | OAuth2 |
| Access token endpoint | /api/sso/scim/v2/token/ |
| Authorization endpoint | /api/sso/scim/v2/authorize/ |
| Client id | يمكن العثور على قيمته في Dashboard ضمن ‘Preferences’ > ‘Account’ |
| Client secret | يمكن العثور على قيمته بتنفيذ هذا الاستعلام في قاعدة بيانات Postgres الخاصة بك: SELECT tenant_secret FROM tenants WHERE tenant_key = ' |
بعد ضبط هذه القيم، اتّبع الإرشادات من لوحة تحكّم موفّر الهوية الخاص بك لاختبار التكامل وتفويض التطبيق.
بعد ذلك، ستتمكّن من توفير هويات المستخدمين باستخدام Openreplay بصفته موفّر خدمة SCIM.
ملاحظة: على الرغم من أن Openreplay يعمل بصفته موفّر خدمة SCIM، فإنه لا يدعم تقسيم المستخدمين إلى مجموعات متعدّدة (أي يمكن أن ينتمي كل مستخدم إلى مجموعة واحدة فقط). وإذا لم يُلتزَم بذلك، فقد يُسنَد المستخدم إلى عدد من المشاريع أقلّ أو أكثر من المتوقّع، وقد تكون لديه أذونات أقلّ أو أكثر في تطبيق Openreplay.
مثال باستخدام Okta
Section titled مثال باستخدام Oktaفي تطبيق SAML 2.0 الخاص بك، نفّذ ما يلي
إضافة توفير SCIM
Section titled إضافة توفير SCIM- انقر على علامة التبويب General
- في قسم App Settings، انقر على Edit
- في حقل Provisioning، اختر SCIM، وانقر على Save
اختيار خيارات التوفير
Section titled اختيار خيارات التوفير- انقر على علامة التبويب Provisioning. تظهر إعدادات اتصال SCIM ضمن Settings > Integration.
- في Settings > Integration، انقر على Edit.
- حدِّد قيمة SCIM connector base URL واسم حقل المعرّف الفريد لمستخدميك المذكوران أعلاه.
- ضمن Supported provisioning actions، اختر إجراءات التوفير المذكورة أعلاه.
- اضبط القائمة المنسدلة Authentication Mode على القيمة المذكورة أعلاه.
- اضبط Access token endpoint وAuthorization endpoint وClient id وClient secret كما هو مذكور أعلاه.
- انقر على Save.
- انقر على Authentiate application.
- في علامة التبويب Provisioning، انقر على To App.
- انقر على Edit، وفعِّل
Create UsersوUpdate User AttributesوDeactivate Usersواحفظ التغييرات.
- قبل بدء الخطوة التالية، نوصي بإنشاء مجموعات جديدة في Okta، باسم
OpenReplay-adminحيث تدرج المستخدمين الذين يملكون صلاحية المسؤول في OpenReplay، وOpenReplay-membersحيث تدرج المستخدمين الذين يحملون الدورmemberفي OpenReplay، …
- انتقل إلى علامة التبويب Push Groups، وانقر على + Push Groups (بحسب الاسم أو بحسب القاعدة)، واختر المجموعة التي تريد دفعها إلى OpenReplay، واضغط على save
- في هذه المرحلة، تمثّل المجموعات المدفوعة الأدوار وصلاحية المسؤول في OpenReplay، وهي لا تتضمّن قائمة المستخدمين المُوفَّرين لـ OpenReplay.
- انتقل إلى علامة التبويب Assignmets، وأضِف المستخدمين بالطريقة التي تناسبك (باستخدام الأشخاص أو المجموعات)
الأخطاء
Section titled الأخطاءوصل الردّ عبر http بدلاً من https
Section titled وصل الردّ عبر http بدلاً من httpsهذا أمر شائع جدًّا، ويعود إلى عدم وجود ترويسة ‘X-Forwarded-Proto’ في الطلب. ولحلّ ذلك، تأكّد من أن موازِن الحمل (Load Balancer) يمرّر الترويسة بشكل صحيح إلى خلفية OpenReplay، وشغّل openreplay -e، وضمن قسم ingress-nginx > config، أزِل التعليق عن السطر use-forwarded-headers: true.