我们已经启动了一个 PoC,通过 MQTT 将我们现有的一些代码连接到 Azure IoT Hub,以测试 Azure 对标准协议和工具的支持。我们正在使用 Paho 客户端,但收到返回码为 5 的 CONNACK - 未授权。
我们按照有关如何设置 IoT 中心的说明进行操作,并使用 F1(免费)扩展层创建了一个。然后我们按照另一个 Azure 文档下载了设备资源管理器,创建了一个设备并生成了一个 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 ) {}
}
}
}
我们已通过 Wireshark 确认已与 Azure 建立 SSL 连接,并且已发送 CONNECT 数据包。然后我们看到返回码为 5 的 CONNACK 被发送到 Paho,Azure 很快就断开了连接。然后我们查看了“共享访问策略”并尝试了不同的设置。审核日志中没有任何内容,我们对所有内容都启用了“详细”。
是否有人将 Paho(或其他第三方 Java 客户端)连接到 Azure IoT 中心?
我们在哪里可以找到任何诊断信息,以便我们自己解决这个问题?
另一方面,我们搁置了这种(MQTT)方法,并尝试通过 ReST 服务进行连接,并收到一个更加模棱两可的“500-Internal Server Error”作为响应。这使我们认为这里存在更根本的访问问题。F1 缩放中心是否仅支持 Microsoft SDK?我们缺少一些隐藏的访问控制设置吗?名称的格式是否严格,不允许某些字符或大小写?