مصادقة عملاء Azure Event Grid باستخدام مفاتيح الوصول أو توقيعات الوصول المشتركة

توفر هذه المقالة معلومات حول مصادقة العملاء لمواضيع مساحة اسم Azure Event Grid والموضوعات المخصصة والمجالات ومساحات أسماء الشركاء باستخدام مفتاح الوصول أو الرمز المميز لتوقيع الوصول المشترك (SAS).

هام

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

المصادقة باستخدام مفتاح اختصار

مصادقة مفتاح الاختصار هي أبسط أشكال المصادقة. يمكنك تمرير مفتاح الوصول كعنوان HTTP أو معلمة استعلام URL.

مفتاح الاختصار في عنوان HTTP

مَرِّر مفتاح الاختصار كقيمة لعنوان HTTP: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

مفتاح الوصول كمعلمة استعلام

يمكنك أيضاً تحديد aeg-sas-key كمعلمة استعلام.

على سبيل المثال، بالنسبة لمواضيع مساحة الاسم، هذه هي الطريقة التي يمكن أن يبدو بها عنوان URL لطلب HTTP تمرير مفتاح كمعلمة.

https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>:publish?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

بالنسبة للمواضيع والمجالات ومساحات أسماء الشركاء المخصصة، يجب أن يبدو عنوان URL لطلب HTTP كما يلي:

https://<yourtopic>.<region>.eventgrid.azure.net/api/events?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

توقيعات الوصول المشترك

توفر لك توقيعات الوصول المشترك (SAS) إمكانية التحكم في الوصول إلى الموارد التي يمكن للعملاء الاتصال بها. فيما يلي بعض عناصر التحكم التي يمكنك تعيينها في SAS:

  • تعيين وقت انتهاء صلاحية SAS. تحدد هذه القيمة بشكل فعال الفاصل الزمني الذي يمكن من خلاله استخدام SAS صالحا للمصادقة.
  • المورد الذي يمكن استخدام SAS له. يمكن إنشاء رمز SAS المميز للوصول إلى الموضوعات والمجالات ومساحات أسماء الشركاء ومساحات الأسماء المخصصة. إذا قمت بإنشاء SAS لموضوع مخصص أو مجال أو مساحة اسم شريك، يمكن للعميل استخدامه لنشر الأحداث إلى أي من هذه الموارد. عند إنشاء SAS لموارد مساحة الاسم، يكون لديك تحكم دقيق في ما يمكن للعميل الوصول إليه. إذا قمت بإنشاء SAS مورده مساحة اسم، يمكن للعميل نشر الأحداث إلى أي موضوع مساحة اسم داخل مساحة الاسم ويمكنه تلقي الأحداث من أي اشتراك حدث على أي من مواضيع مساحة الاسم. وبالمثل، عند إنشاء SAS لموضوع مساحة اسم، يمكن للعميل نشر الأحداث إلى موضوع مساحة الاسم هذا وتلقي الأحداث من أي اشتراك حدث في هذا الموضوع. عند إنشاء SAS لاشتراك حدث، يمكن للعميل تلقي الأحداث من خلال اشتراك الحدث هذا.
  • يمكن فقط للعملاء الذين يقدمون SAS صالح إرسال البيانات أو تلقيها إلى Event Grid.

الرمز المميز لتوقيع الوصول المشترك

يمكنك إنشاء رمز SAS مميز ليتم تضمينه عند اتصال تطبيق العميل الخاص بك مع Event Grid. رموز SAS المميزة لموارد Event Grid هي URL سلاسل مشفرة بالتنسيق التالي: r={resource}&e={expiration_utc}&s={signature}.

  • {resource} هو عنوان URL الذي يمثل مورد Event Grid الذي يصل إليه العميل.
    • تنسيق URL الصالح للمواضيع والمجالات ومساحات أسماء الشركاء المخصصة هو https://<yourtopic>.<region>.eventgrid.azure.net/api/events.
    • التنسيق الصالح لموارد مساحة الاسم كما يلي:
      • مساحات الأسماء: https://<namespace-name>.<region>.eventgrid.azure.net
      • مواضيع مساحة الاسم: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>
      • اشتراكات الحدث: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>/eventsubscriptions/<event_subscription_name>
  • {expiration_utc} هو وقت انتهاء صلاحية UTC المشفرة ل SAS.
  • {signature} هو تجزئة SHA-256 المحسوبة عبر URI للمورد وتمثيل سلسلة لحظة انتهاء صلاحية الرمز المميز، مفصولة ب CRLF. يشبه حساب التجزئة التعليمة البرمجية الزائفة التالية ويعيد قيمة تجزئة 256 بت / 32 بايت.
SHA-256('https://<namespace_name>.eventgrid.azure.net/'+'\n'+ 1438205742)

يحتوي الرمز المميز على القيم غير المتجزئة بحيث يمكن للمستلم (شبكة الأحداث) إعادة حساب التجزئة بنفس المعلمات، والتحقق من أن الرمز المميز لم يتم تعديله (تكامل البيانات).

رمز SAS المميز صالح لكافة الموارد مسبوقة بمورد URI المستخدم في سلسلة التوقيع.

للرجوع إلى جميع إصدارات واجهة برمجة التطبيقات المدعومة عند استخدام Event Grid، راجع أنواع موارد Microsoft.EventGrid.

المصادقة باستخدام SAS

يمكن مصادقة التطبيق الخاص بك قبل مورد Event Grid عن طريق تقديم رمز SAS المميز. يمكن القيام بذلك باستخدام aeg-sas-token الرأس أو Authorization SharedAccessSignature العنوان مع طلب HTTP. تصف الأقسام التالية طريقة إنشاء رمز SAS المميز وكيفية استخدامه عندما يقوم تطبيق العميل الخاص بك بإجراء طلبات HTTP لإرسال أو تلقي أحداث (تسليم السحب).

إنشاء رمز SAS المميز برمجياً

توضح لك أمثلة C# وPython التالية كيفية إنشاء رمز SAS المميز للاستخدام مع Event Grid:

مثال على C#‎

static string BuildSharedAccessSignature(string resource, DateTime expirationUtc, string key)
{
    const char Resource = 'r';
    const char Expiration = 'e';
    const char Signature = 's';

    string encodedResource = HttpUtility.UrlEncode(resource);
    var culture = CultureInfo.CreateSpecificCulture("en-US");
    var encodedExpirationUtc = HttpUtility.UrlEncode(expirationUtc.ToString(culture));

    string unsignedSas = $"{Resource}={encodedResource}&{Expiration}={encodedExpirationUtc}";
    using (var hmac = new HMACSHA256(Convert.FromBase64String(key)))
    {
        string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(unsignedSas)));
        string encodedSignature = HttpUtility.UrlEncode(signature);
        string signedSas = $"{unsignedSas}&{Signature}={encodedSignature}";

        return signedSas;
    }
}

مثال Python

def generate_sas_token(uri, key, expiry=3600):
    ttl = datetime.datetime.utcnow() + datetime.timedelta(seconds=expiry)
    encoded_resource = urllib.parse.quote_plus(uri)
    encoded_expiration_utc = urllib.parse.quote_plus(ttl.isoformat())

    unsigned_sas = f'r={encoded_resource}&e={encoded_expiration_utc}'
    signature = b64encode(HMAC(b64decode(key), unsigned_sas.encode('utf-8'), sha256).digest())
    encoded_signature = urllib.parse.quote_plus(signature)
    
    token = f'r={encoded_resource}&e={encoded_expiration_utc}&s={encoded_signature}'

    return token

استخدام عنوان الرمز المميز لـ aeg-sas

فيما يلي مثال يوضح كيفية تمرير رمز SAS المميز كقيمة aeg-sas-token للعنوان.

aeg-sas-token: r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d

استخدام عنوان التخويل

يوضح هذا المثال كيفية تمرير رمز SAS المميز كقيمة Authorization للعنوان.

Authorization: SharedAccessSignature r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d

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