Aracılığıyla paylaş


SDK olmadan HTTPS üzerinden simetrik anahtarları kullanma

Bu nasıl yapılır makalesinde, Azure IoT DPS cihaz SDK'sı kullanmadan HTTPS üzerinden simetrik anahtarlar kullanarak bir cihaz sağlayacağınız. Çoğu dil, HTTP istekleri göndermek için kitaplıklar sağlar, ancak bu makalede https üzerinden gönderip almak için belirli bir dile odaklanmak yerine cURL komut satırı aracını kullanacaksınız.

Linux veya Windows makinesinde bu makaledeki adımları izleyebilirsiniz. Linux için Windows Alt Sistemi (WSL) üzerinde veya Linux makinesinde çalıştırıyorsanız, yerel sisteminizdeki tüm komutları bash istemine girebilirsiniz. Windows'da çalıştırıyorsanız yerel sisteminizdeki tüm komutları GitBash istemine girin.

Kullanmayı seçtiğiniz kayıt girişinin türüne bağlı olarak bu makalede farklı yollar vardır. Önkoşulları yükledikten sonra devam etmeden önce Genel Bakış'ı okuduğunuzdan emin olun.

Önkoşullar

  • Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • Azure portalıyla IoT Hub Cihazı Sağlama Hizmeti'ni ayarlama makalesindeki adımları tamamlayın.

  • Makinenizde Python 3.7 veya sonraki bir sürümün yüklü olduğundan emin olun. komutunu çalıştırarak python --versionPython sürümünüzü de kontrol edebilirsiniz.

  • Windows'da çalıştırıyorsanız Git'in en son sürümünü yükleyin. Git'in komut penceresi tarafından erişilebilen ortam değişkenlerine eklendiğinden emin olun. Yüklenecek araçların en son sürümü git için, yerel Git deponuzla etkileşim kurmak için kullanabileceğiniz komut satırı uygulaması Git Bash'i içeren Yazılım Özgürlüğü Koruması'nın Git istemci araçlarına bakın. Windows'ta, yerel sisteminizdeki tüm komutları GitBash istemine girersiniz.

  • Azure CLI. Bu makalede Azure CLI komutlarını çalıştırmak için iki seçeneğiniz vardır:

    • Tarayıcınızda CLI komutlarını çalıştıran etkileşimli bir kabuk olan Azure Cloud Shell'i kullanın. Hiçbir şey yüklemeniz gerekmeyen bu seçenek önerilir. Cloud Shell'i ilk kez kullanıyorsanız Azure portalında oturum açın. Cloud Shell'i başlatmak ve Bash ortamını seçmek için Cloud Shell hızlı başlangıcındaki adımları izleyin.
    • İsteğe bağlı olarak yerel makinenizde Azure CLI'yı çalıştırın. Azure CLI zaten yüklüyse, CLI'yi ve uzantıları geçerli sürüme yükseltmek için komutunu çalıştırın az upgrade . Azure CLI'yı yüklemek için bkz . Azure CLI'yi yükleme.
  • Linux veya WSL ortamında çalıştırıyorsanız komutları yerel olarak çalıştırmak için bir Bash istemi açın. Windows ortamında çalıştırıyorsanız GitBash istemini açın.

Genel bakış

Bu makalede, DPS aracılığıyla sağlamak için tek bir kaydı veya kayıt grubunu kullanabilirsiniz.

Bireysel kayıt veya kayıt grubu girdisini oluşturduktan sonra sas belirteci oluşturmaya ve cihazınızı DPS'ye kaydetmeye devam edin.

Bireysel kayıt kullanma

Bu makalede kullanmak üzere yeni bir bireysel kayıt oluşturmak istiyorsanız az iot dps enrollment create komutunu kullanarak simetrik anahtar kanıtlama için tek bir kayıt oluşturabilirsiniz.

Aşağıdaki komut, DPS örneğinin varsayılan ayırma ilkesine sahip bir kayıt girdisi oluşturur ve DPS'nin cihazınız için birincil ve ikincil anahtarları atamasına olanak tanır:

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type symmetrickey
  • Kaynak grubunuzun ve DPS örneğinizin adını kullanın.

  • Kayıt kimliği, cihazınızın kayıt kimliğidir. Kayıt kimliği, alfasayısal karakterlerin yanı sıra özel karakterler içeren büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğundadır): '-', '.', '_', ':'. Son karakter alfasayısal veya tire ('-') olmalıdır. Komutta kullandığınız kayıt kimliğinin bu biçime uydığından emin olun.

Atanan simetrik anahtarlar yanıttaki kanıtlama özelliğinde döndürülür:


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

  ...

}

Bireysel kayıt girdiniz için birincil anahtarı ve kayıt kimliğini (kayıt kimliği) not edin; bunları bu makalenin devamında kullanacaksınız.

Bu makale için mevcut bir bireysel kaydı kullanmak istiyorsanız, az iot dps enrollment show komutuyla birincil anahtarı alabilirsiniz:

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

Kayıt grubu kullanma

Bu makalede kullanmak üzere yeni bir kayıt grubu oluşturmak istiyorsanız az iot dps enrollment-group create komutunu kullanarak simetrik anahtar kanıtlama için bir kayıt grubu oluşturabilirsiniz.

Aşağıdaki komut, DPS örneğinin varsayılan ayırma ilkesine sahip bir kayıt grubu girdisi oluşturur ve DPS'nin kayıt grubu için birincil ve ikincil anahtarları atamasına olanak tanır:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id}
  • Kaynak grubunuzun ve DPS örneğinizin adını kullanın.

  • Kayıt kimliği, alfasayısal karakterlerin yanı sıra özel karakterler içeren büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğundadır): '-', '.', '_', ':'. Son karakter alfasayısal veya tire ('-') olmalıdır. Kayıt grubu için kullanmayı seçtiğiniz herhangi bir ad olabilir.

Atanan simetrik anahtarlar yanıttaki kanıtlama özelliğinde döndürülür:


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

  ...

}

Birincil anahtarı not edin.

Bu makale için mevcut bir bireysel kaydı kullanmak istiyorsanız, az iot dps enrollment-group show komutuyla birincil anahtarı alabilirsiniz:

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

Cihaz anahtarı türet

Grup kayıtlarında simetrik anahtar kanıtlamasını kullanırken, kayıt grubu anahtarlarını doğrudan kullanmazsınız. Bunun yerine, kayıt grubu anahtarından her cihaz için benzersiz bir anahtar türetebilirsiniz. Daha fazla bilgi için bkz . Simetrik anahtarlarla Grup Kayıtları.

Bu bölümde, cihazın benzersiz kayıt kimliğinin HMAC-SHA256 değerini hesaplamak için kayıt grubu birincil anahtarından bir cihaz anahtarı oluşturacaksınız. Sonuç daha sonra Base64 biçimine dönüştürülür.

  1. openssl kullanarak benzersiz anahtarınızı oluşturun. Aşağıdaki Bash kabuğu betiğini kullanacaksınız. değerini {primary-key} daha önce kopyaladığınız kayıt grubunun Birincil Anahtarı ile değiştirin ve değerini cihaz için kullanmak istediğiniz kayıt kimliğiyle değiştirin {contoso-simdevice}. Kayıt kimliği, alfasayısal karakterlerin yanı sıra özel karakterler içeren büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğundadır): '-', '.', '_', ':'. Son karakter alfasayısal veya tire ('-') olmalıdır.

    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. Betik aşağıdaki anahtara benzer bir çıkış oluşturur:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    

Türetilmiş cihaz anahtarını ve bunu oluşturmak için kullandığınız kayıt kimliğini not edin, bunları sonraki bölümde kullanacaksınız.

Cihaz anahtarı türetmek için Azure CLI veya PowerShell'i de kullanabilirsiniz. Daha fazla bilgi edinmek için bkz . Cihaz anahtarı türet.

SAS belirteci oluşturma

Simetrik anahtar kanıtlama kullanılırken, cihazlar Paylaşılan Erişim İmzası (SAS) belirteci kullanarak DPS ile kimlik doğrulaması yapar. Tek bir kayıt aracılığıyla sağlanan cihazlar için belirteç, kayıt girişinde ayarlanan birincil veya ikincil anahtar kullanılarak imzalanır. Kayıt grubu aracılığıyla cihaz sağlama için belirteç, kayıt grubu girişinde birincil veya ikincil anahtar kümesi kullanılarak oluşturulmuş türetilmiş bir cihaz anahtarı kullanılarak imzalanır. Belirteç bir süre sonu süresi ve bir hedef kaynak URI'sini belirtir.

Sas belirteci oluşturmak için aşağıdaki Python betiği kullanılabilir:

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))

Where:

  • [resource_uri] , bu belirteçle erişmeye çalıştığınız kaynağın URI'sidir. DPS için, biçimindedir [dps_id_scope]/registrations/[dps_registration_id]; burada [dps_id_scope] DPS örneğinizin kimlik kapsamıdır ve [dps_registration_id] cihazınız için kullandığınız kayıt kimliğidir.

    Azure portalında örneğinizin Genel Bakış bölmesinden DPS örneğinizin kimlik kapsamını alabilir veya az iot dps show Azure CLI komutunu kullanabilirsiniz (yer tutucuları kaynak grubunuzun ve DPS örneğinizin adıyla değiştirin):

    az iot dps show -g {resource_group_name} --name {dps_name}
    
  • [device_key] , cihazınızla ilişkilendirilmiş cihaz anahtarıdır. Bu anahtar, tek bir kayıtta sizin için belirtilen veya otomatik olarak oluşturulan anahtar ya da grup kaydı için türetilmiş bir anahtardır.

  • [expiry_in_seconds] , bu SAS belirtecinin saniye cinsinden geçerlilik süresidir.

  • [policy] , cihaz anahtarının ilişkilendirildiği ilkedir. DPS cihaz kaydı için ilke sabit olarak 'kayıt' olarak kodlanır.

30 günlük geçerlilik süresine sahip adlı my-symkey-device bir cihaz için örnek giriş kümesi şöyle görünebilir.

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

Cihazınızın ve DPS örneğinizin betiğini değiştirin ve Python dosyası olarak kaydedin; örneğin, generate_token.py. Betiği çalıştırın, örneğin, python generate_token.py. Aşağıdakine benzer bir SAS belirteci vermelidir:

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

ile SharedAccessSignaturebaşlayan satırın tamamını kopyalayın ve kaydedin. Bu satır SAS belirtecidir. Aşağıdaki bölümlerde buna ihtiyacınız olacaktır.

SAS belirteçlerini DPS ve bunların yapısıyla kullanma hakkında daha fazla bilgi edinmek için bkz . SAS ile DPS'ye Erişimi Denetleme.

Cihazınızı kaydetme

Cihazınızı DPS aracılığıyla sağlamak için Cihazı Kaydetme REST API'sini çağırırsınız.

Aşağıdaki curl komutunu kullanın:

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

Where:

  • -L curl'e HTTP yeniden yönlendirmelerini izlemesini söyler.

  • –i curl'e çıkışa protokol üst bilgilerini eklemesini söyler. Bu üst bilgiler kesinlikle gerekli değildir, ancak yararlı olabilir.

  • -X PUT curl'e bunun bir HTTP PUT komutu olduğunu bildirir. Bu API çağrısı için gereklidir.

  • -H 'Content-Type: application/json' DPS'ye JSON içeriği gönderiyoruz ve 'application/json' olması gerektiğini bildirir.

  • -H 'Content-Encoding: utf-8' DPS'ye ileti gövdesi için kullanmakta olduğumuz kodlamayı bildirir. İşletim sisteminiz/istemciniz için uygun değere ayarlayın; ancak genel olarak utf-8şeklindedir.

  • -H 'Authorization: [sas_token]' , DPS'ye SAS belirtecinizi kullanarak kimlik doğrulamasını söyler. [sas_token] değerini SAS belirteci oluşturma bölümünde oluşturduğunuz belirteçle değiştirin.

  • -d '{"registrationId": "[registration_id]"}'–d parametresi, göndermekte olduğumuz iletinin 'verileri' veya gövdesidir. '{"registrationId":"[registration_id"}' biçiminde JSON olmalıdır. Curl için tek tırnak içine alındığını unutmayın; aksi takdirde, JSON'daki çift tırnak işaretinden kurtulmanız gerekir.

  • Son olarak, son parametre gönderilecek URL'dir. "normal" (şirket içi değil) DPS için genel DPS uç noktası global.azure-devices-provisioning.net kullanılır: https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. ve [registration_id] değerlerini uygun değerlerle değiştirmeniz [dps_scope_id] gerekir.

Örneğin:

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

Başarılı bir çağrı aşağıdakine benzer bir yanıta sahip olur:

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"}

Yanıt bir işlem kimliği ve bir durum içerir. Bu durumda, durum olarak assigningayarlanır. DPS kaydı, büyük olasılıkla uzun süre çalışan bir işlem olduğundan zaman uyumsuz olarak gerçekleştirilir. Normalde, cihazınızın ne zaman atandığını veya bir hata oluşup oluşmadığını belirlemek için İşlem Durumu Arama REST API'sini kullanarak durumu yoklarsınız.

DPS için geçerli durum değerleri şunlardır:

  • assigned: durum çağrısından döndürülen değer, cihazın hangi IoT Hub'a atandığını gösterir.

  • assigning: işlem hala çalışıyor.

  • disabled: Kayıt kaydı DPS'de devre dışı bırakılmıştır, bu nedenle cihaz atanamaz.

  • failed: atama başarısız oldu. Neyin başarısız olduğunu errorCode belirtmek için yanıtta bir registrationState kayıtta ve errorMessage döndürülür.

  • unassigned

İşlem Durumu Arama API'sini çağırmak için aşağıdaki curl komutunu kullanın:

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

Cihaz Kaydetme isteğinde kullandığınız kimlik kapsamının, kayıt kimliğinin ve SAS belirtecinin aynısını kullanacaksınız. Cihazı Kaydet yanıtında döndürülen işlem kimliğini kullanın.

Örneğin:

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

Aşağıdaki çıkış, başarıyla atanmış bir cihazın yanıtını gösterir. özelliğinin status olduğuna assigned ve özelliğin registrationState.assignedHub cihazın sağlandığı IoT hub'ına ayarlandığına dikkat edin.

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="
   }
}

Telemetri iletisi gönderme

Telemetri iletisi gönderebilmeniz için önce cihazın atandığı IoT hub'ı için bir SAS belirteci oluşturmanız gerekir. BU belirteci, DPS örneğiniz için SAS belirtecini imzalamak için kullandığınız aynı birincil anahtarı veya türetilmiş cihaz anahtarını kullanarak imzalarsınız.

IoT hub'ınız için SAS belirteci oluşturma

SAS belirtecini oluşturmak için, DPS örneğiniz için belirteci oluşturmak üzere aşağıdaki değişikliklerle aynı kodu çalıştırabilirsiniz:

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

Where:

  • [resource_uri] , bu belirteçle erişmeye çalıştığınız kaynağın URI'sidir. IoT hub'ına ileti gönderen bir cihaz için biçimindedir [iot-hub-host-name]/devices/[device-id].

    • için [iot-hub-host-name], önceki bölümde özelliğinde assignedHub döndürülen IoT Hub konak adını kullanın.

    • için [device-id], önceki bölümdeki özelliğinde deviceId döndürülen cihaz kimliğini kullanın.

  • [device_key] , cihazınızla ilişkilendirilmiş cihaz anahtarıdır. Bu anahtar, tek bir kayıtta sizin için belirtilen veya otomatik olarak oluşturulan anahtar ya da grup kaydı için türetilmiş bir anahtardır. (Daha önce DPS için belirteç oluşturmak için kullandığınız anahtarla aynıdır.)

  • [expiry_in_seconds] , bu SAS belirtecinin saniye cinsinden geçerlilik süresidir.

  • policy=None IoT hub'ına telemetri gönderen bir cihaz için ilke gerekmez, bu nedenle bu parametre olarak Noneayarlanır.

Bir saatlik belirteç geçerlilik süresine sahip adlı MyExampleHub ioT Hub'ına gönderme adlı my-symkey-device bir cihaz için örnek giriş kümesi şöyle görünebilir:

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

Aşağıdaki çıkışta bu girişler için örnek bir SAS belirteci gösterilmektedir:

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

Diğer programlama dillerindeki örnek kodlar da dahil olmak üzere IoT Hub için SAS belirteçleri oluşturma hakkında daha fazla bilgi edinmek için bkz . Paylaşılan Erişim İmzalarını kullanarak IoT Hub'a erişimi denetleme.

Not

Kolaylık olması için Azure CLI az iot hub generate-sas-token komutunu kullanarak IoT hub'ına kayıtlı bir cihaz için SAS belirteci alabilirsiniz. Örneğin, aşağıdaki komut bir saat süresine sahip bir SAS belirteci oluşturur. {iothub_name}için, konak hame'sinin yalnızca ilk bölümüne ihtiyacınız vardır; örneğin, MyExampleHub.

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

IoT hub'ınıza veri gönderme

Cihaza telemetri göndermek için IoT Hub Cihaz Gönderme Olayı REST API'sini çağırırsınız.

Aşağıdaki curl komutunu kullanın:

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

Where:

  • -X POST curl'e bunun bir HTTP POST komutu olduğunu bildirir. Bu API çağrısı için gereklidir.

  • -H 'Content-Type: application/json' IoT Hub'a JSON içeriği gönderiyoruz ve 'application/json' olması gerektiğini bildirir.

  • -H 'Content-Encoding: utf-8' IoT Hub'a ileti gövdesi için kullanmakta olduğumuz kodlamayı bildirir. İşletim sisteminiz/istemciniz için uygun değere ayarlayın; ancak genel olarak utf-8şeklindedir.

  • -H 'Authorization: [sas_token]' IoT Hub'a SAS belirtecinizi kullanarak kimlik doğrulamasını bildirir. değerini atanan IoT hub'ı için oluşturduğunuz belirteçle değiştirin [sas_token] .

  • -d '{"temperature": 30}'–d parametresi, göndermekte olduğumuz iletinin 'verileri' veya gövdesidir. Bu makale için tek bir sıcaklık veri noktası gönderiyoruz. İçerik türü application/json olarak belirtildiğinden, bu istek için gövde JSON olur. Curl için tek tırnak içine alındığını unutmayın; aksi takdirde, JSON'daki çift tırnak işaretinden kurtulmanız gerekir.

  • Son parametre, gönderinin gönderiliyor olduğu URL'dir. Cihaz Olay Gönderme API'si için URL şöyledir: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • değerini cihazınızın atandığı IoT hub'ının adıyla değiştirin [assigned_iot_hub_name] .

    • değerini, cihazınızı kaydettiğinizde atanan cihaz kimliğiyle değiştirin [device_id] . Kayıt grupları aracılığıyla sağlanan cihazlar için cihaz kimliği kayıt kimliği olacaktır. Bireysel kayıtlar için, isteğe bağlı olarak kayıt girişindeki kayıt kimliğinden farklı bir cihaz kimliği belirtebilirsiniz.

Örneğin, adlı bir IoT hub'ına my-symkey-device MyExampleHubtelemetri veri noktası gönderme cihaz kimliğine sahip bir cihaz için:

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

Başarılı bir çağrı aşağıdakine benzer bir yanıta sahip olur:

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

Sonraki Adımlar

  • Simetrik anahtar kanıtlama hakkında daha fazla bilgi edinmek için bkz . Simetrik anahtar kanıtlama.

  • SAS belirteçleri ve bunların yapısı hakkında daha fazla bilgi edinmek için bkz . SAS ile DPS'ye erişimi denetleme.