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

توفر هذه المقالة معلومات حول مصادقة العملاء الذين ينشرون أحداثاً إلى مواضيع Azure Event Grid، المجالات، مساحة اسم الشريك باستخدام access key أو الرمز المميز Shared Access Signature (SAS) .

هام

يوفر مصادقة المستخدمين أو التطبيقات التي تستخدم هويات Microsoft Azure Active Directory وتفويضهم أمان فائق وسهولة استخدام عبر مصادقة توقيعات الوصول المشترك (SAS) والمستندة إلى المفاتيح. مع AAD (دليل Azure النشط)، لا توجد حاجة لتخزين الأسرار المستخدمة للمصادقة في التعليمات البرمجية الخاصة بك والمخاطرة بنقاط ضعف أمنية محتملة. نوصي بشدة باستخدام AAD (دليل Azure النشط) مع تطبيقات نشر الحدث Azure Event Grid. لمزيد من المعلومات، راجع مصادقة عملاء النشر باستخدام AAD (دليل Azure النشط).

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

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

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

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

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

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

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

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

للحصول على إرشادات حول كيفية الحصول على مفاتيح الاختصار لموضوع أو مجال، راجع الحصول على مفاتيح الاختصار.

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

تتضمن رموز SAS المميزة لمورد Event Grid بما في ذلك المورد ووقت انتهاء الصلاحية والتوقيع. تنسيق رمز SAS المميز هو: r={resource}&e={expiration}&s={signature}.

المورد هو مسار موضوع شبكة الحدث الذي ترسل إليه الأحداث. على سبيل المثال، مسار المورد الصالح هو: https://<yourtopic>.<region>.eventgrid.azure.net/api/events. للاطلاع على جميع إصدارات API المدعومة، راجع أنواع موارد Microsoft.EventGrid.

أولاً، أنشئ رمز SAS برمجياً ثم استخدم الرأس aeg-sas-token أو Authorization SharedAccessSignature الرأس للمصادقة مع Event Grid.

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

يُنشئ المثال التالي رمز SAS لاستخدامه مع Event Grid:

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;
    }
}
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-token

فيما يلي مثال على تمرير رمز 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

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

راجع مصادقة تسليم الحدث للتعرف على المصادقة باستخدام معالجات الأحداث لتسليم الأحداث.