1

Azure の標準プロトコルとツールのサポートをテストするために、既存のコードの一部を MQTT 経由で Azure IoT Hub に接続する PoC を開始しました。Paho クライアントを使用していますが、戻りコード 5 – Not Authorized の CONNACK を取得しています。

IoT Hub のセットアップ方法に関する指示に従い、F1 (無料) スケール レベルを使用して IoT Hub を作成しました。次に、別の Azure ドキュメントに従ってDevice Explorer をダウンロードし、デバイスを作成して SAS トークンを生成しました。次に、すべてを Paho に接続しました。

public static void main( String[] args ) {
  String deviceId = "device-fcbd127a";
  String sasToken = "SharedAccessSignature sr=CoyoteIoT.azure-devices.net%2fdevices%2fdevice-fcbd127a&sig=3acRHQXXXXXXXXXXX‌​Zg%3d&se=1468067737";
  String brokerUri = "ssl://CoyoteIoT.azure-devices.net:8883";
  String clientId = deviceId;
  System.out.println( "Connecting to " + brokerUri +" as "+clientId);

  MqttAsyncClient client = null;
  try {
    client = new MqttAsyncClient( brokerUri, clientId );
    if ( client != null ) {
      MqttConnectOptions options = new MqttConnectOptions();
      client.setCallback( new AzureCallback() );
      options.setUserName( "CoyoteIoT.azure-devices.net/device-fcbd127a"     );
      options.setPassword( sasToken.toCharArray() );
      IMqttToken token = client.connect( options );
      token.waitForCompletion( 5000 );
      if ( client.isConnected() ) {
        System.out.println( "Success!" );
      } else {
        System.out.println( "Could not connect to Azure IoT hub, timed-out" );
      }
    }
  } catch ( MqttException e ) {
    client.getDebug().dumpBaseDebug();
    e.printStackTrace();
  } finally {
    if ( client != null ) {
      try {
        client.disconnect();
      } catch ( MqttException ignore ) {}
    }
  }
}

AzureにSSL接続され、CONNECTパケットが送信されることをWiresharkで確認しています。その後、リターン コード 5 の CONNACK が Paho に送信され、その後すぐに Azure が接続をドロップすることがわかります。次に、「共有アクセス ポリシー」を調べて、さまざまな設定を試しました。監査ログには何も記録されておらず、すべてに対して「詳細」がオンになっています。

Paho (または他のサードパーティ Java クライアント) を Azure IoT Hub に接続した人はいますか?

自分でトラブルシューティングできるように、診断情報はどこにありますか?

余談ですが、私たちはこの (MQTT) アプローチを棚上げし、ReST サービス経由で接続しようとしたところ、応答としてさらにあいまいな「500-Internal Server Error」を受け取りました。これにより、ここにはより根本的なアクセスの問題があると考えられます。F1 スケール ハブは Microsoft SDK のみをサポートしていますか? 不足している非表示のアクセス制御設定はありますか? 名前の形式は厳密で、特定の文字や大文字/小文字を使用できませんか?

4

4 に答える 4

1

どうやら、デバイス エクスプローラー ユーティリティに問題があったようです。有効期限が 365 日の SAS トークンを生成する代わりに、365 秒しか有効でないトークンを生成しました。

SAS トークンの に注意してください。これse=1468067737は、2016 年 7 月 9 日 08:35:37 EDT の有効期限に評価され、テストの実行を大幅に過ぎています。

于 2016-08-01T21:03:48.380 に答える