SSO

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

SSO

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

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

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

تهيئة الدخول الموحّد (SSO) (SAML2)

Section titled تهيئة الدخول الموحّد (SSO) (SAML2)

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

وإلا، إذا كنت تشغّل إصدار Enterprise لدينا، فشغّل 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بادئات اسم مجموعة موفّر الهوية (اختياري، الافتراضي=OpenReplay-,or-)

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

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

  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 ضمن ‘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 لدينا، فانتقل إلى الكونسول ثم انقر على المثيل وعيّن المتغيّرات ضمن قسم SSO.

وإلا، إذا كنت تشغّل إصدار Enterprise لدينا:

  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 ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة/الـ claim إذا كنت تستخدم خطة Cloud Dedicated لدينا)
  • firstName: عيّن القيمة إلى user.givenname
  • lastName: عيّن القيمة إلى user.surname
  • internalId: عيّن القيمة إلى user.mail
  1. انتقل إلى ‘Users and groups’ وعيّن المستخدمين الذين تختارهم للتطبيق

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

وإلا، إذا كنت تشغّل إصدار Enterprise لدينا:

  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 Admin، انتقل إلى ‘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 ضمن ‘Preferences’ > ‘Roles’)
  6. غيّر قيمة adminPrivileges إلى ‘Yes’ إذا كان مسموحًا للمستخدم بامتلاك امتيازات المسؤول في OpenReplay
  7. انقر على ‘Save’
  1. سجّل الدخول إلى وحدة تحكم Google Admin وانتقل إلى ‘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 ضمن ‘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 Admin، انتقل إلى ‘Apps’ > ‘Web and mobile apps’ واختر ‘OpenReplay’
  3. انقر على ‘User access’، اختر ‘ON for everyone’ ثم اضغط على ‘Save’

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

وإلا، إذا كنت تشغّل إصدار Enterprise لدينا:

  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 ضمن ‘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 ضمن ‘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، فيمكنك رفع ملف ‘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 ضمن ‘Preferences’ > ‘Account’ (يجب عدم إضافة هذه السمة إذا كنت تستخدم خطة Cloud Dedicated لدينا)
  • groups: اختياري، تجاهله إذا تم تعريفه في الخطوة السابقة، دور المستخدم وامتياز المسؤول في OpenReplay، ويجب أن يطابق اسم الدور المعرَّف مسبقًا في OpenReplay (الافتراضي = member دون امتياز المسؤول)
  1. في هذه المرحلة، يمكنك الانتقال إلى علامة التبويب ‘User Groups’، واختيار مجموعة المستخدمين الذين سيكون لديهم وصول إلى OpenReplay، أو يمكنك القيام بذلك لاحقًا
  2. اضغط على ‘activate’ و ‘continue’ في النافذة المنبثقة للتأكيد
  3. اضغط على أيقونة تطبيق OpenReplay الجديد، ثم في القائمة المنسدلة اليسرى ‘IDP Certificate Valid’ اختر ‘Download certificate’

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

وإلا، إذا كنت تشغّل إصدار Enterprise لدينا:

  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.

للتكامل مع خدمة 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 يمكن العثور على قيمته في لوحة التحكم، ضمن ‘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’ في الطلب. ولحل ذلك، تأكّد من أن موزّع الحمل (Load Balancer) يُمرّر الترويسة بشكل صحيح إلى الواجهة الخلفية لـ OpenReplay، وشغّل openreplay -e، وضمن قسم ingress-nginx > config، أزل التعليق عن السطر use-forwarded-headers: true.