2017-02-20 26 views
0
  • SDK: C#
  • Версия: 1.2.3 Microsoft.Azure.Devices.Client
  • ошибка код воспроизводства:
    Пусть следующий прогон в течение 15 минут или поэтому *, и вы увидите, что отправка еще успешна, хотя токен должен быть истек.Azure IoT концентратор SAS Токен не истекает

    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 должен закрыть соединение, когда токен истекает, не так ли?

* Внутренний токен действует в течение еще пяти минут, потому что это то, что они определяют как MaxClockSkew. Поэтому, чтобы сэкономить время, вы можете установить SharedAccessSignatureBuilder.TimeToLive -4,9 минуты, а токен должен истечь в течение 0.1 минут.

+0

Это ошибка, о которой уже сообщалось - на данный момент, если вы используете MQTT, токен проверяется, когда устройство подключается, но устройство не отключается концентратором IoT, когда истекает срок действия токена. –

+0

Хорошо, спасибо. Можете ли вы предоставить ссылку на эту проблему? Таким образом, вы имеете в виду при использовании, например, AMQP у вас нет этой проблемы? –

+0

У меня нет публичной ссылки на эту проблему. Я просто попытался с AMQP и получил ошибку авторизации, когда SAS истек, так же, как и с HTTP. Таким образом, проблема существует только с протоколом MQTT. –

ответ

1

Это сообщение об ошибке, о котором уже сообщалось - на данный момент, если вы используете MQTT, токен проверяется при подключении устройства, но устройство не отключается концентратором IoT при истечении срока действия токена. У меня нет публичной ссылки на эту проблему. Я просто попытался с AMQP и получил ошибку авторизации, когда SAS истек, так же, как и с HTTP. Таким образом, проблема существует только с протоколом MQTT.