المصادقة باستخدام مساحات الأسماء باستخدام رموز ويب JSON المميزة

توضح هذه المقالة كيفية المصادقة باستخدام مساحة اسم Azure Event Grid باستخدام رموز ويب JSON المميزة.

يدعم وسيط MQTT الخاص ب Azure Event Grid مصادقة JWT المخصصة، والتي تمكن العملاء من الاتصال والمصادقة باستخدام مساحة اسم Event Grid باستخدام رموز JSON المميزة على الويب التي يتم إصدارها من قبل أي موفر هوية، بالإضافة إلى معرف Microsoft Entra.

المتطلبات الأساسية

لاستخدام مصادقة JWT المخصصة لمساحات الأسماء، تحتاج إلى المتطلبات الأساسية التالية:

  • موفر الهوية الذي يمكنه إصدار رموز ويب Json المميزة.
  • شهادة المرجع المصدق التي تتضمن المفاتيح العامة المستخدمة للتحقق من صحة رموز العميل المميزة.
  • حساب Azure Key Vault لاستضافة شهادة المرجع المصدق التي تتضمن مفاتيحك العامة.

‏‫الخطوات عالية المستوى

لاستخدام مصادقة JWT المخصصة لمساحات الأسماء، اتبع الخطوات التالية:

  1. إنشاء مساحة اسم وتكوين الموارد الفرعية الخاصة بها.
  2. تمكين الهوية المدارة على مساحة اسم Event Grid.
  3. إنشاء حساب Azure Key Vault الذي يستضيف شهادة المرجع المصدق التي تتضمن المفاتيح العامة الخاصة بك.
  4. أضف تعيين الدور في Azure Key Vault للهوية المدارة لمساحة الاسم.
  5. تكوين إعدادات المصادقة المخصصة على مساحة اسم شبكة الأحداث
  6. يمكن لعملائك الاتصال بمساحة اسم Event Grid باستخدام الرموز المميزة التي يوفرها موفر الهوية.

إنشاء مساحة اسم وتكوين مواردها الفرعية

اتبع الإرشادات من التشغيل السريع: نشر رسائل MQTT والاشتراك فيها على شبكة الأحداث Namespace باستخدام مدخل Microsoft Azure لإنشاء مساحة اسم وتكوين مواردها الفرعية. تخطي خطوات إنشاء الشهادة والعميل حيث تأتي هويات العميل من الرمز المميز المقدم. تستند سمات العميل إلى المطالبات المخصصة في الرمز المميز للعميل. يتم استخدام سمات العميل في استعلام مجموعة العميل ومتغيرات قالب الموضوع وتكوين إثراء التوجيه.

تمكين الهوية المدارة على مساحة اسم شبكة الأحداث

تستخدم مساحة الاسم الهوية المدارة للوصول إلى مثيل Azure Key Vault للحصول على شهادة الخادم لمجالك المخصص. استخدم الأمر التالي لتمكين الهوية المدارة المعينة من قبل النظام على مساحة اسم شبكة الأحداث:

az eventgrid namespace update --resource-group <resource group name> --name <namespace name> --identity "{type:systemassigned}" 

للحصول على معلومات حول تكوين النظام والهويات المعينة من قبل المستخدم باستخدام مدخل Microsoft Azure، راجع تمكين الهوية المدارة لمساحة اسم شبكة الأحداث.

إنشاء حساب Azure Key Vault وتحميل شهادة الخادم

  1. استخدم الأمر التالي لإنشاء حساب Azure Key Vault:

    az keyvault create --name "<your-unique-keyvault-name>" --resource-group "<resource group name>" --location "centraluseaup" 
    
  2. استخدم الأمر التالي لاستيراد شهادة إلى Azure Key Vault

    az keyvault certificate import --vault-name "<your-key-vault-name>" -n "<cert name>" -f "<path to your certificate pem file> " 
    

    إشعار

    يجب أن تتضمن شهادتك اسم المجال في اسم بديل الموضوع ل DNS. لمزيد من المعلومات، راجع البرنامج التعليمي: استيراد شهادة في Azure Key Vault.

إضافة تعيين دور في Azure Key Vault للهوية المدارة لمساحة الاسم

تحتاج إلى توفير الوصول إلى مساحة الاسم للوصول إلى حساب Azure Key Vault الخاص بك باستخدام الخطوات التالية:

  1. الحصول على معرف الهوية الأساسي لمساحة اسم شبكة الأحداث باستخدام الأمر التالي

    $principalId=(az eventgrid namespace show --resource-group <resource group name> --name <namespace name> --query identity.principalId -o tsv) 
    
  2. احصل على معرف مورد Azure Key vault.

    $keyVaultResourceId=(az keyvault show --resource-group <resource group name> --name <your key vault name> --query id -o tsv) 
    
  3. أضف تعيين الدور في Key Vault للهوية المدارة لمساحة الاسم.

    az role assignment create --role "Key Vault Certificate User" --assignee $principalId --scope $keyVaultResourceId 
    

    لمزيد من المعلومات حول الوصول إلى Key Vault وتجربة المدخل، راجع توفير الوصول إلى مفاتيح Key Vault والشهادات والأسرار باستخدام التحكم في الوصول المستند إلى دور Azure.

تكوين إعدادات المصادقة المخصصة على مساحة اسم شبكة الأحداث

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

استخدام مدخل Azure

  1. انتقل إلى مساحة اسم Event Grid في مدخل Microsoft Azure.

  2. في صفحة Event Grid Namespace ، حدد Configuration في القائمة اليسرى.

  3. في قسم Custom JWT authentication ، حدد قيما للخصائص التالية:

    1. حدد تمكين مصادقة JWT المخصصة.

    2. مصدر الرمز المميز: أدخل قيمة مطالبات المصدر لرموز JWT المميزة، التي يقدمها عملاء MQTT.

    3. حدد Add issuer certificate

      لقطة شاشة تعرض قسم مصادقة JWT المخصصة في صفحة التكوين لمساحة اسم شبكة الأحداث.

    4. في الصفحة الجديدة، حدد قيما للخصائص التالية.

      1. عنوان URL للشهادة: معرف الشهادة لشهادة المصدر في Azure Key Vault التي قمت بإنشائها. يمكنك اختيار Select a certificate using a key vault بدلا من ذلك لتحديد الشهادة وkey vault من اشتراكاتك.

      2. الهوية: الهوية المستخدمة للمصادقة مع Key Vault للوصول إلى شهادة المصدر التي تم إنشاؤها.

      3. حدد إضافة.

        لقطة شاشة تعرض صفحة إضافة شهادة المصدر.

  4. مرة أخرى في صفحة التكوين ، حدد تطبيق.

    إشعار

    يمكنك إضافة ما يصل إلى شهادتين iss لأغراض تدوير الشهادة/المفتاح.

استخدام Azure CLI

استخدم الأمر التالي لتحديث مساحة الاسم الخاصة بك بتكوين مصادقة JWT المخصص.

az resource update --resource-type Microsoft.EventGrid/namespaces --api-version 2024-06-01-preview --ids /subscriptions/69f9e5ac-ca07-42cc-98d2-4718d033bcc5/resourceGroups/dummy-cd-test/providers/Microsoft.EventGrid/namespaces/dummy-cd-test2 --set properties.topicSpacesConfiguration.clientAuthentication='{\"customJwtAuthentication\":{\"tokenIssuer\":\"dmpypin-issuer\",\"issuerCertificates\":[{\"certificateUrl\":\"https://dummyCert-cd-test.vault.azure.net/certificates/dummy-cd-test/4f844b284afd487e9bba0831191087br1\",\"identity\":{\"type\":\"SystemAssigned\"}}]}}' 

تنسيق JSON Web Token

تنقسم رموز ويب Json المميزة إلى قسمي JWT Header وJWT payload.

رأس JWT

يجب أن يحتوي العنوان على حقول و alg على الأقلtyp. typ يجب أن يكون JWS دائما ويجب alg أن يكون RS256دائما . يجب أن يكون رأس الرمز المميز كما يلي:

{
    "typ": "JWT",
    "alg": "RS256"
}

حمولة JWT

تتطلب Event Grid المطالبات التالية: iss، sub، aud، exp، . nbf

Name ‏‏الوصف
iss مصدر الشهادة. يجب أن تتطابق القيمة في JWT مع المصدر في تكوين مساحة اسم شبكة الأحداث لمصادقة JWT المخصصة.
sub الموضوع. يتم استخدام القيمة كاسم هوية المصادقة.
aud الجمهور. يمكن أن تكون القيمة سلسلة أو صفيف من السلاسل. يجب أن تحتوي القيمة على اسم مضيف مساحة اسم شبكة الأحداث القياسية و/أو المجال المخصص لمساحة اسم شبكة الأحداث هذه (إذا تم تكوينها). يمكن أن يحتوي الجمهور على سلاسل أخرى، ولكننا نطلب من واحد على الأقل من هذه السلاسل أن يكون اسم مضيف مساحة اسم شبكة الأحداث قياسيا أو مجالا مخصصا لمساحة الاسم هذه.
exp انقضاء. وقت Unix عند انتهاء صلاحية JWT.
nbf ليس من قبل. وقت الوحدة عندما يصبح JWT صالحا.

تقوم Event Grid بتعيين جميع المطالبات إلى سمات العميل إذا كان لديها أحد الأنواع التالية: int32، ، string. array of strings يتم استبعاد المطالبات issالقياسية و subaudو expو nbf و من سمات العميل. في مثال JWT التالي، يتم تحويل ثلاث مطالبات فقط إلى سمات العميل، ، num_attr، str_list_attrstr_attr، لأنها تحتوي على أنواع int32صحيحة ، ، string. array of stringsincorrect_attr_1، incorrect_attr_2، لا يتم تحويلها إلى سمات العميل، لأنها تحتوي على أنواع خاطئة: float، ، array of integers. objectincorrect_attr_3

{
    "iss": "correct_issuer",
    "sub": "d1",
    "aud": "testns.mqtt-broker-int.azure.net",
    "exp": 1712876224,
    "nbf": 1712869024,
    "num_attr": 1,
    "str_attr": "some string",
    "str_list_attr": [
        "string 1",
        "string 2"
    ],
    "incorrect_attr_1": 1.23,
    "incorrect_attr_2": [
        1,
        2,
        3
    ],
    "incorrect_attr_3": {
        "field": "value"
    }
}