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=3acRHQXXXXXXXXXXXZg%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 のみをサポートしていますか? 不足している非表示のアクセス制御設定はありますか? 名前の形式は厳密で、特定の文字や大文字/小文字を使用できませんか?