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 الخاصة بنا، فانتقل إلى وحدة التحكّم، ثم انقر على المثيل واضبط المتغيّرات ضمن قسم 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 لمزيد من أمان الدخول الموحّد:
- شغّل هذا الأمر في خادمك أو في جهازك الآمن (يمكنك تغيير مدة صلاحية شهادتك وفقًا لاحتياجاتك):
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 الخاصة بنا، فانتقل إلى وحدة التحكّم، ثم انقر على المثيل واضبط المتغيّرات ضمن قسم 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 Certificate، يجب أن يكون سلسلة نصية من سطر واحد، بدون فواصل أسطر (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
- 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’ (يجب عدم إضافة هذه السمة/الـ claim إذا كنت تستخدم خطة Cloud Dedicated الخاصة بنا)TENANT_KEY - firstName: اضبط القيمة على
user.givenname - lastName: اضبط القيمة على
user.surname - internalId: اضبط القيمة على
user.mail
- انتقل إلى ‘Users and groups’ وعيّن المستخدمين المحدّدين للتطبيق
إذا كنت تستخدم خطة Cloud dedicated الخاصة بنا، فانتقل إلى وحدة التحكّم، ثم انقر على المثيل واضبط المتغيّرات ضمن قسم 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 Certificate، يجب أن يكون سلسلة نصية من سطر واحد، بدون فواصل أسطر (يمكنك استخدام هذه الأداة لتنسيق قيمتك)
- 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 الخاصة بنا، فانتقل إلى وحدة التحكّم، ثم انقر على المثيل واضبط المتغيّرات ضمن قسم 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 الخاصة بنا، فانتقل إلى وحدة التحكّم، ثم انقر على المثيل واضبط المتغيّرات ضمن قسم 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 (نظام إدارة الهوية عبر النطاقات)
Section titled توفير SCIM (نظام إدارة الهوية عبر النطاقات)يدعم 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.
- انقر على Authenticate 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.