Azure IoTHub- SAS 令牌不会过期

Azure IoTHub- SAS token does not expire

包版本: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 has expired

但是消息发送正常。但是,如果我停止连接并尝试使用相同的 SAS 创建客户端,我会收到 SAS 过期异常,但为什么在向设备发送消息时不会发生这种情况?

请帮忙解决这个问题。

这个问题只存在于我的 MQTT 中。我用 Microsoft.Azure.Devices.Client 1.17.0.

测试

对于 AMQP 和 HTTP,设备连接不会被 IoT Hub 立即切断,对于 AMQP,令牌过期后大约 10 分钟你会得到 UnauthorizedException。对于 HTTP,这个时间大约是 5 分钟。

我在 GitHub 上打开了一个 issue about MQTT Azure IoT Hub SDK for C#。

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

Microsoft.Azure.Devices.Client 1.17.1

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