【问题标题】:Iot Hub connection string not working in azure-iot-sdk-c samplesIoT Hub 连接字符串在 azure-iot-sdk-c 示例中不起作用
【发布时间】:2016-12-19 23:08:53
【问题描述】:

我正在使用 raspberry pi 3、raspbian 操作系统,并且正在使用 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 Line:576 HTTP 通信失败: 服务器回复代码是 401 信息:HTTP 响应:{"Message":"ErrorCode:IotHubUnauthorizedAccess;Unauthorized","ExceptionMessage":"跟踪 ID:13262df6828d469e9b29e2176a86fad3-G:9-时间戳:12/19/2016 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?

我已经尝试了每个连接字符串(集线器所有者、服务和设备),但仍然给我 401 :C

【问题讨论】:

  • 您的 Raspberry Pi 上的时区和/或时间是否设置不正确?这将导致 SAS 中设置的到期时间戳出现问题。我问这个是因为您的 SDK 在 14:23:36 报告错误,但 IoT 中心时间戳是 22:23:37 (UTC)。
  • 我确保树莓派中的时间是正确的,时区也重要吗?
  • 是的,我相信。此链接解释了如何在 raspbian 中设置时区:rohankapoor.com/2012/04/americanizing-the-raspberry-pi

标签: c azure azure-iot-hub


【解决方案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 中心对特定设备进行身份验证的唯一方法是使用 设备身份对称密钥。如果共享访问策略是 用于访问设备功能,解决方案必须考虑 将安全令牌作为可信子组件发布的组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多