سلاسل الاتصال في خدمة Azure SignalR
يحتوي سلسلة الاتصال على معلومات حول كيفية الاتصال بخدمة Azure SignalR. في هذه المقالة، ستتعرف على أساسيات سلسلة الاتصال وكيفية تكوين واحد في التطبيق الخاص بك.
هام
تظهر سلسلة الاتصال الأولية في هذه المقالة لأغراض العرض التوضيحي فقط.
يتضمن سلسلة الاتصال معلومات التخويل المطلوبة لتطبيقك للوصول إلى خدمة Azure SignalR. مفتاح الوصول داخل سلسلة الاتصال يشبه كلمة مرور الجذر للخدمة الخاصة بك. في بيئات الإنتاج، قم دائما بحماية مفاتيح الوصول الخاصة بك. استخدم Azure Key Vault لإدارة مفاتيحك وتدويرها بأمان وتأمين سلسلة الاتصال باستخدام معرف Microsoft Entra وتخويل الوصول باستخدام معرف Microsoft Entra.
تجنب توزيع مفاتيح الوصول إلى مستخدمين آخرين، أو ترميزها ترميزًا ثابتًا، أو حفظها في أي مكان في نص عادي يمكن للآخرين الوصول إليه. قم بتدوير المفاتيح الخاصة بك إذا كنت تعتقد أنها قد تعرضت للخطر.
ما هو سلسلة الاتصال
عندما يحتاج أحد التطبيقات إلى الاتصال بخدمة Azure SignalR، فإنه يحتاج إلى المعلومات التالية:
- نقطة نهاية HTTP لمثيل خدمة Azure SignalR
- طريقة المصادقة باستخدام نقطة نهاية الخدمة
يحتوي سلسلة الاتصال على مثل هذه المعلومات.
كيف يبدو سلسلة الاتصال
يتكون سلسلة الاتصال من سلسلة من أزواج المفاتيح/القيم مفصولة بفواصل منقوطة (;). تستخدم السلسلة علامة التساوي (=) لتوصيل كل مفتاح وقيمته. المفاتيح ليست حساسة لحالة الأحرف.
قد يبدو سلسلة الاتصال النموذجي مثل هذا المثال:
Endpoint=https://<resource_name>.service.signalr.net;AccessKey=<access_key>;Version=1.0;
يحتوي سلسلة الاتصال على:
-
Endpoint=https://<resource_name>.service.signalr.net
: عنوان URL لنقطة النهاية للمورد. -
AccessKey=<access_key>
: المفتاح للمصادقة مع الخدمة. عند تحديد مفتاح وصول في سلسلة الاتصال، يستخدمه Azure SignalR Service SDK لإنشاء رمز مميز تتحقق الخدمة من صحته. -
Version
: إصدار سلسلة الاتصال. القيمة الافتراضية هي1.0
.
يسرد الجدول التالي كافة الأسماء الصالحة لأزواج المفاتيح/القيم في سلسلة الاتصال.
مفتاح | الوصف | مطلوب | القيمة الافتراضية | مثال للقيمة |
---|---|---|---|---|
Endpoint |
عنوان URL لمثيل خدمة Azure SignalR. | نعم | غير قابل للتطبيق | https://foo.service.signalr.net |
Port |
المنفذ الذي يستمع إليه مثيل خدمة Azure SignalR. | لا |
80 أو 443 ، اعتمادا على مخطط URI لنقطة النهاية |
8080 |
Version |
إصدار سلسلة الاتصال. | لا | 1.0 |
1.0 |
ClientEndpoint |
URI للوكيل العكسي، مثل Azure Application Gateway أو Azure API Management. | لا | null |
https://foo.bar |
AuthType |
نوع المصادقة. بشكل افتراضي، تستخدم AccessKey الخدمة لتخويل الطلبات. إنها ليست حساسة لحالة الأحرف. |
لا | null |
Azure ، ، azure.msi azure.app |
استخدام مفتاح الوصول
تستخدم الخدمة أسلوب المصادقة المحلي عند AuthType
تعيين إلى null
.
مفتاح | الوصف | مطلوب | القيمة الافتراضية | مثال للقيمة |
---|---|---|---|---|
AccessKey |
سلسلة المفاتيح، بتنسيق Base64، لإنشاء رمز مميز للوصول. | نعم | null |
ABCDEFGHIJKLMNOPQRSTUVWEXYZ0123456789+=/ |
استخدام معرف Microsoft Entra
تستخدم الخدمة أسلوب مصادقة Microsoft Entra عند AuthType
تعيين إلى azure
أو azure.app
أو azure.msi
.
مفتاح | الوصف | مطلوب | القيمة الافتراضية | مثال للقيمة |
---|---|---|---|---|
ClientId |
GUID لتطبيق Azure أو هوية Azure. | لا | null |
00000000-0000-0000-0000-000000000000 |
TenantId |
GUID لمؤسسة في معرف Microsoft Entra. | لا | null |
00000000-0000-0000-0000-000000000000 |
ClientSecret |
كلمة مرور مثيل تطبيق Azure. | لا | null |
***********************.**************** |
ClientCertPath |
المسار المطلق لملف شهادة العميل إلى مثيل تطبيق Azure. | لا | null |
/usr/local/cert/app.cert |
تستخدم الخدمة قيمة مختلفة TokenCredential
لإنشاء رموز Microsoft Entra المميزة، اعتمادا على المعلمات التي تقدمها:
type=azure
تستخدم الخدمة DefaultAzureCredential:
Endpoint=xxx;AuthType=azure
type=azure.msi
تستخدم الخدمة هوية مدارة معينة من قبل المستخدم (ManagedIdentityCredential(clientId)) إذا كان سلسلة الاتصال يستخدم
clientId
:Endpoint=xxx;AuthType=azure.msi;ClientId=<client_id>
تستخدم الخدمة هوية مدارة معينة من قبل النظام (ManagedIdentityCredential()):
Endpoint=xxx;AuthType=azure.msi;
type=azure.app
كل من
clientId
و مطلوب لاستخدام تطبيق Microsoft Entra مع كيانtenantId
الخدمة.تستخدم الخدمة ClientSecretCredential(clientId, tenantId, clientSecret) إذا كان سلسلة الاتصال يستخدم
clientSecret
:Endpoint=xxx;AuthType=azure.msi;ClientId=<client_id>;clientSecret=<client_secret>>
تستخدم الخدمة ClientCertificateCredential(clientId, tenantId, clientCertPath) إذا كان سلسلة الاتصال يستخدم
clientCertPath
:Endpoint=xxx;AuthType=azure.msi;ClientId=<client_id>;TenantId=<tenant_id>;clientCertPath=</path/to/cert>
كيفية الحصول على سلسلة الاتصال
يمكنك استخدام مدخل Microsoft Azure أو Azure CLI للحصول على سلسلة الاتصال.
مدخل Azure
افتح مورد Azure SignalR Service في مدخل Microsoft Azure. تعرض علامة التبويب مفاتيح سلسلة الاتصال (أساسي وثانوي) بالتنسيق التالي:
Endpoint=https://<resource_name>.service.signalr.net;AccessKey=<access_key>;Version=1.0;
Azure CLI
az signalr key list -g <resource_group> -n <resource_name>
الاتصال بتطبيق Microsoft Entra
يمكنك استخدام تطبيق Microsoft Entra للاتصال بمثيل خدمة Azure SignalR. إذا كان التطبيق لديه الإذن المناسب للوصول إلى خدمة Azure SignalR، فإنه لا يحتاج إلى مفتاح وصول.
لاستخدام مصادقة Microsoft Entra، تحتاج إلى إزالة AccessKey
من سلسلة الاتصال وإضافة AuthType=azure.app
. تحتاج أيضا إلى تحديد بيانات اعتماد تطبيق Microsoft Entra، بما في ذلك معرف العميل وسر العميل ومعرف المستأجر. يبدو سلسلة الاتصال مثل هذا المثال:
Endpoint=https://<resource_name>.service.signalr.net;AuthType=azure.app;ClientId=<client_id>;ClientSecret=<client_secret>;TenantId=<tenant_id>;Version=1.0;
لمزيد من المعلومات حول كيفية المصادقة باستخدام تطبيق Microsoft Entra، راجع تخويل الطلبات إلى موارد SignalR باستخدام تطبيقات Microsoft Entra.
المصادقة باستخدام هوية مدارة
يمكنك استخدام هوية مدارة معينة من قبل النظام أو معينة من قبل المستخدم للمصادقة باستخدام Azure SignalR Service.
لاستخدام هوية معينة من قبل النظام، أضف AuthType=azure.msi
إلى سلسلة الاتصال:
Endpoint=https://<resource_name>.service.signalr.net;AuthType=azure.msi;Version=1.0;
تستخدم Azure SignalR Service SDK تلقائيا هوية خادم التطبيق الخاص بك.
لاستخدام هوية معينة من قبل المستخدم، قم بتضمين معرف العميل للهوية المدارة في سلسلة الاتصال:
Endpoint=https://<resource_name>.service.signalr.net;AuthType=azure.msi;ClientId=<client_id>;Version=1.0;
لمزيد من المعلومات حول كيفية تكوين الهويات المدارة، راجع تخويل الطلبات إلى موارد SignalR باستخدام الهويات المدارة من Microsoft Entra.
إشعار
نوصي بشدة باستخدام الهويات المدارة للمصادقة مع Azure SignalR Service، لأنها أكثر أمانا من مفاتيح الوصول. إذا كنت لا تستخدم مفاتيح الوصول للمصادقة، ففكر في تعطيلها تماما في مدخل Microsoft Azure (حدد تعطيل مفتاح> الوصول للمفاتيح).>
إذا قررت استخدام مفاتيح الوصول، نوصي بتدويرها بانتظام. لمزيد من المعلومات، راجع تدوير مفاتيح الوصول لخدمة Azure SignalR.
استخدام منشئ سلسلة الاتصال
يمكن أن يكون بناء سلسلة الاتصال يدويا مرهقا وعرضة للخطأ. لتجنب الأخطاء، توفر خدمة Azure SignalR منشئ سلسلة الاتصال لمساعدتك في إنشاء سلسلة الاتصال يتضمن هويات Microsoft Entra مثل clientId
وtenantId
. لاستخدام الأداة، افتح مثيل خدمة Azure SignalR في مدخل Microsoft Azure وحدد سلاسل الاتصال من القائمة اليسرى.
في هذه الصفحة، يمكنك الاختيار من بين أنواع المصادقة (مفتاح الوصول أو الهوية المدارة أو تطبيق Microsoft Entra) وإدخال معلومات مثل نقطة نهاية العميل ومعرف العميل وسر العميل. ثم يتم إنشاء سلسلة الاتصال تلقائيا. يمكنك نسخه واستخدامه في التطبيق الخاص بك.
إشعار
لا يتم حفظ المعلومات التي تدخلها بعد مغادرة الصفحة. تحتاج إلى نسخ وحفظ سلسلة الاتصال لاستخدامها في التطبيق الخاص بك.
لمزيد من المعلومات حول كيفية إنشاء رموز الوصول المميزة والتحقق من صحتها، راجع قسم المصادقة عبر الرمز المميز ل Microsoft Entra في مرجع واجهة برمجة تطبيقات REST لمستوى بيانات خدمة Azure SignalR.
توفير نقاط نهاية العميل والخادم
يحتوي سلسلة الاتصال على نقطة نهاية HTTP لخادم التطبيق للاتصال بخدمة Azure SignalR. يقوم الخادم بإرجاع نقطة نهاية HTTP إلى العملاء في استجابة تفاوضية، حتى يتمكن العميل من الاتصال بالخدمة.
في بعض التطبيقات، قد يكون هناك مكون إضافي أمام Azure SignalR Service. يجب أن تمر جميع اتصالات العميل عبر هذا المكون أولا. على سبيل المثال، Azure Application Gateway هي خدمة شائعة توفر أمانا إضافيا للشبكة.
في مثل هذه الحالات، يحتاج العميل إلى الاتصال بنقطة نهاية مختلفة عن خدمة Azure SignalR. بدلا من استبدال نقطة النهاية يدويا من جانب العميل، يمكنك إضافة ClientEndpoint
إلى سلسلة الاتصال:
Endpoint=https://<resource_name>.service.signalr.net;AccessKey=<access_key>;ClientEndpoint=https://<url_to_app_gateway>;Version=1.0;
يقوم خادم التطبيق بإرجاع استجابة لطلب التفاوض الخاص بالعميل. تحتوي الاستجابة على عنوان URL الصحيح لنقطة النهاية للعميل للاتصال به. لمزيد من المعلومات حول اتصالات العميل، راجع الداخلية لخدمة Azure SignalR.
وبالمثل، إذا حاول الخادم إجراء اتصالات الخادم أو استدعاء واجهات برمجة تطبيقات REST للخدمة، فقد تكون خدمة Azure SignalR أيضا خلف خدمة أخرى مثل Azure Application Gateway. في هذه الحالة، يمكنك استخدام ServerEndpoint
لتحديد نقطة النهاية الفعلية لاتصالات الخادم وواجهات برمجة تطبيقات REST:
Endpoint=https://<resource_name>.service.signalr.net;AccessKey=<access_key>;ServerEndpoint=https://<url_to_app_gateway>;Version=1.0;
تكوين سلسلة الاتصال في التطبيق الخاص بك
تظهر سلسلة الاتصال الأولية في هذه المقالة لأغراض العرض التوضيحي فقط. في بيئات الإنتاج، قم دائما بحماية مفاتيح الوصول الخاصة بك. استخدم Azure Key Vault لإدارة مفاتيحك وتدويرها بأمان وتأمين سلسلة الاتصال باستخدام معرف Microsoft Entra وتخويل الوصول باستخدام معرف Microsoft Entra.
هناك طريقتان لتكوين سلسلة الاتصال في التطبيق الخاص بك.
يمكنك تعيين سلسلة الاتصال عند استدعاء AddAzureSignalR()
واجهة برمجة التطبيقات:
services.AddSignalR().AddAzureSignalR("<connection_string>");
أو يمكنك الاتصال AddAzureSignalR()
بدون أي وسيطات. ترجع خدمة SDK سلسلة الاتصال من تكوين يسمى Azure:SignalR:ConnectionString
في موفر التكوين الخاص بك.
في بيئة تطوير محلية، يتم تخزين التكوين في ملف (appsettings.json أو secrets.json) أو في متغيرات البيئة. يمكنك استخدام إحدى الطرق التالية لتكوين سلسلة الاتصال:
- استخدام مدير بيانات سرية .NET (
dotnet user-secrets set Azure:SignalR:ConnectionString "<connection_string>"
). - تعيين متغير بيئة يسمى
Azure__SignalR__ConnectionString
إلى سلسلة الاتصال. يجب استبدال النقطتين بتسطير أسفل السطر المزدوج في موفر تكوين متغير البيئة.
في بيئة الإنتاج، يمكنك استخدام خدمات Azure الأخرى لإدارة التكوينات والأسرار، مثل Azure Key Vault وتكوين التطبيق. راجع وثائقهم لمعرفة كيفية إعداد موفر تكوين لتلك الخدمات.
إشعار
حتى عندما تقوم بإعداد سلسلة الاتصال مباشرة باستخدام التعليمات البرمجية، لا نوصي بتكوين التعليمات البرمجية سلسلة الاتصال في التعليمات البرمجية المصدر. بدلا من ذلك، اقرأ سلسلة الاتصال من مخزن سري مثل Key Vault ومررها إلى AddAzureSignalR()
.
تكوين سلسلة الاتصال متعددة
تسمح خدمة Azure SignalR للخادم بالاتصال بنقاط نهاية خدمة متعددة في نفس الوقت، حتى تتمكن من التعامل مع المزيد من الاتصالات التي تتجاوز حد مثيل الخدمة. عندما يكون مثيل خدمة واحد معزولا، يمكنك استخدام مثيلات الخدمة الأخرى كنسخة احتياطية. لمزيد من المعلومات حول كيفية استخدام مثيلات متعددة، راجع Scale SignalR Service مع مثيلات متعددة.
هناك طريقتان لتكوين مثيلات متعددة:
من خلال التعليمات البرمجية:
services.AddSignalR().AddAzureSignalR(options => { options.Endpoints = new ServiceEndpoint[] { new ServiceEndpoint("<connection_string_1>", name: "name_a"), new ServiceEndpoint("<connection_string_2>", name: "name_b", type: EndpointType.Primary), new ServiceEndpoint("<connection_string_3>", name: "name_c", type: EndpointType.Secondary), }; });
يمكنك تعيين اسم ونوع لكل نقطة نهاية خدمة حتى تتمكن من تمييزها لاحقا.
من خلال التكوين:
يمكنك استخدام أي موفر تكوين مدعوم (على سبيل المثال، مدير البيانات السرية أو متغيرات البيئة أو مخزن المفاتيح) لتخزين سلسلة الاتصال. فيما يلي مثال يستخدم مديرا سريا:
dotnet user-secrets set Azure:SignalR:ConnectionString:name_a <connection_string_1> dotnet user-secrets set Azure:SignalR:ConnectionString:name_b:primary <connection_string_2> dotnet user-secrets set Azure:SignalR:ConnectionString:name_c:secondary <connection_string_3>
يمكنك تعيين اسم ونوع لكل نقطة نهاية باستخدام اسم تكوين مختلف بالتنسيق التالي:
Azure:SignalR:ConnectionString:<name>:<type>