Azure IoTHub- SAS令牌未过期

时间:2018-07-25 10:32:32

标签: c# azure azure-iot-hub azure-iot-hub-device-management

打包版本: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过期异常,但是为什么在向设备发送消息时却没有发生这种情况?

请帮助解决此问题。

2 个答案:

答案 0 :(得分:0)

对我来说,此问题仅在MQTT中存在。我使用Microsoft.Azure.Devices.Client 1.17.0进行了测试。

对于AMQP和HTTP,IoT Hub不会立即断开设备连接,对于AMQP,令牌过期约10分钟后,您将获得UnauthorizedException。对于HTTP,此时间约为5分钟。

我已经在GitHub上的C#的Azure IoT中心SDK上打开了issue about MQTT

答案 1 :(得分:0)

根据以下git hub问题https://github.com/Azure/azure-iot-sdk-csharp/issues/564https://github.com/Azure/azure-iot-sdk-csharp/issues/565。使用新的c#SDK版本

  

Microsoft.Azure.Devices.Client 1.17.1

IoTHub在用户设置的SAS到期时间后的10分钟内停止接受MQTT令牌,这与AMQP行为一致。延迟是设计使然,用于弥补时钟差异(时序偏斜)。