В настоящее время мы используем Azure IoT-Hub для получения данных с наших устройств IoT. В настоящее время они используют REST API для отправки своих данных, поэтому они будут отправлять данные по адресу, например https://<iothubname>.azure-devices.net/devices/<deviceID>/messages/events
.
с заменой <iothubname> и <deviceID> их конкретными определениями. Для авторизации я добавил поле "Authorization"
в заголовок и вставил токен SAS устройства, созданный с помощью подключаемого модуля Azure IoT для VS Code. Пока это работает, но теперь я хотел бы создать токен самостоятельно для дальнейшей автоматизации.
MS объясняет, как создать токен на их сайте, но у меня это не работает (я пробовал реализацию на python).
Для URI я бы использовал указанный выше, для ключа я бы использовал ключ от устройства в IoT-Hub, но я не уверен, что использовать для policy_name. Я попробовал «iothubowner» по умолчанию и имя устройства.
Кроме того, структура созданного ключа SAS отличается от структуры, созданной подключаемым модулем Azure IoT.
Первая содержит части sr
, sig
, se
и skn
, более поздняя sr
, sig
и se
Устройство, я обновил вопрос соответственно.
Если вы используете пример Python, на который вы ссылались, вот параметры, которые вам нужно использовать:
<iothubname>.azure-devices.net/devices/<deviceID>/messages/events?api-version=2020-03-13
Не указывайте протокол, указывайте версию API
<primary/secondary key>
None
Вам не нужно имя политики при подключении в качестве устройства |
Это создаст правильную подпись SharedAccesSignature, которую вы можете использовать для POST для
https://<iothubname>.azure-devices.net/devices/<deviceID>/messages/events?api-version=2020-03-13
спасибо, отлично работает. Я чувствую себя немного глупо теперь, когда я пропустил опцию policy_name is None
в коде, хотя...
В этом вопросе неясно, пытаетесь ли вы создать токен SAS для устройства или для службы. Оба требуют разных значений для политики и resourceURI.