إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
إنبوابة التطبيقهي موازن تحميل نسبة استخدام الشبكة على الويب التي تتيح لك إدارة نسبة استخدام الشبكة إلى تطبيقات الويب الخاصة بك. يتيح لك استخدام Application Gateway مع SignalR Service القيام بما يلي:
- حماية تطبيقاتك من الثغرات الأمنية الشائعة على الويب.
- احصل على موازنة التحميل على مستوى التطبيق للتطبيقات القابلة للتطوير والمتاحة بشكل كبير.
- إعداد الأمان من طرف إلى طرف.
- تخصيص اسم المجال.
تحتوي هذه المقالة على جزأين،
- يوضح الجزء الأول كيفية تكوين بوابة التطبيق بحيث يمكن للعملاء الوصول إلى SignalR من خلال بوابة التطبيق.
- يوضح الجزء الثاني كيفية تأمين SignalR Service عن طريق إضافة التحكم في الوصول إلى SignalR Service والسماح فقط بنسبة استخدام الشبكة من بوابة التطبيق.
تظهر سلسلة الاتصال الأولية في هذه المقالة لأغراض العرض التوضيحي فقط. في بيئات الإنتاج، قم دائما بحماية مفاتيح الوصول الخاصة بك. استخدم Azure Key Vault لإدارة مفاتيحك وتدويرها بأمان وتأمين سلسلة الاتصال باستخدام معرف Microsoft Entra وتخويل الوصول باستخدام معرف Microsoft Entra.
إعداد بوابة التطبيق وتكوينها
إنشاء مثيل خدمة SignalR
- اتبع المقالة وأنشئ مثيل SignalR Service ASRS1
إنشاء مثيل 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
في علامة التبويب Backends ، حدد Add a backend pool:
- الاسم: أدخل signalr لتجمع الواجهة الخلفية لمورد SignalR Service.
- أهداف الخلفية الهدف: اسم المضيف لمثيل خدمة SignalR ASRS1، على سبيل المثال
asrs1.service.signalr.net - حدد Next: Configuration
في علامة التبويب 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 ومجال العميل عليه مع سيناريو الإنتاج.
- قبول القيم الافتراضية للإعدادات الأخرى في علامة التبويب "المستمع"
في علامة التبويب Backend targets ، استخدم القيم التالية:
نوع الهدف: تجمع الخلفية
هدف الواجهة الخلفية: حدد signalr الذي أنشأناه سابقا
إعدادات الواجهة الخلفية: حدد إضافة جديد لإضافة إعداد جديد.
- اسم إعدادات الخلفية: mySetting
- بروتوكول الواجهة الخلفية: HTTPS
- استخدام شهادة المرجع المصدق المعروفة: نعم
- تجاوز باسم مضيف جديد: نعم
- تجاوز اسم المضيف: اختر اسم المضيف من هدف الواجهة الخلفية
- يحتفظ الآخرون بالقيم الافتراضية
مراجعة وإنشاء AG1
تكوين التحقيق الصحي لبوابة التطبيق
عند إنشاء AG1، انتقل إلى علامة التبويب Health probes ضمن قسم Settings في المدخل، وغير مسار فحص السلامة إلى/api/health
الاختبار السريع
حاول مع طلب
https://asrs1.service.signalr.net/clientعميل غير صالح وإرجاع 400 مع رسالة الخطأ معلمة الاستعلام "المركز" مطلوب. وهذا يعني أن الطلب وصل إلى SignalR Service وقم بالتحقق من صحة الطلب.curl -v https://asrs1.service.signalr.net/clientreturns
< HTTP/1.1 400 Bad Request < ... < 'hub' query parameter is required.انتقل إلى علامة التبويب Overview في AG1، واكتشف عنوان IP العام للواجهة الأمامية
قم بزيارة نقطة النهاية الصحية من خلال AG1
http://<frontend-public-IP-address>/client، كما أنها ترجع 400 مع معلمة استعلام رسالة الخطأ "hub". وهذا يعني أن الطلب انتقل بنجاح من خلال بوابة التطبيق إلى خدمة SignalR وقم بالتحقق من صحة الطلب.curl -I http://<frontend-public-IP-address>/clientreturns
< 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مقطع. - نسخ سلسلة الاتصال
-
نقطة نهاية العميل: أدخل عنوان URL باستخدام عنوان IP العام للواجهة الأمامية ل AG1، على سبيل المثال
- في علامة التبويب سلاسل الاتصال في ASRS1
استنساخ مستودع 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 Service كخدمة خلفية لبوابة التطبيق، يمكننا استدعاء SignalR Service مباشرة من الشبكة العامة، أو من خلال بوابة التطبيق.
في هذا القسم، لنقم بتكوين SignalR Service لرفض جميع نسبة استخدام الشبكة من الشبكة العامة وقبول نسبة استخدام الشبكة فقط من بوابة التطبيق.
تكوين خدمة SignalR
لنقم بتكوين SignalR Service للسماح بالوصول الخاص فقط. يمكنك العثور على مزيد من التفاصيل في استخدام نقطة النهاية الخاصة لخدمة SignalR.
انتقل إلى مثيل SignalR Service ASRS1 في المدخل.
انتقل إلى علامة التبويب Networking :
في علامة التبويب الوصول العام: تغيير الوصول إلى الشبكة العامة إلى معطل وحفظ، الآن لم تعد قادرا على الوصول إلى SignalR Service من الشبكة العامة
في علامة تبويب الوصول الخاص، حدد + نقطة النهاية الخاصة:
- في علامة التبويب Basics :
- الاسم: PE1
- اسم واجهة الشبكة: PE1-nic
- المنطقة: تأكد من اختيار نفس المنطقة مثل بوابة التطبيق
- حدد Next: Resources
- على علامة التبويب "الموارد "
- الاحتفاظ بالقيم الافتراضية
- حدد Next: Virtual Network
- على علامة تبويب الشبكة الظاهرية
- الشبكة الظاهرية: حدد VN1 الذي تم إنشاؤه مسبقا
- الشبكة الفرعية: حدد VN1/myBackendSubnet التي تم إنشاؤها مسبقا
- يحتفظ الآخرون بالإعدادات الافتراضية
- حدد Next: DNS
- على علامة التبويب DNS
- التكامل مع منطقة DNS الخاصة: نعم
- مراجعة نقطة النهاية الخاصة وإنشاءها
- في علامة التبويب Basics :
تحديث تجمع الواجهة الخلفية لبوابة التطبيق
نظرا لأنه تم إعداد 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/clientreturns
< HTTP/1.1 403 Forbiddenقم بزيارة نقطة النهاية من خلال AG1
http://<frontend-public-IP-address>/client، وترجع 400 مع معلمة استعلام رسالة الخطأ 'hub'مطلوبة. وهذا يعني أن الطلب انتقل بنجاح من خلال بوابة التطبيق إلى خدمة SignalR.curl -I http://<frontend-public-IP-address>/clientreturns
< 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 تلقائيا.
الخطوات التالية
الآن، لقد نجحت في إنشاء تطبيق دردشة في الوقت الحقيقي باستخدام SignalR Service واستخدمت Application Gateway لحماية تطبيقاتك وإعداد الأمان من طرف إلى طرف. تعرف على المزيد حول SignalR Service.