كيفية استخدام مفاتيح متماثلة عبر HTTPS بدون SDK

في هذه المقالة الإرشادية، ستقوم بتوفير جهاز باستخدام مفاتيح متماثلة عبر HTTPS دون استخدام SDK لجهاز Azure IoT DPS. توفر معظم اللغات مكتبات لإرسال طلبات HTTP، ولكن بدلا من التركيز على لغة معينة، في هذه المقالة، ستستخدم أداة سطر أوامر cURL لإرسال HTTPS وتلقيه.

يمكنك اتباع الخطوات الواردة في هذه المقالة على جهاز Linux أو Windows. إذا كنت تعمل على نظام Windows الفرعي لـ Linux (WSL) أو تعمل على جهاز Linux، يمكنك إدخال جميع الأوامر على النظام المحلي في موجه Bash. إذا كنت تعمل على Windows، أدخل جميع الأوامر على النظام المحلي في موجه GitBash.

هناك مسارات مختلفة من خلال هذه المقالة اعتمادا على نوع إدخال التسجيل الذي تختار استخدامه. بعد تثبيت المتطلبات الأساسية، تأكد من قراءة نظرة عامة قبل المتابعة.

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

  • في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

  • إكمال الخطوات في إعداد خدمة تزويد الأجهزة بمركز IoT باستخدام مدخل Microsoft Azure.

  • تأكد من تثبيت Python 3.7 أو أحدث على جهازك. يمكنك التحقق من إصدار Python الذي تستخدمه عن طريق تشغيل python --version.

  • إذا كنت تعمل في Windows، فقم بتثبيت أحدث إصدار من Git. تأكد من إضافة Git إلى متغيرات البيئة التي يمكن الوصول إليها من نافذة الأمر. راجع أدوات عميل Software Freedom Conservancy's Git للحصول على أحدث إصدار من أدوات git للتثبيت، والتي تتضمن Git Bash، وهو تطبيق سطر الأوامر الذي يمكن استخدامه للتفاعل مع مستودع Git المحلي خاصتك. في Windows، ستقوم بإدخال جميع الأوامر على النظام المحلي في موجه GitBash.

  • Azure CLI لديك خياران لتشغيل أوامر Azure CLI في هذه المقالة:

    • استخدم Azure Cloud Shell، وهي واجهة تفاعلية تقوم بتشغيل أوامر CLI في المستعرض. يوصى بهذا الخيار؛ لأنك لا تحتاج إلى تثبيت أي شيء. إذا كنت تستخدم Cloud Shell لأول مرة، فسجل الدخول إلى مدخل Azure. تتبع الخطوات في التشغيل السريع لـ Cloud Shellلبدء Cloud Shellوحدد بيئة Bash.
    • اختياريًا، قم بتشغيل Azure CLI على الجهاز المحلي. إذا تم بالفعل تثبيت Azure CLI، az upgrade فحدث CLI والملحقات إلى الإصدار الحالي. لتثبيت Azure CLI، راجع تثبيت Azure CLI.
  • إذا كنت تعمل في بيئة Linux أو WSL، فافتح موجه Bash لتشغيل الأوامر محليا. إذا كنت تعمل في بيئة Windows، فافتح موجه GitBash.

نظرة عامة

بالنسبة لهذه المقالة، يمكنك استخدام إما تسجيل فردي أو مجموعة تسجيل لتوفير من خلال DPS.

بعد إنشاء تسجيل فردي أو إدخال مجموعة تسجيل، تابع لإنشاء رمز SAS وتسجيل جهازك باستخدام DPS.

استخدام تسجيل فردي

إذا كنت ترغب في إنشاء تسجيل فردي جديد لاستخدامه في هذه المقالة، يمكنك استخدام الأمر az iot dps enrollment create لإنشاء تسجيل فردي لإثبات المفتاح المتماثل.

ينشئ الأمر التالي إدخال تسجيل مع نهج التخصيص الافتراضي لمثيل DPS الخاص بك ويسمح ل DPS بتعيين المفاتيح الأساسية والثانوية لجهازك:

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
  • استبدل اسم مجموعة الموارد ومثيل DPS.

  • معرف التسجيل هو معرف التسجيل لجهازك. معرف التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'، ، '.'، '_'. ':' يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-'). تأكد من أن معرف التسجيل الذي تستخدمه في الأمر يلتزم بهذا التنسيق.

يتم إرجاع المفاتيح المتماثلة المعينة في خاصية التصديق في الاستجابة:


{
  "allocationPolicy": null,
  "attestation": {
    "symmetricKey": {
      "primaryKey": "G3vn0IZH9oK3d4wsxFpWBtd2KUrtjI+39dZVRf26To8w9OX0LaFV9yZ93ELXY7voqHEUsNhnb9bt717UP87KxA==",
      "secondaryKey": "4lNxgD3lUAOEOied5/xOocyiUSCAgS+4b9OvXLDi8ug46/CJzIn/3rN6Ys6gW8SMDDxMQDaMRnIoSd1HJ5qn/g=="
    },
    "tpm": null,
    "type": "symmetricKey",
    "x509": null
  },

  ...

}

دون المفتاح الأساسي ومعرف التسجيل (معرف التسجيل) لإدخال التسجيل الفردي، ستستخدمهما لاحقا في هذه المقالة.

إذا كنت ترغب في استخدام تسجيل فردي موجود لهذه المقالة، يمكنك الحصول على المفتاح الأساسي باستخدام الأمر az iot dps enrollment show :

az iot dps enrollment show -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --show-keys true

استخدام مجموعة تسجيل

إذا كنت ترغب في إنشاء مجموعة تسجيل جديدة لاستخدامها في هذه المقالة، يمكنك استخدام الأمر az iot dps enrollment-group create لإنشاء مجموعة تسجيل لإثبات المفتاح المتماثل.

ينشئ الأمر التالي إدخال مجموعة تسجيل مع نهج التخصيص الافتراضي لمثيل DPS الخاص بك ويسمح ل DPS بتعيين المفاتيح الأساسية والثانوية لمجموعة التسجيل:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
  • استبدل اسم مجموعة الموارد ومثيل DPS.

  • معرف التسجيل هو سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'، ، ، '_'. ':''.' يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-'). يمكن أن يكون أي اسم تختار استخدامه لمجموعة التسجيل.

يتم إرجاع المفاتيح المتماثلة المعينة في خاصية التصديق في الاستجابة:


{
  "allocationPolicy": null,
  "attestation": {
    "symmetricKey": {
      "primaryKey": "G3vn0IZH9oK3d4wsxFpWBtd2KUrtjI+39dZVRf26To8w9OX0LaFV9yZ93ELXY7voqHEUsNhnb9bt717UP87KxA==",
      "secondaryKey": "4lNxgD3lUAOEOied5/xOocyiUSCAgS+4b9OvXLDi8ug46/CJzIn/3rN6Ys6gW8SMDDxMQDaMRnIoSd1HJ5qn/g=="
    },
    "tpm": null,
    "type": "symmetricKey",
    "x509": null
  },

  ...

}

دون المفتاح الأساسي.

إذا كنت ترغب في استخدام تسجيل فردي موجود لهذه المقالة، يمكنك الحصول على المفتاح الأساسي باستخدام الأمر az iot dps enrollment-group show :

az iot dps enrollment-group show -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --show-keys true

اشتقاق مفتاح جهاز

عند استخدام إثبات المفتاح المتماثل مع عمليات تسجيل المجموعة، لا تستخدم مفاتيح مجموعة التسجيل مباشرة. بدلا من ذلك، يمكنك اشتقاق مفتاح فريد لكل جهاز من مفتاح مجموعة التسجيل. لمزيد من المعلومات، راجع عمليات تسجيل المجموعة باستخدام مفاتيح متماثلة.

في هذا القسم، ستقوم بإنشاء مفتاح جهاز من المفتاح الأساسي لمجموعة التسجيل لحساب HMAC-SHA256 من معرف التسجيل الفريد للجهاز. سيتم بعد ذلك تحويل النتيجة إلى تنسيق Base64.

  1. إنشاء مفتاحك الفريد باستخدام openssl. ستستخدم البرنامج النصي Bash shell التالي. استبدل {primary-key} بالمفتاح الأساسي لمجموعة التسجيل الذي نسخته سابقا واستبدل {contoso-simdevice}بمعرف التسجيل الذي تريد استخدامه للجهاز. معرف التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'، ، '.'، '_'. ':' يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-').

    KEY={primary-key}
    REG_ID={contoso-simdevice}
    
    keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000)
    echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64
    
  2. سيخرج البرنامج النصي شيئا مثل المفتاح التالي:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    

لاحظ أسفل مفتاح الجهاز المشتق ومعرف التسجيل الذي استخدمته لإنشاءه، ستستخدمهما في القسم التالي.

يمكنك أيضا استخدام Azure CLI أو PowerShell لاشتقاق مفتاح الجهاز. لمعرفة المزيد، راجع اشتقاق مفتاح جهاز.

إنشاء رمز SAS مميز

عند استخدام إثبات المفتاح المتماثل، تتم مصادقة الأجهزة باستخدام DPS باستخدام رمز توقيع الوصول المشترك (SAS). بالنسبة للأجهزة التي يتم توفيرها من خلال تسجيل فردي، يتم توقيع الرمز المميز باستخدام المفتاح الأساسي أو الثانوي الذي تم تعيينه في إدخال التسجيل. بالنسبة لتوفير جهاز من خلال مجموعة تسجيل، يتم توقيع الرمز المميز باستخدام مفتاح جهاز مشتق، والذي بدوره تم إنشاؤه باستخدام مجموعة المفاتيح الأساسية أو الثانوية في إدخال مجموعة التسجيل. يحدد الرمز المميز وقت انتهاء الصلاحية وURI للمورد الهدف.

يمكن استخدام البرنامج النصي Python التالي لإنشاء رمز SAS المميز:

from base64 import b64encode, b64decode
from hashlib import sha256
from time import time
from urllib.parse import quote_plus, urlencode
from hmac import HMAC

def generate_sas_token(uri, key, policy_name, expiry=3600):
     ttl = time() + expiry
     sign_key = "%s\n%d" % ((quote_plus(uri)), int(ttl))
     print(sign_key)
     signature = b64encode(HMAC(b64decode(key), sign_key.encode('utf-8'), sha256).digest())

     rawtoken = {
         'sr' :  uri,
         'sig': signature,
         'se' : str(int(ttl))
     }

     if policy_name is not None:
         rawtoken['skn'] = policy_name

     return 'SharedAccessSignature ' + urlencode(rawtoken)

uri = '[resource_uri]'
key = '[device_key]'
expiry = [expiry_in_seconds]
policy= '[policy]'

print(generate_sas_token(uri, key, policy, expiry))

المكان:

  • [resource_uri] هو URI للمورد الذي تحاول الوصول إليه باستخدام هذا الرمز المميز. بالنسبة إلى DPS، إنه من النموذج [dps_id_scope]/registrations/[dps_registration_id]، حيث [dps_id_scope] هو نطاق المعرف لمثيل DPS الخاص بك، وهو [dps_registration_id] معرف التسجيل الذي استخدمته لجهازك.

    يمكنك الحصول على نطاق المعرف لمثيل DPS الخاص بك من جزء Overview للمثيل الخاص بك في مدخل Microsoft Azure، أو يمكنك استخدام الأمر az iot dps show Azure CLI (استبدل العناصر النائبة باسم مجموعة الموارد ومثيل DPS):

    az iot dps show -g {resource_group_name} --name {dps_name}
    
  • [device_key] هو مفتاح الجهاز المقترن بجهازك. هذا المفتاح هو إما المفتاح المحدد أو الذي تم إنشاؤه تلقائيا لك في تسجيل فردي، أو مفتاح مشتق لتسجيل مجموعة.

    • إذا كنت تستخدم تسجيلا فرديا، فاستخدم المفتاح الأساسي الذي حفظته في استخدام تسجيل فردي.

    • إذا كنت تستخدم مجموعة تسجيل، فاستخدم مفتاح الجهاز المشتق الذي أنشأته في استخدام مجموعة تسجيل.

  • [expiry_in_seconds] هي فترة صلاحية رمز SAS المميز هذا بالثوان.

  • [policy] هو النهج الذي يرتبط به مفتاح الجهاز. بالنسبة لتسجيل جهاز DPS، يتم ترميز النهج إلى "التسجيل".

قد تبدو مجموعة أمثلة من المدخلات لجهاز يسمى my-symkey-device بفترة صلاحية 30 يوما على هذا النحو.

uri = '0ne00111111/registrations/my-symkey-device'
key = '18RQk/hOPJR9EbsJlk2j8WA6vWaj/yi+oaYg7zmxfQNdOyMSu+SJ8O7TSlZhDJCYmn4rzEiVKIzNiVAWjLxrGA=='
expiry = 2592000
policy='registration'

تعديل البرنامج النصي لجهازك ومثيل DPS وحفظه كملف Python؛ على سبيل المثال، generate_token.py. قم بتشغيل البرنامج النصي، على سبيل المثال، python generate_token.py. يجب أن تنتج رمز SAS مشابها للآتي:

0ne00111111%2Fregistrations%2Fmy-symkey-device
1663952627
SharedAccessSignature sr=0ne00111111%2Fregistrations%2Fmy-symkey-device&sig=eNwg52xQdFTNf7bgPAlAJBCIcONivq%2Fck1lf3wtxI4A%3D&se=1663952627&skn=registration

انسخ واحفظ السطر بأكمله الذي يبدأ ب SharedAccessSignature. هذا السطر هو رمز SAS المميز. ستحتاج إليه في الأقسام التالية.

لمعرفة المزيد حول استخدام رموز SAS المميزة مع DPS وبنيتها، راجع التحكم في الوصول إلى DPS باستخدام SAS.

تسجيل جهازك

يمكنك استدعاء واجهة برمجة تطبيقات Register Device REST لتوفير جهازك من خلال DPS.

استخدم الأمر curl التالي:

curl -L -i -X PUT -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: [sas_token]' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31

المكان:

  • -L يخبر curl باتباع عمليات إعادة توجيه HTTP.

  • –i يخبر curl بتضمين عناوين البروتوكول في الإخراج. هذه الرؤوس ليست ضرورية تماما، ولكنها يمكن أن تكون مفيدة.

  • -X PUT يخبر curl أن هذا أمر HTTP PUT. مطلوب لاستدعاء واجهة برمجة التطبيقات هذا.

  • -H 'Content-Type: application/json' يخبر DPS أننا ننشر محتوى JSON ويجب أن يكون 'application/json'.

  • -H 'Content-Encoding: utf-8' يخبر DPS الترميز الذي نستخدمه لنص الرسالة. تعيين إلى القيمة المناسبة لنظام التشغيل/العميل الخاص بك؛ ومع ذلك، فإنه بشكل utf-8عام .

  • -H 'Authorization: [sas_token]' يخبر DPS بالمصادقة باستخدام رمز SAS المميز الخاص بك. استبدل [sas_token] بالرمز المميز الذي أنشأته في إنشاء رمز SAS مميز.

  • -d '{"registrationId": "[registration_id]"}'، المعلمة –d هي "البيانات" أو نص الرسالة التي ننشرها. يجب أن يكون JSON، في شكل "{"registrationId":"[registration_id"}". لاحظ أنه بالنسبة إلى curl، يتم تضمينه في علامات اقتباس مفردة؛ وإلا، تحتاج إلى الهروب من علامات الاقتباس المزدوجة في JSON.

  • وأخيرا، المعلمة الأخيرة هي عنوان URL للنشر إليه. بالنسبة إلى DPS "العادية" (أي غير المحلية)، يتم استخدام نقطة نهاية DPS العمومية، global.azure-devices-provisioning.net: https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. لاحظ أنه يجب عليك استبدال [dps_scope_id] و [registration_id] بالقيم المناسبة.

على سبيل المثال:

curl -L -i -X PUT -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: SharedAccessSignature sr=0ne00111111%2Fregistrations%2Fmy-symkey-device&sig=eNwg52xQdFTNf7bgPAlAJBCIcONivq%2Fck1lf3wtxI4A%3D&se=1663952627&skn=registration' -d '{"registrationId": "my-symkey-device"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-symkey-device/register?api-version=2021-06-01

سيكون للاتصال الناجح استجابة مشابهة للآتي:

HTTP/1.1 202 Accepted
Date: Wed, 31 Aug 2022 22:02:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-symkey-device/register
Retry-After: 3
x-ms-request-id: a021814f-0cf6-4ce9-a1e9-ead7eb5118d9
Strict-Transport-Security: max-age=31536000; includeSubDomains

{"operationId":"5.316aac5bdc130deb.b1e02da8-c3a0-4ff2-a121-7ea7a6b7f550","status":"assigning"}

تحتوي الاستجابة على معرف عملية وحالة. في هذه الحالة، يتم تعيين الحالة إلى assigning. من المحتمل أن يكون تسجيل DPS عملية طويلة الأمد، لذلك يتم ذلك بشكل غير متزامن. عادة، ستقوم باستطلاع الحالة باستخدام واجهة برمجة تطبيقات REST للبحث عن حالة العملية لتحديد وقت تعيين جهازك أو ما إذا كان قد حدث فشل.

قيم الحالة الصالحة ل DPS هي:

  • assigned: تشير القيمة المرجعة من استدعاء الحالة إلى مركز IoT الذي تم تعيين الجهاز إليه.

  • assigning: لا تزال العملية قيد التشغيل.

  • disabled: تم تعطيل سجل التسجيل في DPS، لذلك لا يمكن تعيين الجهاز.

  • failed: فشل التعيين. سيكون errorCode هناك و errorMessage يتم إرجاعه في registrationState سجل في الاستجابة للإشارة إلى ما فشل.

  • unassigned

لاستدعاء واجهة برمجة تطبيقات البحث عن حالة العملية، استخدم الأمر curl التالي:

curl -L -i -X GET -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: [sas_token]' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/operations/[operation_id]?api-version=2019-03-31

ستستخدم نفس نطاق المعرف ومعرف التسجيل ورمز SAS المميز كما فعلت في طلب تسجيل الجهاز . استخدم معرف العملية الذي تم إرجاعه في استجابة جهاز التسجيل.

على سبيل المثال:

curl -L -i -X GET -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: SharedAccessSignature sr=0ne00111111%2Fregistrations%2Fmy-symkey-device&sig=eNwg52xQdFTNf7bgPAlAJBCIcONivq%2Fck1lf3wtxI4A%3D&se=1663952627&skn=registration' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-symkey-device/operations/5.316aac5bdc130deb.f4f1828c-4dab-4ca9-98b2-dfc63b5835d6?api-version=2021-06-01

يظهر الإخراج التالي الاستجابة لجهاز تم تعيينه بنجاح. لاحظ أن الخاصية status هي assigned وأن الخاصية registrationState.assignedHub معينة إلى مركز IoT حيث تم توفير الجهاز.

HTTP/1.1 200 OK
Date: Wed, 31 Aug 2022 22:05:23 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
x-ms-request-id: ffb98d42-023e-4e75-afb0-1807ff091cbb
Strict-Transport-Security: max-age=31536000; includeSubDomains

{
   "operationId":"5.316aac5bdc130deb.b1e02da8-c3a0-4ff2-a121-7ea7a6b7f550",
   "status":"assigned",
   "registrationState":{
      "registrationId":"my-symkey-device",
      "createdDateTimeUtc":"2022-08-31T22:02:50.5163352Z",
      "assignedHub":"MyExampleHub.azure-devices.net",
      "deviceId":"my-symkey-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-31T22:02:50.7370676Z",
      "etag":"IjY5MDAzNTUyLTAwMDAtMDMwMC0wMDAwLTYzMGZkYThhMDAwMCI="
   }
}

إرسال رسالة بيانات تتبع الاستخدام

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

إنشاء رمز SAS المميز لمركز IoT الخاص بك

لإنشاء رمز SAS المميز، يمكنك تشغيل نفس التعليمات البرمجية التي قمت بها لإنشاء الرمز المميز لمثيل DPS الخاص بك مع التغييرات التالية:

uri = '[resource_uri]'
key = '[device_key]'
expiry = [expiry_in_seconds]
policy= None

المكان:

  • [resource_uri] هو URI للمورد الذي تحاول الوصول إليه باستخدام هذا الرمز المميز. بالنسبة لجهاز يرسل رسائل إلى مركز IoT، فهو من النموذج [iot-hub-host-name]/devices/[device-id].

    • بالنسبة إلى [iot-hub-host-name]، استخدم اسم مضيف IoT Hub الذي تم إرجاعه في الخاصية assignedHub في القسم السابق.

    • بالنسبة إلى [device-id]، استخدم معرف الجهاز الذي تم إرجاعه في الخاصية deviceId في القسم السابق.

  • [device_key] هو مفتاح الجهاز المقترن بجهازك. هذا المفتاح هو إما المفتاح المحدد أو الذي تم إنشاؤه تلقائيا لك في تسجيل فردي، أو مفتاح مشتق لتسجيل مجموعة. (إنه نفس المفتاح الذي استخدمته سابقا لإنشاء رمز مميز ل DPS.)

    • إذا كنت تستخدم تسجيلا فرديا، فاستخدم المفتاح الأساسي الذي حفظته في استخدام تسجيل فردي.

    • إذا كنت تستخدم مجموعة تسجيل، فاستخدم مفتاح الجهاز المشتق الذي أنشأته في استخدام مجموعة تسجيل.

  • [expiry_in_seconds] هي فترة صلاحية رمز SAS المميز هذا بالثوان.

  • policy=None لا يلزم نهج لجهاز يرسل بيانات تتبع الاستخدام إلى مركز IoT، لذلك يتم تعيين هذه المعلمة إلى None.

قد تبدو مجموعة أمثلة من المدخلات لجهاز يسمى my-symkey-device الإرسال إلى IoT Hub المسمى MyExampleHub بفترة صلاحية رمز مميز لمدة ساعة واحدة كما يلي:

uri = 'MyExampleHub.azure-devices.net/devices/my-symkey-device'
key = '18RQk/hOPJR9EbsJlk2j8WA6vWaj/yi+oaYg7zmxfQNdOyMSu+SJ8O7TSlZhDJCYmn4rzEiVKIzNiVAWjLxrGA=='
expiry = 3600
policy= None

يظهر الإخراج التالي نموذج رمز SAS المميز لهذه المدخلات:

SharedAccessSignature sr=MyExampleHub.azure-devices.net%2Fdevices%2Fmy-symkey-device&sig=f%2BwW8XOKeJOtiPc9Iwjc4OpExvPM7NlhM9qxN2a1aAM%3D&se=1663119026

لمعرفة المزيد حول إنشاء رموز SAS المميزة ل IoT Hub، بما في ذلك مثال التعليمات البرمجية بلغات البرمجة الأخرى، راجع التحكم في الوصول إلى IoT Hub باستخدام توقيعات الوصول المشترك.

إشعار

كملاءمة، يمكنك استخدام الأمر Azure CLI az iot hub generate-sas-token للحصول على رمز SAS المميز لجهاز مسجل مع مركز IoT. على سبيل المثال، يقوم الأمر التالي بإنشاء رمز SAS مميز بمدة ساعة واحدة. بالنسبة إلى {iothub_name}، تحتاج فقط إلى الجزء الأول من هام المضيف، على سبيل المثال، MyExampleHub.

az iot hub generate-sas-token -d {device_id} -n {iothub_name}

إرسال البيانات إلى مركز IoT

يمكنك استدعاء واجهة برمجة تطبيقات REST لحدث إرسال جهاز IoT Hub لإرسال بيانات تتبع الاستخدام إلى الجهاز.

استخدم الأمر curl التالي:

curl -L -i -X POST -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: [sas_token]' -d '{"temperature": 30}' https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

المكان:

  • -X POST يخبر curl أن هذا أمر HTTP POST. مطلوب لاستدعاء واجهة برمجة التطبيقات هذا.

  • -H 'Content-Type: application/json' يخبر IoT Hub أننا ننشر محتوى JSON ويجب أن يكون "application/json".

  • -H 'Content-Encoding: utf-8' يخبر IoT Hub الترميز الذي نستخدمه لنص الرسالة. تعيين إلى القيمة المناسبة لنظام التشغيل/العميل الخاص بك؛ ومع ذلك، فإنه بشكل utf-8عام .

  • -H 'Authorization: [sas_token]' يخبر IoT Hub بالمصادقة باستخدام رمز SAS المميز الخاص بك. استبدل [sas_token] بالرمز المميز الذي أنشأته لمركز IoT المعين.

  • -d '{"temperature": 30}'، المعلمة –d هي "البيانات" أو نص الرسالة التي ننشرها. بالنسبة لهذه المقالة، نقوم بنشر نقطة بيانات درجة حرارة واحدة. تم تحديد نوع المحتوى على أنه application/json، لذلك، لهذا الطلب، النص الأساسي هو JSON. لاحظ أنه بالنسبة إلى curl، يتم تضمينه في علامات اقتباس مفردة؛ وإلا، تحتاج إلى الهروب من علامات الاقتباس المزدوجة في JSON.

  • المعلمة الأخيرة هي عنوان URL للنشر إليه. بالنسبة إلى واجهة برمجة تطبيقات حدث إرسال الجهاز، يكون عنوان URL هو: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • استبدل [assigned_iot_hub_name] باسم مركز IoT الذي تم تعيين جهازك إليه.

    • استبدل [device_id] بمعرف الجهاز الذي تم تعيينه عند تسجيل جهازك. بالنسبة للأجهزة التي توفر من خلال مجموعات التسجيل، سيكون معرف الجهاز هو معرف التسجيل. بالنسبة للتسجيلات الفردية، يمكنك، اختياريا، تحديد معرف جهاز يختلف عن معرف التسجيل في إدخال التسجيل.

على سبيل المثال، لجهاز بمعرف my-symkey-device جهاز لإرسال نقطة بيانات تتبع الاستخدام إلى مركز IoT يسمى MyExampleHub:

curl -L -i -X POST -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -H 'Authorization: SharedAccessSignature sr=MyExampleHub.azure-devices.net%2Fdevices%2Fmy-symkey-device&sig=f%2BwW8XOKeJOtiPc9Iwjc4OpExvPM7NlhM9qxN2a1aAM%3D&se=1663119026' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-symkey-device/messages/events?api-version=2020-03-13

سيكون للاتصال الناجح استجابة مشابهة للآتي:

HTTP/1.1 204 No Content
Content-Length: 0
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: 9e278582-3561-417b-b807-76426195920f
Date: Wed, 14 Sep 2022 00:32:53 GMT

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