Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описано, как подготовить устройство с помощью симметричного ключа по протоколу HTTPS без использования пакета SDK для устройств Azure IoT DPS. Большинство языков предоставляют библиотеки для отправки HTTP-запросов, но вместо того, чтобы сосредоточиться на определенном языке, в этой статье вы будете использовать средство командной строки cURL для отправки и получения по протоколу HTTPS.
Действия, описанные в этой статье, можно выполнить на компьютере Под управлением Linux или Windows. Если вы работаете на подсистема Windows для Linux (WSL) или работаете на компьютере Linux, вы можете ввести все команды в локальной системе в командной строке Bash. Если вы работаете в Windows, введите все команды в локальной системе в командной строке GitBash.
В этой статье существуют различные пути в зависимости от типа записи регистрации, используемой вами. После установки необходимых компонентов перед продолжением работы ознакомьтесь с обзором.
Необходимые компоненты
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Выполните инструкции по настройке Службы подготовки устройств к добавлению в Центр Интернета вещей на портале Microsoft Azure.
Убедитесь, что на компьютере установлен Python 3.7 или более поздней версии. Вы можете проверить версию Python, выполнив команду
python --version.Если вы работаете в Windows, установите последнюю версию Git. Обязательно добавьте GIT в переменные среды, доступные в командном окне. Последнюю версию средств для установки, которая включает
git(приложение командной строки для взаимодействия с локальным репозиторием GIT), можно найти на этой странице. В Windows введите все команды в локальной системе в командной строке GitBash.Azure CLI. В этой статье описано два варианта выполнения команд Azure CLI:
- Azure Cloud Shell — интерактивная оболочка CLI, которая работает в браузере. Этот вариант предпочтителен, так как не нужно ничего устанавливать. Если вы впервые используете Cloud Shell, войдите на портал Azure. Выполните действия, описанные в кратком руководстве Cloud Shell, чтобы запустить Cloud Shell и выбрать среду Bash.
- Azure CLI также можно запустить на локальном компьютере. Если интерфейс командной строки Azure уже установлен, запустите
az upgrade, чтобы обновить интерфейс командной строки и расширения до текущей версии. Сведения об установке 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
},
...
}
Запишите основной ключ и идентификатор регистрации (enrollment ID) для индивидуальной записи, вы будете использовать их далее в этой статье.
Если вы хотите использовать существующую индивидуальную регистрацию для этой статьи, вы можете получить первичный ключ с помощью команды 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 , чтобы создать группу регистрации для аттестации симметричного ключа.
Следующая команда создает запись группы регистрации с политикой выделения по умолчанию для экземпляра 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.
Создайте уникальный ключ с помощью opensl. Вы используете следующий скрипт оболочки Bash. Замените
{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Скрипт выводит примерно следующий ключ:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
Запишите производный ключ устройства и идентификатор регистрации, который вы использовали для его создания, используйте их в следующем разделе.
Вы также можете использовать Azure CLI или PowerShell для получения ключа устройства. Дополнительные сведения см. в разделе "Производный ключ устройства".
Создание маркера SAS
При использовании аттестации симметричного ключа устройства проходят проверку подлинности в DPS с помощью токена подписи общедоступного доступа (SAS). Для устройств, подготавливающихся с помощью отдельной регистрации, маркер подписывается с помощью первичного или вторичного ключа в записи регистрации. Для подготовки устройства через группу регистрации токен подписывается с помощью производного ключа устройства, который, в свою очередь, создается с помощью первичного или вторичного ключа в записи группы регистрации. Маркер указывает время истечения срока действия и URI целевого ресурса.
Для создания маркера SAS можно использовать следующий скрипт Python:
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 можно получить из области обзора экземпляра в портал Azure или использовать команду az iot dps (замените заполнители именем группы ресурсов и экземпляра DPS):
az iot dps show -g {resource_group_name} --name {dps_name}[device_key]— это ключ устройства, связанный с устройством. Этот ключ является либо указанным, либо автоматически созданным для вас в отдельной регистрации, либо производным ключом для регистрации группы.Если вы используете отдельную регистрацию, используйте первичный ключ, сохраненный в Use an individual enrollment.
Если вы используете группу регистрации, используйте производный ключ устройства, созданный в группе регистрации.
[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 и их структурой см. в разделе «Управление доступом к службе предварительной настройки устройств Azure IoT Hub (DPS) с помощью подписанных URL-адресов и маркеров безопасности».
Зарегистрировать устройство
Вы вызываете REST API регистрации устройств для подготовки устройства с помощью 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. Требуется для этого вызова API.-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— это, возможно, длительная операция, поэтому она выполняется асинхронно. Как правило, вы проверяете состояние с помощью API для проверки состояния операции, чтобы определить, назначено ли ваше устройство или произошла ошибка.
Допустимые значения состояния для DPS:
assigned: возвращаемое значение из вызова статуса указывает, к какому Центру Интернета вещей было привязано устройство.assigning: операция по-прежнему выполняется.disabled: запись регистрации отключена в DPS, поэтому устройство не может быть назначено.failed: сбой назначения. ЗначенияerrorCodeиerrorMessageвозвращаются в записиregistrationStateв ответе, чтобы указать, что завершилось сбоем.unassigned
Чтобы вызвать API подстановки состояния операции, используйте следующую команду 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 задано в Центре Интернета вещей, где было подготовлено устройство.
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 для Центра Интернета вещей, которому было назначено устройство. Вы подписываете этот маркер с помощью того же первичного ключа или производного ключа устройства, который использовался для подписи маркера SAS для экземпляра DPS.
Создание маркера SAS для Центра Интернета вещей
Чтобы создать маркер SAS, можно выполнить тот же код, который вы сделали для создания маркера для экземпляра DPS со следующими изменениями:
uri = '[resource_uri]'
key = '[device_key]'
expiry = [expiry_in_seconds]
policy= None
Где:
[resource_uri]— URI ресурса, к которым вы пытаетесь получить доступ с помощью этого маркера. Для устройства, отправляющего сообщения в Центр Интернета вещей, это форма[iot-hub-host-name]/devices/[device-id].Для
[iot-hub-host-name]этого используйте имя узла Центр Интернета вещей, возвращаемое вassignedHubсвойстве в предыдущем разделе.Для
[device-id]этого используйте идентификатор устройства, возвращенный вdeviceIdсвойстве в предыдущем разделе.
[device_key]— это ключ устройства, связанный с устройством. Этот ключ является либо указанным, либо автоматически созданным для вас в отдельной регистрации, либо производным ключом для регистрации группы. (Это тот же ключ, который использовался ранее для создания маркера для DPS.)Если вы используете отдельную регистрацию, используйте первичный ключ, сохраненный в Use an individual enrollment.
Если вы используете группу регистрации, используйте производный ключ устройства, созданный в группе регистрации.
[expiry_in_seconds]— это срок действия этого маркера SAS в секундах.policy=NoneДля устройства, отправляющего данные телеметрии в Центр Интернета вещей, политика не требуется, поэтому этот параметр имеет значениеNone.
Пример набора входных данных для устройства, вызываемого my-symkey-device отправкой в Центр Интернета вещей с 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 для Центра Интернета вещей, включая пример кода на других языках программирования, см. в статье "Управление доступом к Центру Интернета вещей с помощью подписанных URL-адресов".
Примечание.
В качестве удобства можно использовать команду azure CLI az iot hub generate-sas-token, чтобы получить маркер SAS для устройства, зарегистрированного в Центре Интернета вещей. Например, следующая команда создает маркер SAS с длительностью в течение одного часа. В {iothub_name} требуется только первая часть имени узла, например, MyExampleHub.
az iot hub generate-sas-token -d {device_id} -n {iothub_name}
Отправка данных в Центр Интернета вещей
Вызовите REST API событий устройства Центр Интернета вещей для отправки телеметрии на устройство.
Используйте следующую команду 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. Требуется для этого вызова API.-H 'Content-Type: application/json'сообщает Центр Интернета вещей, что мы публикуем содержимое JSON и должны быть "application/json".-H 'Content-Encoding: utf-8'сообщает Центр Интернета вещей кодировку, которую мы используем для нашего текста сообщения. Задайте правильное значение для операционной системы или клиента; однако обычно этоutf-8.-H 'Authorization: [sas_token]'сообщает Центр Интернета вещей аутентификации с помощью маркера SAS. Замените[sas_token]маркер, созданный для назначенного Центра Интернета вещей.-d '{"temperature": 30}'–dПараметр — это "данные" или текст сообщения, которое мы публикуем. В этой статье мы публикуем одну точку данных температуры. Тип контента был указан как application/json, поэтому для этого запроса текст — JSON. Для curl он обернут в одинарные кавычки; в противном случае необходимо экранировать двойные кавычки в формате JSON.Последним параметром является URL-адрес для публикации. Для API событий отправки устройства URL-адрес:
https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13Замените
[assigned_iot_hub_name]именем Центра Интернета вещей, которому было назначено ваше устройство.Замените
[device_id]идентификатор устройства, назначенный при регистрации устройства. Для устройств, которые настраиваются через группы регистрации, идентификатор устройства — это идентификатор регистрации. Для индивидуальных регистраций можно, при желании, указать ID устройства, отличный от идентификатора регистрации в записи об регистрации.
Например, для устройства с идентификатором my-symkey-device устройства для отправки точки данных телеметрии в центр Интернета вещей с именем 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
Дальнейшие шаги
Дополнительные сведения об аттестации симметричного ключа см. в статье "Аттестация симметричного ключа".
Дополнительные сведения о маркерах SAS и их структуре см. в статье Управление доступом к службе подготовки устройств Центра Интернета вещей Azure (DPS) с помощью подписанных URL-адресов и маркеров безопасности.