Azure IoT Hub SAS令牌不会过期

问题描述 投票:0回答:1
  • SDK:C#
  • 版本:Microsoft.Azure.Devices.Client 1.2.3
  • 错误再现代码: 让以下运行15分钟左右*您将看到尽管令牌应该已过期,但发送仍然成功。 var hostName = ... var deviceId = ... var sasToken = new SharedAccessSignatureBuilder { Key = sharedAccessKey, Target = $"{hostName}/devices/{deviceId}", TimeToLive = TimeSpan.FromMinutes(5) } .ToSignature(); var authenticationMethod = new DeviceAuthenticationWithToken(deviceId, sasToken); var connectionString = IotHubConnectionStringBuilder .Create(hostName, authenticationMethod) .ToString(); var deviceClient = DeviceClient .CreateFromConnectionString(connectionString, TransportType.Mqtt); while (true) { Console.WriteLine($"{DateTime.UtcNow}: Sending"); var messageContent = Encoding.UTF8.GetBytes("{}"); var message = new Message(messageContent); await deviceClient.SendEventAsync(message); await Task.Delay(TimeSpan.FromSeconds(10)); }

如果我错了,请纠正我,但这是否意味着开放连接永不过期?这是谁的错?我会说IoT Hub应该在令牌到期时关闭连接,对吧?

*在内部,一个令牌似乎有效五分钟,因为这就是他们定义为MaxClockSkew。因此,为了节省您一些时间,您可以将SharedAccessSignatureBuilder.TimeToLive设置为-4.9分钟,并且令牌应在0.1分钟内到期。

c# azure-iot-hub azure-iot-sdk
1个回答
1
投票

这是一个已经报告的错误 - 目前如果您使用MQTT,则在设备连接时检查令牌,但在令牌过期时设备未被IoT Hub断开。我没有这个问题的公开链接。我只是尝试使用AMQP并在SAS过期时收到授权错误,HTTP也是如此。所以问题只存在于目前的MQTT协议中。

© www.soinside.com 2019 - 2024. All rights reserved.