Azure IoTHub- токен SAS не истекает
Версия пакета: Microsoft.Azure.Devices.Client 1.17.0
Я создал клиент устройства следующим образом
deviceClient = DeviceClient.Create(s_iotHubUri, new DeviceAuthenticationWithToken(deviceId, sasToken), Microsoft.Azure.Devices.Client.TransportType.Amqp);
Я использую deviceClient
отправлять сообщения, используя deviceClient.SendEventAsync(message)
, Например, срок действия SAS составляет 5 минут (например), но срок действия SAS вообще не истекает, а сообщения отправляются с помощью клиента устройства. Я ожидаю исключения, как:
SAS истек
Но сообщения отправляются нормально. Но если я остановлю соединение и попытаюсь создать клиента, используя тот же SAS, я получу исключение SAS expired, но почему это не происходит при отправке сообщений на устройство?
Пожалуйста, помогите с этой проблемой.
2 ответа
В соответствии со следующими проблемами в git hub, https://github.com/Azure/azure-iot-sdk-csharp/issues/564 и https://github.com/Azure/azure-iot-sdk-csharp/issues/565 С новой версией C# SDK,
Microsoft.Azure.Devices.Client 1.17.1
IoTHub прекращает принимать токен для MQTT через 10 минут после истечения времени истечения SAS, установленного пользователем, что согласуется с поведением AMQP. Задержка является заданной и используется, чтобы скрыть разницу в тактах (искажение времени).
Эта проблема существует только с MQTT для меня. Я тестирую с Microsoft.Azure.Devices.Client 1.17.0.
Что касается AMQP и HTTP, то соединение с устройством не прерывается IoT Hub сразу, для AMQP, через 10 минут после истечения срока действия токена, вы получите UnauthorizedException
, Для HTTP это время около 5 минут.
Я открыл вопрос о MQTT в Azure IoT Hub SDK для C# на GitHub.