SSO

كيفية إعداد الدخول الموحّد (SSO) عبر SAML2.

SSO

الدخول الموحّد (عبر SAML2) متاح في OpenReplay Enterprise Edition فقط.

تهيئة موفّر الهوية (IDP)

Section titled تهيئة موفّر الهوية (IDP)

في لوحة تحكم موفّر الهوية الخاص بك، أنشئ تطبيقًا جديدًا باسم openreplay (يمكنك استخدام هذه الأيقونة). في صفحة التهيئة، تأكّد من تعيين القيمة التالية (يرجى التأكّد من استبدال YOUR_DOMAIN بالقيمة الصحيحة، مثال https://openreplay.mycompany.com):

المتغيّرالقيمة
ACS URL (تُسمّى أيضًا Single Sign On URL أو Consumer URL)YOUR_DOMAIN/api/sso/saml2/acs/
Entity ID (يُسمّى أيضًا Audience)YOUR_DOMAIN/api/sso/saml2/metadata/
Single Logout URL (تُسمّى أيضًا SLO URL)YOUR_DOMAIN/api/sso/saml2/sls/ (اختياري)
Name ID (يكون أحيانًا قابلاً للتهيئة في قسم ‘Attribute Statements’ أو ‘Parameters’)Email أو EmailAddress أو urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress، حسب موفّر الهوية الخاص بك
SAML initiatorعيّنه إلى Service Provider (اختياري)

في قسم ‘Attribute Statements’ أو ‘Parameters’، يرجى التأكّد من تعريف الحقول التالية:

الحقلالقيمة
tenantKeyTENANT_KEY يمكن العثور على قيمته في الـ Dashboard، ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة إذا كنت تستخدم خطة Cloud Dedicated الخاصة بنا)
firstNameuser.firstName
lastNameuser.lastName
internalIdالمعرّف الداخلي أو user.email (معرّف المستخدم في نظام إدارة الهوية الخاص بك) (اختياري)
groupsيمثّل دور المستخدم وامتياز المسؤول في OpenReplay، وحسب موفّر الهوية الخاص بك يمكن أن يكون user.role أو group، إلخ (اختياري، الافتراضي = member دون امتياز المسؤول). لتبسيط إدارة أدوار OpenReplay من جانب الـ IdP، يمكنك إنشاء مجموعة تُسمّى OpenReplay-admin تضع فيها المستخدمين الذين يملكون امتياز المسؤول، ومجموعة تُسمّى OpenReplay-member تضع فيها المستخدمين الذين لديهم الدور ‘member’

ينبغي أن تكون لديك الآن جميع القيم المطلوبة للخطوة/القسم التالي.

إذا كنت تستخدم خطة Cloud dedicated الخاصة بنا، فانتقل إلى الكونسول ثم انقر على الـ 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)

ثم احفظ واخرج باستخدام :wq لكي تدخل التغييرات حيّز التنفيذ:

هذا اختياري، يمكنك إضافة شهادة x509 لمزيد من أمان SSO:

  1. شغّل هذا الأمر في خادمك أو في جهازك الآمن (يمكنك تغيير مدة صلاحية شهادتك حسب احتياجاتك):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout openreplay-sso.key -out openreplay-sso.crt
  1. في خادمك، شغّل openreplay -e
  2. ضمن قسم chalice، أضف متغيّرات البيئة التالية:
  • sp_crt: يجب أن تكون سلسلة نصية في سطر واحد، دون فواصل أسطر، من ملف ‘openreplay-sso.crt’ المُنشأ (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
  • sp_key: يجب أن تكون سلسلة نصية في سطر واحد، دون فواصل أسطر، من ملف ‘openreplay-sso.key’ المُنشأ
  1. احفظ واخرج باستخدام :wq لكي تدخل التغييرات حيّز التنفيذ
  2. أضف ملف ‘openreplay-sso.crt’ المُنشأ إلى تهيئة تطبيق موفّر الهوية الخاص بك

مثال باستخدام Okta

Section titled مثال باستخدام Okta
  1. سجّل الدخول إلى لوحة إدارة Okta الخاصة بك وانتقل إلى ‘Applications’ > ‘Applications’
  2. اضغط على ‘Create new app integration’، ثم اختر SAML 2.0 واضغط على ‘Next’
  3. عيّن ‘App Name’ إلى OpenReplay (يمكنك رفع هذه الأيقونة) لتطبيقك) ثم اضغط على ‘Next’
  4. عيّن:
  • Single sign on URL إلى YOUR_DOMAIN/api/sso/saml2/acs/
  • Audience URI (SP Entity ID) إلى YOUR_DOMAIN/api/sso/saml2/metadata/
  • Name ID format إلى EmailAddress
  1. عرّف الحقول أدناه في ‘Attribute Statements’:
  • tenantKey: التنسيق Basic وعيّن القيمة إلى TENANT_KEY، الموجودة في OpenReplay dashboard ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة إذا كنت تستخدم خطة Cloud Dedicated الخاصة بنا)
  • firstName: التنسيق Basic وعيّن القيمة إلى user.firstName
  • lastName: التنسيق Basic وعيّن القيمة إلى user.lastName
  • internalId: التنسيق Basic وعيّن القيمة إلى user.email
  1. عرّف الحقل أدناه في ‘Group Attribute Statement’:
  • groups: التنسيق Basic، الفلتر Match Regex، القيمة OpenReplay-* (أو يمكنك تحديد فلتر وتعبير نمطي مختلف حسب احتياجاتك)
  1. اضغط على Next، اختر ‘I’m an Okta customer adding an internal app’ و’This is an internal app that we have created’ ثم اضغط على ‘Finish’
  2. في علامة التبويب Sign On، مرّر إلى الأسفل واضغط على ‘View Setup Instructions’ لرؤية تهيئة SAML2 الخاصة بك

إذا كنت تستخدم خطة Cloud dedicated الخاصة بنا، فانتقل إلى الكونسول ثم انقر على الـ instance وعيّن المتغيّرات ضمن قسم SSO.

وإلا، إذا كنت تشغّل Enterprise Edition الخاص بنا:

  1. اتصل عبر SSH بتثبيت OpenReplay الخاص بك وشغّل openreplay -e
  2. ضمن قسم chalice، ألغِ التعليق ثم عيّن متغيّرات البيئة التالية:
  • idp_entityId: Identity Provider Issuer
  • idp_sso_url: Identity Provider Single Sign-On URL
  • idp_x509cert: شهادة X.509، يجب أن تكون سلسلة نصية في سطر واحد، دون فواصل أسطر (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
  • idp_name: Okta
  1. أخيرًا، احفظ واخرج باستخدام :wq لكي تدخل التغييرات حيّز التنفيذ

مثال باستخدام Azure Active Directory

Section titled مثال باستخدام Azure Active Directory
  1. سجّل الدخول إلى بوابة Azure الخاصة بك وانتقل إلى ‘Azure Active Directory’
  2. اضغط على ’+ Add’، اختر ‘Enterprise application’ ثم انقر على ‘Create your own application’
  3. عيّن ‘App Name’ إلى OpenReplay ثم اختر ‘Integrate any other application you don’t find in the gallery (Non-gallery)’ واضغط على ‘Create’
  4. انتقل إلى ‘Single sign-on’ في القائمة الجانبية اليسرى وعيّن القيم أدناه في كتلة ‘Basic SAML Configuration’:
  • Identifier (Entity ID) إلى YOUR_DOMAIN/api/sso/saml2/metadata/
  • Reply URL (Assertion Consumer Service URL) إلى YOUR_DOMAIN/api/sso/saml2/acs/
  • Logout URL إلى YOUR_DOMAIN/api/sso/saml2/sls/
  1. أضف الـ claims أدناه في كتلة ‘Attribute & Claims’ وتأكّد من ترك الحقل ‘Namespace’ فارغًا لكلٍّ منها:
  • tenantKey: عيّن القيمة إلى TENANT_KEY، الموجودة في OpenReplay dashboard ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة/الـ claim إذا كنت تستخدم خطة Cloud Dedicated الخاصة بنا)
  • firstName: عيّن القيمة إلى user.givenname
  • lastName: عيّن القيمة إلى user.surname
  • internalId: عيّن القيمة إلى user.mail
  1. انتقل إلى ‘Users and groups’ وعيّن المستخدمين الذين تختارهم للتطبيق

إذا كنت تستخدم خطة Cloud dedicated الخاصة بنا، فانتقل إلى الكونسول ثم انقر على الـ instance وعيّن المتغيّرات ضمن قسم SSO (تُوجد القيم في ‘Azure Active Directory’ > ‘OpenReplay’ > ‘Single sign-on’).

وإلا، إذا كنت تشغّل Enterprise Edition الخاص بنا:

  1. اتصل عبر SSH بتثبيت OpenReplay الخاص بك وشغّل openreplay -e
  2. ضمن قسم 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
  1. أخيرًا، احفظ واخرج باستخدام :wq لكي تدخل التغييرات حيّز التنفيذ

مثال باستخدام Google Workspace (المعروف سابقًا بـ G Suite)

Section titled مثال باستخدام Google Workspace (المعروف سابقًا بـ G Suite)

إضافة السمات المخصّصة:

Section titled إضافة السمات المخصّصة:
  1. في وحدة تحكم مسؤول Google، انتقل إلى ‘Directory’ > ‘Users’ > ‘More options’ > ‘Manage custom attributes’.
  2. انقر على ‘Add Custom Attribute’.
  3. عيّن الحقول التالية:
  • 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’
  1. انقر على ‘Add’
  2. لإضافة قيم إلى السمات المخصّصة الجديدة، انتقل إلى ‘Users’
  3. اختر المستخدم (المستخدمين) المطلوب
  4. انقر على ‘User information’ ثم عدّل قسم ‘OpenReplay’
  5. غيّر قيمة role إلى الدور المطلوب في ‘OpenReplay’ (ينبغي أن يطابق الدور الدور المُنشأ في OpenReplay dashboard ضمن ‘Preferences’ > ‘Roles’)
  6. غيّر قيمة adminPrivileges إلى ‘Yes’ إذا كان مسموحًا للمستخدم بامتلاك امتيازات المسؤول في OpenReplay
  7. انقر على ‘Save’
  1. سجّل الدخول إلى وحدة تحكم مسؤول Google الخاصة بك وانتقل إلى ‘Apps’
  2. اضغط على ‘Web and mobile apps’ ثم انقر على ‘Add app’ > ‘Add custom SAML app’
  3. عيّن ‘App name’ إلى OpenReplay (يمكنك رفع هذه الأيقونة لـ ‘App icon”) ثم اضغط على ‘Continue’
  4. انسخ ‘SSO URL’ و’Entity ID’ و’Certificate’ ثم انقر على ‘Continue’ (سنستخدم هذه القيم في الخطوة 11)
  5. عيّن:
  • ACS URL إلى YOUR_DOMAIN/api/sso/saml2/acs/TENANT_KEY/ (تُوجد TENANT_KEY في OpenReplay dashboard ضمن ‘Preferences’ > ‘Account’، ولكن إذا كنت تستخدم خطة Cloud Dedicated الخاصة بنا، فاترك قيمة tenantKey فارغة)
  • Entity ID إلى YOUR_DOMAIN/api/sso/saml2/metadata/
  • Name ID format إلى Email
  • Name ID إلى Basic information > Primary Email
  1. انقر على ‘Continue’ ثم اضغط على ‘Add Mapping’ لإضافة السمات أدناه:
  • Basic information > First Name -> firstName
  • Basic information > Last Name -> lastName
  • Basic information > Primary Email -> internalId
  • OpenReplay > groups -> groups
  1. انقر على ‘Finish’
  2. في وحدة تحكم مسؤول Google، انتقل إلى ‘Apps’ > ‘Web and mobile apps’ واختر ‘OpenReplay’
  3. انقر على ‘User access’، اختر ‘ON for everyone’ ثم اضغط على ‘Save’

إذا كنت تستخدم خطة Cloud dedicated الخاصة بنا، فانتقل إلى الكونسول ثم انقر على الـ instance وعيّن المتغيّرات ضمن قسم SSO.

وإلا، إذا كنت تشغّل Enterprise Edition الخاص بنا:

  1. اتصل عبر SSH بتثبيت OpenReplay الخاص بك وشغّل openreplay -e
  2. ضمن قسم chalice > env، ألغِ التعليق وعيّن السمات التالية باستخدام القيم من الخطوة 4:
  • idp_sso_url: الصق قيمة ‘SSO URL’
  • idp_entityId: الصق قيمة ‘Entity ID’
  • idp_x509cert: استخدم هذه الأداة لتنسيق الشهادة المنسوخة/المُنزَّلة
  • idp_name: عيّن القيمة إلى G-Suite
  • idp_tenantKey: TENANT_KEY الموجودة في OpenReplay dashboard ضمن ‘Preferences’ > ‘Account’
  1. أخيرًا، احفظ واخرج باستخدام :wq لكي تدخل التغييرات حيّز التنفيذ

مثال باستخدام JumpCloud

Section titled مثال باستخدام JumpCloud
  1. سجّل الدخول إلى لوحة إدارة JumpCloud الخاصة بك، وفي القائمة اليسرى، انتقل إلى ‘SSO’
  2. اضغط على ’+ Add New Application’، ثم اختر ‘Custom SAML App’
  3. عيّن ‘Display Label’ إلى OpenReplay (يمكنك رفع هذه الأيقونة لتطبيقك) ثم انتقل إلى علامة التبويب ‘SSO’
  4. عيّن:
  • IdP Entity ID إلى openreplay/TENANT_KEY (تُوجد TENANT_KEY في OpenReplay dashboard ضمن ‘Preferences’ > ‘Account’، ولكن إذا كنت تستخدم خطة Cloud Dedicated الخاصة بنا، فاترك قيمة tenantKey فارغة)
  • SP Entity ID إلى YOUR_DOMAIN/api/sso/saml2/metadata/
  • ACS URL إلى YOUR_DOMAIN/api/sso/saml2/acs/
  • 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-TENANT_KEY (لا يمكن تغيير هذه القيمة لاحقًا، وإذا كنت تستخدم خطة Cloud Dedicated الخاصة بنا، فاترك جزء tenantKey فارغًا)
  1. إذا اتّبعت تعليمات OpenReplay-Certificate، فيمكنك رفع ملف ‘openreplay-sso.crt’ المُنشأ بالضغط على ‘Upload SP Certificate’، وإلا فتجاهل هذه الخطوة
  2. عرّف الحقول أدناه في ‘USER ATTRIBUTE MAPPING’ بالضغط على زر ‘add attribute’:
  • firstName: عيّن القيمة إلى firstname
  • lastName: عيّن القيمة إلى lastname
  • internalId: عيّن القيمة إلى email
  • groups: اختياري، دور المستخدم وامتياز المسؤول في OpenReplay، إذا كانت قيمة ثابتة لجميع المستخدمين فينبغي تعريفها في الخطوة التالية، وإلا فعليك إضافة سمة نصية جديدة إلى مجموعة JumpCloud، أطلق عليها اسم OpenReplay-groups وعيّن القيمة إلى اسم الدور، ثم في تهيئة SSO، اختر ‘Custom User or Group Attribute’ وعيّن القيمة إلى OpenReplay-groups.
  1. عرّف الحقول أدناه في ‘CONSTANT ATTRIBUTES’ بالضغط على زر ‘add attribute’:
  • tenantKey: عيّن القيمة إلى TENANT_KEY، الموجودة في OpenReplay dashboard ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة إذا كنت تستخدم خطة Cloud Dedicated الخاصة بنا)
  • groups: اختياري، تجاهله إذا تم تعريفه في الخطوة السابقة، دور المستخدم وامتياز المسؤول في OpenReplay، وينبغي أن يطابق اسم دور مُعرَّف مسبقًا في OpenReplay (الافتراضي = member دون امتياز المسؤول)
  1. في هذه المرحلة، يمكنك الانتقال إلى علامة التبويب ‘User Groups’، واختيار مجموعة المستخدمين الذين سيتمتّعون بإمكانية الوصول إلى OpenReplay، أو يمكنك فعل ذلك لاحقًا
  2. اضغط على ‘activate’ و’continue’ في النافذة المنبثقة للتأكيد
  3. اضغط على أيقونة تطبيق OpenReplay الجديد، ثم في القائمة المنسدلة اليسرى ‘IDP Certificate Valid’ اختر ‘Download certificate’

إذا كنت تستخدم خطة Cloud dedicated الخاصة بنا، فانتقل إلى الكونسول ثم انقر على الـ instance وعيّن المتغيّرات ضمن قسم SSO.

وإلا، إذا كنت تشغّل Enterprise Edition الخاص بنا:

  1. اتصل عبر SSH بتثبيت OpenReplay الخاص بك وشغّل openreplay -e
  2. ضمن قسم chalice، ألغِ التعليق ثم عيّن متغيّرات البيئة التالية:
  • idp_entityId: openreplay/TENANT_KEY
  • idp_sso_url: https://sso.jumpcloud.com/saml2/openreplay-TENANT_KEY
  • idp_x509cert: الشهادة المُنزَّلة، يجب أن تكون سلسلة نصية في سطر واحد، دون فواصل أسطر (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
  • idp_name: JumpCloud
  1. أخيرًا، احفظ واخرج باستخدام :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 URLYOUR_DOMAIN/api/sso/scim/v2/
User unique identifier field nameemail
Support provisioning actionsPush new users, Push profile updates, Push groups
Authentication modeOAuth2
Access token endpointYOUR_DOMAIN/api/sso/scim/v2/token/
Authorization endpointYOUR_DOMAIN/api/sso/scim/v2/authorize/
Client idTENANT_KEY يمكن العثور على قيمته في الـ Dashboard، ضمن ‘Preferences’ > ‘Account’
Client secretيمكن العثور على قيمته بتنفيذ هذا الاستعلام في قاعدة بيانات Postgres الخاصة بك: SELECT tenant_secret FROM tenants WHERE tenant_key = 'TENANT_KEY';

بعد تعيين هذه القيم، اتّبع التوجيهات من لوحة تحكم موفّر الهوية الخاص بك لاختبار التكامل وتفويض التطبيق.

بعد ذلك، ستتمكّن من توفير هويات المستخدمين باستخدام Openreplay كموفّر خدمة SCIM.

ملاحظة: بينما يعمل Openreplay كموفّر خدمة SCIM، فإنه لا يدعم تقسيم المستخدمين إلى مجموعات متعدّدة (أي أن كل مستخدم يمكن أن ينتمي إلى مجموعة واحدة فقط). إذا لم يُحترم هذا، فقد يُسنَد المستخدم إلى عدد أقل أو أكثر من المشاريع مما هو متوقّع، وقد يكون لديه عدد أقل أو أكثر من الأذونات في تطبيق Openreplay.

مثال باستخدام Okta

Section titled مثال باستخدام Okta

في تطبيق SAML 2.0 الخاص بك، نفّذ ما يلي

  1. انقر على علامة التبويب General
  2. في قسم App Settings، انقر على Edit
  3. في حقل Provisioning، اختر SCIM، وانقر على Save

اختيار خيارات التوفير

Section titled اختيار خيارات التوفير
  1. انقر على علامة التبويب Provisioning. تظهر إعدادات اتصال SCIM ضمن Settings > Integration.
  2. في Settings > Integration، انقر على Edit.
  3. حدّد SCIM connector base URL واسم حقل المعرّف الفريد لمستخدميك المذكور أعلاه.
  4. ضمن Supported provisioning actions، اختر إجراءات التوفير المذكورة أعلاه.
  5. عيّن القائمة المنسدلة Authentication Mode إلى القيمة المذكورة أعلاه.
  6. عيّن Access token endpoint وAuthorization endpoint وClient id وClient secret كما هو مذكور أعلاه.
  7. انقر على Save.
  8. انقر على Authentiate application.
  9. في علامة التبويب Provisioning، انقر على To App.
  10. انقر على Edit، فعّل Create Users وUpdate User Attributes وDeactivate Users واحفظ التغييرات.
  • قبل البدء بالخطوة التالية، نوصي بإنشاء مجموعات جديدة في Okta، تُسمّى OpenReplay-admin تُدرج فيها المستخدمين الذين يملكون امتياز المسؤول في OpenReplay، وOpenReplay-members تُدرج فيها المستخدمين الذين لديهم الدور member في OpenReplay، …
  1. انتقل إلى علامة التبويب Push Groups، انقر على + Push Groups (بالاسم أو بالقاعدة)، اختر المجموعة التي تريد دفعها إلى OpenReplay، واضغط على save
  • في هذه المرحلة، تمثّل المجموعات المدفوعة الأدوار وامتياز المسؤول في OpenReplay، ولا تتضمّن قائمة المستخدمين المُوفَّرين لـ OpenReplay.
  1. انتقل إلى علامة التبويب Assignmets، وأضف المستخدمين بالطريقة التي تناسبك (باستخدام الأشخاص أو المجموعات)

تم استلام الاستجابة عبر http بدلاً من https

Section titled تم استلام الاستجابة عبر http بدلاً من https

هذا أمر شائع جدًا، ويعود إلى عدم وجود ترويسة ‘X-Forwarded-Proto’ في الطلب. لحل ذلك، تأكّد من أن موازن التحميل يُمرّر الترويسة بشكل صحيح إلى الواجهة الخلفية لـ OpenReplay، وشغّل openreplay -e، وضمن قسم ingress-nginx > config، ألغِ تعليق السطر use-forwarded-headers: true.