Wir haben ein PoC gestartet, um einen Teil unseres bestehenden Codes mit dem Azure IoT Hub über MQTT zu verbinden, um die Unterstützung von Azure für Standardprotokolle und -tools zu testen. Wir verwenden den Paho-Client, erhalten jedoch einen CONNACK mit einem Rückgabecode von 5 - Nicht autorisiert.Verbinden mit Azure IoT Hub mit Java Paho
Wir verfolgten die instructions auf, wie man einen IoT-Hub einrichtet und einen mit der F1 (frei) Skalierungsstufe erstellt. Wir folgten dann another Azure document und luden den Geräte-Explorer herunter, erstellten ein Gerät und generierten ein SAS-Token. Wir gesteckt dann alles in 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) {}
}
}
}
Wir haben mit Wireshark bestätigt, dass eine SSL-Verbindung zu Azure gemacht wird und dass das CONNECT-Paket gesendet wird. Wir sehen dann das CONNACK mit einem Rückkehrcode von 5 an Paho und Azure, der die Verbindung bald darauf löscht. Wir haben uns dann die "Richtlinien für den gemeinsamen Zugriff" angesehen und verschiedene Einstellungen ausprobiert. Es gibt nichts in den Audit-Protokollen und wir haben "verbose" für alles aktiviert.
Hat jemand Paho (oder einen anderen Java-Client von Drittanbietern) mit dem Azure IoT Hub verbunden?
Wo finden wir irgendwelche diagnostischen Informationen, damit wir selbst diese Fehler beheben können?
Nebenbei bemerkt, haben wir diesen Ansatz (MQTT) auf Eis gelegt und versucht, eine Verbindung über die ReST-Dienste herzustellen und einen noch mehrdeutigen "500-Internal Server Error" als Antwort zu erhalten. Dies lässt uns glauben, dass es hier ein grundlegenderes Zugangsproblem gibt. Unterstützt der F1-Scale-Hub nur das Microsoft SDK? Gibt es versteckte Einstellungen für die Zugriffskontrolle, die wir vermissen? Ist das Format der Namen streng, bestimmte Zeichen oder Fälle nicht erlaubt?
Guter Fang, aber immer noch keine Freude. SAS-Token geändert in 'String sasToken =" SharedAccessSignature sr = CoyoteIoT.azure-devices.net% 2fdevices% 2fdevice-fcbd127a & sig = 3acRHQXXXXXXXXXXX Zg% 3d & se = 1468067737 ";' erhält immer noch den Rückgabecode 5. Das Beispiel für das SAS-Token wurde geändert mit Ihrem Feedback - Danke! – SCote
Also arbeitet MQTT.fx mit IoT Hub, testete es selbst - http://mqttfx.jfx4ee.org/. Es ist auf Paho gebaut. Ich schätze, Wiresharking seinen Verkehr und zu sehen, was anders ist als was auch immer Ihr Code auf dem Draht produziert, wäre ein guter Anfang. – evilSnobu
Wenn Sie nach einem schnellen Weg suchen, TLS zu schnüffeln, verwenden Sie einfach STunnel. Funktioniert auch unter Windows wunderbar - https://www.stunnel.org/index.html – evilSnobu