Iot Hub连接字符串在azure-iot-sdk-c样本中不起作用

时间:2016-12-19 23:08:54

标签: c azure azure-iot-hub

我正在使用覆盆子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

1 个答案:

答案 0 :(得分:1)

我生成并使用SAS密钥作为连接字符串,一切正常。

static const char* connectionString ="HostName=<myiothub>;CredentialType=SharedAccessSignature;DeviceId=<mydevice>;SharedAccessSignature=SharedAccessSignature sr=<iothub>&sig=<saskey>&se=<time>&skn=device" 

我从Device explorer

的预建版本生成了SAS

这很有效,因为正如Control access to IoT Hub中所述:

  

IoT Hub对特定设备进行身份验证的唯一方法是使用   设备标识对称密钥。在共享访问策略的情况下   用于访问设备功能,解决方案必须考虑   组件将安全令牌发布为可信子组件。