2017-02-20 1 views
0
  • SDK를 만료되지 않습니다 : C#
  • 버전 : Microsoft.Azure.Devices.Client 1.2.3
  • 버그 재생 코드 :
    15 분 동안 다음 실행하자 또는 그래서 * 토큰이 만료되었지만 전송이 계속 성공하는 것을 볼 수 있습니다. 내가 틀렸다면푸른 만약 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 허브가 연결을 종료해야한다고 말하겠습니까?

* 내부적으로 토큰은 5 분 이상 유효합니다. 왜냐하면 그 토큰은 MaxClockSkew으로 정의되어 있기 때문입니다. 따라서 시간을 절약하려면 SharedAccessSignatureBuilder.TimeToLive을 -4.9 분으로 설정하고 토큰은 0.1 분 이내에 만료되어야합니다.

+0

이것은 이미보고 된 버그입니다. MQTT를 사용하는 순간, 토큰은 장치가 연결될 때 검사되지만 토큰이 만료되면 장치가 IoT 허브에 의해 연결 해제되지 않습니다. –

+0

감사합니다. 문제에 대한 링크를 제공 할 수 있습니까? 예를 들어 AMQP 당신은이 문제가 없습니까? –

+0

문제에 대한 공개 링크가 없습니다. SAS가 만료되었을 때 AMQP를 사용해 보았지만 인증 오류가 발생했습니다. HTTP에서도 마찬가지입니다. 문제는 현재 MQTT 프로토콜에만 존재합니다. –

답변

1

이것은 이미보고 된 버그입니다. MQTT를 사용하는 순간, 토큰은 장치가 연결될 때 검사되지만 토큰이 만료되면 장치가 IoT 허브에 의해 연결 해제되지 않습니다. 문제에 대한 공개 링크가 없습니다. SAS가 만료되었을 때 AMQP를 사용해 보았지만 인증 오류가 발생했습니다. HTTP에서도 마찬가지입니다. 문제는 현재 MQTT 프로토콜에만 존재합니다.

관련 문제