#azure-iot-hub #azure-iot-edge
#azure-iot-hub #azure-iot-edge
Вопрос:
В среде Интернета вещей Azure при попытке подключения любых устройств, которые не могут поддерживать использование эталонной архитектурыMicrosoft, рекомендуется трансляция протокола.
Я реализовал шлюз трансляции, который мультиплексирует соединения и функционирует аналогично этой реализации, которая использует политику доступа «подключение устройства» для отправки сообщений в облачный IoT-концентратор от имени любого устройства через одно AMQP-соединение. В качестве примера сообщения отправляются по следующей ссылке '/devices/' deviceIdentifier '/messages/events';
Это полностью функционально для соединения, сформированного device -> my middleware -> Cloud IoT Hub
, и для обратного направления. Я хотел бы реализовать то же самое с введением прозрачного шлюза, то есть device -> my middleware -> Edge IoT Hub -> Cloud IoT Hub
Моя проблема возникает из-за того, что пограничный концентратор, по-видимому, не принимает ключ политики доступа «подключение устройства».
В качестве аутентификации я создаю, SharedAccessSignature
как видно из примера репозитория и ниже, однако, насколько я могу судить, в отличие от SharedAccessKeyAuthenticationProvider.fromConnectionString
, нет способа указать gatewayHostName.
this.sas = SharedAccessSignature.create(
encodeURIComponent(this.endpoint), this.keyName, this.key,
Math.ceil((Date.now() / 1000) this.KEY_TIMEOUT)
);
Короче говоря, я пытаюсь заставить мое промежуточное программное обеспечение «олицетворять» любое из устройств на концентраторе через одно TLS-соединение, используя ключ политики доступа «подключение устройства», через прозрачный пограничный шлюз IoT, однако я не вижу места для указания gatewayHostName
параметра в SharedAccessSignature или найти способ найти и настроить политики общего доступа на уровне IoT hub на пограничном концентраторе IoT.
Комментарии:
1. Когда клиент видит
HostName={a};GatewayHostName={b}
в строке подключения, он знает, что нужно установить TCP-соединение с {b} вместо {a}. Но он также должен добавлять {a} к имени пользователя при установлении соединения, чтобы пограничный концентратор знал, к какому концентратору интернета вещей подключиться. Когда клиент устанавливает соединение с пограничным концентратором с помощью токена уровня концентратора, имя пользователя должно быть{policy}@sas.root.{a}
. Можете ли вы попробовать это?2. Кроме того, я считаю, что переменная среды
AuthenticationMode=Cloud
должна быть установлена в пограничном концентраторе, иначе пограничный концентратор попытается аутентифицировать устройство, чего он не знает, как сделать для ключа политики «подключение устройства». Установка этой переменной делает пограничный концентратор пассивным; он будет передавать запрос аутентификации в IoT Hub. Недостатком является то, что это отключает автономные возможности, поэтому обычно это не рекомендуется.3. Здравствуйте, прежде всего, спасибо за помощь, мне удалось заставить его выполнить шаги
connect
иinitializeCBS
после настройки TransportConfig для включения сертификата SSL CA, я упоминаю об этом только потому, что это может помочь кому-то другому.4. Больше связано с этим вопросом при размещении токена аудитории, который я получаю
Matching template not found for audience amqps://${string}
, для любой из следующих трех строк:"iothubdemo91.azure-devices.net"
,"iothubdemo91"
и"edgeDevice1"
. Далее идет мой SAS и моя аудитория.let sas = SharedAccessSignature.create( encodeURIComponent(${any_of_strings_above}), keyName,key,Math.ceil((Date.now() / 1000) 3600) ); let audience = keyName "@sas.root.iothubdemo91.azure-devices.net" // this.endpoint let token = sas.toString(); amqp.putToken(audience, token);
5. @DamonBarry Не могли бы вы взглянуть на мой последний комментарий? Я могу делать все, что связано с подключением, но я не знаю правильного токена аудитории, это не iothubowner@sas.root . iothubdemo91.azure-devices.net , который работает только для Azure Cloud IoT Hub.