我正在使用覆盆子pi 3,raspbian OS,我正在使用azure-iot-sdk-c
我按照这里的github说明进行操作:https://github.com/Azure/azure-iot-sdk-c,我下载并正确构建了iothub_client / samples文件夹中的所有示例
当我将连接字符串放在iothub_client_sample_http.c
中时,错误是下面:
static const char* connectionString = "[device connection string]";
并运行它,我得到许多这样的错误:
错误:时间:2016年12月19日星期一14:23:36 文件:/home/pi/Desktop/azure-iot-sdk-c/c-utility/adapters/httpapi_curl.c Func:HTTPAPI_ExecuteRequest行:576 HTTP通信失败: 服务器回复代码是401 Info:HTTP 响应:{ “消息”: “错误码:IotHubUnauthorizedAccess;未授权”, “ExceptionMessage”:“跟踪 ID:13262df6828d469e9b29e2176a86fad3-G:9-时间戳:2016年12月19日 22:23:37“}错误:时间:2016年12月19日星期一14:23:36 文件:/home/pi/Desktop/azure-iot-sdk-c/iothub_client/src/iothubtransporthttp.c Func:DoEvent Line:1626意外的HTTP状态代码(401)
这是我的连接结构:
static const char* connectionString = "HostName=<myiothub>;DeviceId=<mydevice>;SharedAccessKey=<myaccesskey>";
如果我直接使用azure门户网站提供的字符串,为什么它会给我一个401?
我已尝试过每个连接字符串(hubowner,service&amp; device)并仍然给我401:C
答案 0 :(得分:1)
我生成并使用SAS密钥作为连接字符串,一切正常。
static const char* connectionString ="HostName=<myiothub>;CredentialType=SharedAccessSignature;DeviceId=<mydevice>;SharedAccessSignature=SharedAccessSignature sr=<iothub>&sig=<saskey>&se=<time>&skn=device"
的预建版本生成了SAS
这很有效,因为正如Control access to IoT Hub中所述:
IoT Hub对特定设备进行身份验证的唯一方法是使用 设备标识对称密钥。在共享访问策略的情况下 用于访问设备功能,解决方案必须考虑 组件将安全令牌发布为可信子组件。