مشاركة عبر


كيفية استخدام خدمة Azure SignalR مع بوابة تطبيق Azure

إنبوابة التطبيقهي موازن تحميل نسبة استخدام الشبكة على الويب التي تتيح لك إدارة نسبة استخدام الشبكة إلى تطبيقات الويب الخاصة بك. يتيح لك استخدام Application Gateway مع SignalR Service القيام بما يلي:

  • حماية تطبيقاتك من الثغرات الأمنية الشائعة على الويب.
  • احصل على موازنة التحميل على مستوى التطبيق للتطبيقات القابلة للتطوير والمتاحة بشكل كبير.
  • إعداد الأمان من طرف إلى طرف.
  • تخصيص اسم المجال.

تحتوي هذه المقالة على جزأين،

  • يوضح الجزء الأول كيفية تكوين بوابة التطبيق بحيث يمكن للعملاء الوصول إلى SignalR من خلال بوابة التطبيق.
  • يوضح الجزء الثاني كيفية تأمين SignalR Service عن طريق إضافة التحكم في الوصول إلى SignalR Service والسماح فقط بنسبة استخدام الشبكة من بوابة التطبيق.

رسم تخطيطي يوضح بنية استخدام SignalR Service مع Application Gateway.

تظهر سلسلة الاتصال الأولية في هذه المقالة لأغراض العرض التوضيحي فقط. في بيئات الإنتاج، قم دائما بحماية مفاتيح الوصول الخاصة بك. استخدم Azure Key Vault لإدارة مفاتيحك وتدويرها بأمان وتأمين سلسلة الاتصال باستخدام معرف Microsoft Entra وتخويل الوصول باستخدام معرف Microsoft Entra.

إعداد بوابة التطبيق وتكوينها

إنشاء مثيل خدمة SignalR

إنشاء مثيل Application Gateway

أنشئ من المدخل مثيل Application Gateway AG1:

  • في مدخل Microsoft Azure، ابحث عن Application Gateway وCreate.

  • في علامة التبويب Basics ، استخدم هذه القيم لإعدادات بوابة التطبيق التالية:

    • الاشتراك ومجموعة الموارد والمنطقة: نفس ما تختاره لخدمة SignalR

    • اسم بوابة التطبيق: AG1

    • الشبكة الظاهرية، حدد Create new، وفي نافذة Create virtual network التي تفتح، أدخل القيم التالية لإنشاء الشبكة الظاهرية والشبكتين الفرعيتين، واحدة لبوابة التطبيق، وأخرى لخوادم الواجهة الخلفية.

      • الاسم: أدخل VN1 لاسم الشبكة الظاهرية.

      • الشبكات الفرعية: تحديث شبكة الشبكات الفرعية مع أقل من شبكتين فرعيتين

        اسم الشبكة الفرعية نطاق العنوان إشعار
        myAGSubnet (نطاق العنوان) الشبكة الفرعية لبوابة التطبيق. قد لا تحتوي الشبكة الفرعية لبوابة التطبيق إلا على بوابات تطبيق ما. لا يسمح بأي موارد أخرى.
        "myBackendSubnet" (نطاق عنوان آخر) الشبكة الفرعية لمثيل Azure SignalR.
    • اقبل القيم الافتراضية للإعدادات الأخرى ثم حدد Next: Frontends

  • في علامة التبويب الواجهات الأمامية :

    • نوع عنوان IP للواجهة الأمامية: عام.
    • حدد "Add new" لـ عنوان IP العام وأدخل myAGPublicIPAddress لاسم عنوان IP العام، ثم حدد "OK".
    • حدد Next: Backendsلقطة شاشة لإنشاء مثيل Application Gateway مع علامة التبويب Frontends.
  • في علامة التبويب Backends ، حدد Add a backend pool:

    • الاسم: أدخل signalr لتجمع الواجهة الخلفية لمورد SignalR Service.
    • أهداف الخلفية الهدف: اسم المضيف لمثيل خدمة SignalR ASRS1، على سبيل المثالasrs1.service.signalr.net
    • حدد Next: Configuration

    لقطة شاشة لإعداد تجمع الواجهة الخلفية لبوابة التطبيق لخدمة SignalR.

  • في علامة التبويب Configuration ، حدد Add a routing rule في عمود Routing rules :

    • اسم القاعدة: myRoutingRule

    • الأولوية: 1

    • من علامة التبويب "Listener" داخل نافذة "Add a routing rule"، أدخل القيم التالية لوحدة الإصغاء:

      • "Listener name": أدخل myListener لاسم وحدة الإصغاء.
      • "Frontend IP": حدد Public لاختيار عنوان IP العام الذي أنشأته للواجهة الأمامية.
      • البروتوكول: HTTP
        • نستخدم بروتوكول الواجهة الأمامية HTTP على Application Gateway في هذه المقالة لتبسيط العرض التوضيحي ومساعدتك على البدء بسهولة. ولكن في الواقع، قد تحتاج إلى تمكين HTTPs ومجال العميل عليه مع سيناريو الإنتاج.
      • قبول القيم الافتراضية للإعدادات الأخرى في علامة التبويب "المستمع"لقطة شاشة لإعداد علامة تبويب وحدة استماع قاعدة توجيه بوابة التطبيق لخدمة SignalR.
    • في علامة التبويب Backend targets ، استخدم القيم التالية:

      • نوع الهدف: تجمع الخلفية

      • هدف الواجهة الخلفية: حدد signalr الذي أنشأناه سابقا

      • إعدادات الواجهة الخلفية: حدد إضافة جديد لإضافة إعداد جديد.

        • اسم إعدادات الخلفية: mySetting
        • بروتوكول الواجهة الخلفية: HTTPS
        • استخدام شهادة المرجع المصدق المعروفة: نعم
        • تجاوز باسم مضيف جديد: نعم
        • تجاوز اسم المضيف: اختر اسم المضيف من هدف الواجهة الخلفية
        • يحتفظ الآخرون بالقيم الافتراضية

        لقطة شاشة لإعداد إعداد الواجهة الخلفية لبوابة التطبيق لخدمة SignalR.

      لقطة شاشة لإنشاء أهداف خلفية لبوابة التطبيق.

  • مراجعة وإنشاء AG1لقطة شاشة لمراجعة وإنشاء مثيل بوابة التطبيق.

تكوين التحقيق الصحي لبوابة التطبيق

عند إنشاء AG1، انتقل إلى علامة التبويب Health probes ضمن قسم Settings في المدخل، وغير مسار فحص السلامة إلى/api/health

لقطة شاشة لإعداد فحص صحة الواجهة الخلفية لبوابة التطبيق لخدمة SignalR.

الاختبار السريع

  • حاول مع طلب https://asrs1.service.signalr.net/client عميل غير صالح وإرجاع 400 مع رسالة الخطأ معلمة الاستعلام "المركز" مطلوب. وهذا يعني أن الطلب وصل إلى SignalR Service وقم بالتحقق من صحة الطلب.

    curl -v https://asrs1.service.signalr.net/client
    

    returns

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    
  • انتقل إلى علامة التبويب Overview في AG1، واكتشف عنوان IP العام للواجهة الأمامية

    لقطة شاشة لنقطة نهاية صحة SignalR Service للاختبار السريع من خلال بوابة التطبيق.

  • قم بزيارة نقطة النهاية الصحية من خلال AG1http://<frontend-public-IP-address>/client، كما أنها ترجع 400 مع معلمة استعلام رسالة الخطأ "hub". وهذا يعني أن الطلب انتقل بنجاح من خلال بوابة التطبيق إلى خدمة SignalR وقم بالتحقق من صحة الطلب.

    curl -I http://<frontend-public-IP-address>/client
    

    returns

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    

تشغيل الدردشة من خلال بوابة التطبيق

الآن، يمكن لحركة المرور الوصول إلى SignalR Service من خلال بوابة التطبيق. يمكن للعميل استخدام عنوان IP العام لبوابة التطبيق أو اسم المجال المخصص للوصول إلى المورد. دعونا نستخدم تطبيق الدردشة هذا كمثال. لنبدأ بتشغيله محليا.

تظهر سلسلة الاتصال الأولية في هذه المقالة لأغراض العرض التوضيحي فقط. في بيئات الإنتاج، قم دائما بحماية مفاتيح الوصول الخاصة بك. استخدم Azure Key Vault لإدارة مفاتيحك وتدويرها بأمان وتأمين سلسلة الاتصال باستخدام معرف Microsoft Entra وتخويل الوصول باستخدام معرف Microsoft Entra.

  • أولا دعونا نحصل على سلسلة الاتصال ASRS1

    • في علامة التبويب سلاسل الاتصال في ASRS1
      • نقطة نهاية العميل: أدخل عنوان URL باستخدام عنوان IP العام للواجهة الأمامية ل AG1، على سبيل المثال http://20.88.8.8. إنه مولد سلسلة الاتصال عند استخدام وكلاء عكسيين، ولا يتم الاحتفاظ بالقيمة عند الرجوع إلى علامة التبويب هذه في المرة القادمة. عند إدخال القيمة، يقوم سلسلة الاتصال بإلحاق ClientEndpoint مقطع.
      • نسخ سلسلة الاتصال لقطة شاشة للحصول على سلسلة الاتصال لخدمة SignalR مع نقطة نهاية العميل.
  • استنساخ مستودع GitHub https://github.com/aspnet/AzureSignalR-samples

  • انتقل إلى مجلد samples/Chatroom:

  • قم بتعيين سلسلة الاتصال المنسخة وتشغيل التطبيق محليا، يمكنك أن ترى أن هناك قسما ClientEndpoint في ConnectionString.

    cd samples/Chatroom
    dotnet restore
    dotnet user-secrets set Azure:SignalR:ConnectionString "<copied-connection-string-with-client-endpoint>"
    dotnet run
    
  • افتح http://localhost:5000 من المستعرض واستخدم F12 لعرض تتبعات الشبكة، يمكنك أن ترى أن اتصال WebSocket تم إنشاؤه من خلال AG1

    لقطة شاشة لتشغيل تطبيق الدردشة محليا مع بوابة التطبيق وخدمة SignalR.

خدمة SignalR الآمنة

في القسم السابق، قمنا بنجاح بتكوين SignalR Service كخدمة خلفية لبوابة التطبيق، يمكننا استدعاء SignalR Service مباشرة من الشبكة العامة، أو من خلال بوابة التطبيق.

في هذا القسم، لنقم بتكوين SignalR Service لرفض جميع نسبة استخدام الشبكة من الشبكة العامة وقبول نسبة استخدام الشبكة فقط من بوابة التطبيق.

تكوين خدمة SignalR

لنقم بتكوين SignalR Service للسماح بالوصول الخاص فقط. يمكنك العثور على مزيد من التفاصيل في استخدام نقطة النهاية الخاصة لخدمة SignalR.

  • انتقل إلى مثيل SignalR Service ASRS1 في المدخل.

  • انتقل إلى علامة التبويب Networking :

    • في علامة التبويب الوصول العام: تغيير الوصول إلى الشبكة العامة إلى معطل وحفظ، الآن لم تعد قادرا على الوصول إلى SignalR Service من الشبكة العامة

      لقطة شاشة لتعطيل الوصول العام لخدمة SignalR.

    • في علامة تبويب الوصول الخاص، حدد + نقطة النهاية الخاصة:

      • في علامة التبويب Basics :
        • الاسم: PE1
        • اسم واجهة الشبكة: PE1-nic
        • المنطقة: تأكد من اختيار نفس المنطقة مثل بوابة التطبيق
        • حدد Next: Resources
      • على علامة التبويب "الموارد "
        • الاحتفاظ بالقيم الافتراضية
        • حدد Next: Virtual Network
      • على علامة تبويب الشبكة الظاهرية
        • الشبكة الظاهرية: حدد VN1 الذي تم إنشاؤه مسبقا
        • الشبكة الفرعية: حدد VN1/myBackendSubnet التي تم إنشاؤها مسبقا
        • يحتفظ الآخرون بالإعدادات الافتراضية
        • حدد Next: DNS
      • على علامة التبويب DNS
        • التكامل مع منطقة DNS الخاصة: نعم
      • مراجعة نقطة النهاية الخاصة وإنشاءها

تحديث تجمع الواجهة الخلفية لبوابة التطبيق

نظرا لأنه تم إعداد Application Gateway قبل وجود نقطة نهاية خاصة لاستخدامها، نحتاج إلى تحديث تجمع الواجهة الخلفية حتى ينظر إلى منطقة DNS الخاصة ويكتشف أنه يجب توجيه حركة المرور إلى نقطة النهاية الخاصة بدلا من العنوان العام. نقوم بالتحديث عن طريق تعيين FQDN الخلفية إلى قيمة أخرى ثم تغييرها مرة أخرى.

انتقل إلى علامة التبويب Backend pools ل AG1، وحدد signalr:

  • الخطوة 1: تغيير الهدف asrs1.service.signalr.net إلى قيمة أخرى، على سبيل المثال، x.service.signalr.net، وحدد حفظ
  • الخطوة 2: تغيير الهدف مرة أخرى إلى asrs1.service.signalr.net

الاختبار السريع

  • الآن دعونا نزور https://asrs1.service.signalr.net/client مرة أخرى. مع تعطيل الوصول العام، فإنه يرجع 403 بدلا من ذلك.

    curl -v https://asrs1.service.signalr.net/client
    

    returns

    < HTTP/1.1 403 Forbidden
    
  • قم بزيارة نقطة النهاية من خلال AG1http://<frontend-public-IP-address>/client، وترجع 400 مع معلمة استعلام رسالة الخطأ 'hub'مطلوبة. وهذا يعني أن الطلب انتقل بنجاح من خلال بوابة التطبيق إلى خدمة SignalR.

    curl -I http://<frontend-public-IP-address>/client
    

    returns

    < HTTP/1.1 400 Bad Request
    < ...
    <
    'hub' query parameter is required.
    

الآن إذا قمت بتشغيل تطبيق الدردشة محليا مرة أخرى، فسترى رسائل Failed to connect to .... The server returned status code '403' when status code '101' was expected.الخطأ ، ويرجع ذلك إلى تعطيل الوصول العام بحيث تكون اتصالات خادم المضيف المحلي أكثر قدرة على الاتصال بخدمة SignalR.

دعونا ننشر تطبيق الدردشة في نفس VNet مع ASRS1 بحيث يمكن للدردشة التحدث مع ASRS1.

نشر تطبيق الدردشة إلى Azure

  • في مدخل Microsoft Azure، ابحث عن App services وCreateWeb App.

  • في علامة التبويب Basics ، استخدم هذه القيم لإعدادات تطبيق الويب التالية:

    • الاشتراك ومجموعة الموارد والمنطقة: نفس ما تختاره لخدمة SignalR
    • الاسم: WA1
    • نشر: التعليمات البرمجية
    • مكدس وقت التشغيل: .NET 6 (LTS)
    • نظام التشغيل: Linux
    • المنطقة: تأكد من أنها نفس ما تختاره لخدمة SignalR
    • حدد Next: Deployment، واحتفظ بالكل كإعداد افتراضي، وحدد Next:Networking
  • على علامة التبويب " شبكة الاتصال "

    • تمكين حقن الشبكة: حدد تشغيل
    • الشبكة الظاهرية: حدد VN1 الذي أنشأناه سابقا
    • تمكين تكامل الشبكة الظاهرية: تشغيل
    • الشبكة الفرعية الصادرة: إنشاء شبكة فرعية جديدة
    • حدد Review + create

الآن دعونا ننشر تطبيق الدردشة الخاص بنا إلى Azure. ادناه

نستخدم Azure CLI لنشر تطبيق الدردشة الخاص بنا إلى Azure. تحقق من التشغيل السريع: نشر تطبيق ويب ASP.NET لبيئات النشر الأخرى التي يتم نشرها في Azure.

ضمن نماذج المجلد/Chatroom، قم بتشغيل الأوامر أدناه:

# Build and publish the assemblies to publish folder
dotnet publish --os linux -o publish
# zip the publish folder as app.zip
cd publish
zip -r app.zip .
# use az CLI to deploy app.zip to our webapp
az login
az account set -s <your-subscription-name-used-to-create-WA1>
az webapp deploy -g <resource-group-of-WA1> -n WA1 --src-path app.zip

الآن يتم نشر تطبيق الويب، دعنا ننتقل إلى مدخل WA1 ونقم بإجراء التحديثات التالية:

  • في علامة التبويب تكوين:

    • إعدادات التطبيق الجديدة:

      الاسم القيمة‬
      WEBSITE_DNS_SERVER 168.63.129.16
      WEBSITE_VNET_ROUTE_ALL 1
    • سلسلة الاتصال الجديدة:

      الاسم القيمة‬ نوع
      سلسلة اتصالات AzureSignalR سلسلة الاتصال المنسخة بقيمة ClientEndpoint حدد مخصص

    لقطة شاشة لتكوين سلسلة الاتصال تطبيق الويب.

  • في علامة التبويب إعدادات TLS/SSL:

    • HTTPS فقط: إيقاف التشغيل. لتبسيط العرض التوضيحي، استخدمنا بروتوكول الواجهة الأمامية HTTP على بوابة التطبيق. لذلك، نحتاج إلى إيقاف تشغيل هذا الخيار لتجنب تغيير عنوان URL HTTP إلى HTTPs تلقائيا.
  • انتقل إلى علامة التبويب نظرة عامة واحصل على عنوان URL ل WA1.

  • احصل على عنوان URL، واستبدل نظام https ب http، على سبيل المثال، http://wa1.azurewebsites.net، افتح عنوان URL في المستعرض، والآن يمكنك بدء الدردشة! استخدم F12 لفتح تتبعات الشبكة، ويمكنك مشاهدة إنشاء اتصال SignalR من خلال AG1.

    إشعار

    في بعض الأحيان تحتاج إلى تعطيل إعادة توجيه https التلقائي للمستعرض وذاكرة التخزين المؤقت للمستعرض لمنع عنوان URL من إعادة التوجيه إلى HTTPS تلقائيا.

    لقطة شاشة لتشغيل تطبيق الدردشة في Azure مع بوابة التطبيق وخدمة SignalR.

الخطوات التالية

الآن، لقد نجحت في إنشاء تطبيق دردشة في الوقت الحقيقي باستخدام SignalR Service واستخدمت Application Gateway لحماية تطبيقاتك وإعداد الأمان من طرف إلى طرف. تعرف على المزيد حول SignalR Service.