Azure的物联网SDK C:错误401连接到Blob存储时

问题描述 投票:0回答:2

操作系统和版本:Ubuntu的18.04

SDK版本中使用:发布2018年12月13日

目标:ESP32。

问题说明:

我想给ESP32连接到我的Blob存储。我正在一个HTTP错误401(未授权访问)。我使用的例子:iothub_client_sample_upload_to_blob_mb。我尝试使用刚刚在我的连接字符串的共享访问键连接,但这并没有工作(无连接)。从那以后,我产生在Azure中SAS令牌(存储帐户 - > - >共享访问签名),并插在了我的连接字符串。我的连接字符串如下所示:

static const char* connectionString = "HostName=<Host name>;DeviceId=<Device ID>;SharedAccessSignature=<inserted here without the "?" at the beginning>"; 

Q1:“?”为什么会有在令牌的面前?当我看到在连接字符串,在SharedAccessSignature = ..我没有看到“?”。

我还下设物联网中心端点Azure中 - >上传文件。在这个例子中,我使用的选项SET_TRUSTED_CERT_IN_SAMPLES。

Q2:这是什么意思?我不是那么熟悉了基本的加密和也许应该对阅读起来。

Q3:为什么我会得到一个401错误?这可能是一个可能的解决方案?

日志:

初始化SNTP ESP平台SNTP inited!时间尚未设定。连接到无线网络并获得了时间NTP。 timeinfo.tm_year:70等待系统时间被设置... tm_year:0 [次:1]启动IoTHub客户端上传样品与多个块成团块...

信息:等待TLS连接信息:等待TLS连接信息:等待TLS连接信息:等待TLS连接

错误:时间:星期四1月17日22:06:00 2019文件:/home/julian/eclipse-workspace/chaze-esp32/components/esp-azure/azure-iot-sdk-c/iothub_client/src/iothub_client_ll_uploadtoblob.c Func键:send_http_request行:142 HTTP代码为401

错误:时间:星期四1月17日22:06:00 2019文件:/home/julian/eclipse-workspace/chaze-esp32/components/esp-azure/azure-iot-sdk-c/iothub_client/src/iothub_client_ll_uploadtoblob.c Func键:IoTHubClient_LL_UploadToBlob_step1and2线:494无法HTTPAPIEX_ExecuteRequest

错误:时间:星期四1月17日22:06:00 2019文件:/home/julian/eclipse-workspace/chaze-esp32/components/esp-azure/azure-iot-sdk-c/iothub_client/src/iothub_client_ll_uploadtoblob.c Func键:IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl线:768错误IoTHubClient_LL_UploadToBlob_step1收到意想不到的结果FILE_UPLOAD_ERROR

世界你好上传失败按任意键继续

Here是链接到GitHub的回购。

这个例子可以发现here

azure azure-iot-hub esp32 azure-iot-sdk
2个回答
1
投票

我产生了Azure中SAS令牌(存储帐户 - > - >共享访问签名),并插在了我的连接字符串。我的连接字符串如下所示:

static const char* connectionString = "HostName=<Host name>;DeviceId=<DeviceID>;SharedAccessSignature=<inserted here without the "?" at the beginning>";

Q1:“?”为什么会有在令牌的面前?当我看到在连接字符串,在SharedAccessSignature = ..我没有看到“?”。

在IoTHub注册设备后,您将需要找回它的连接字符串在这个例子中使用。见here如何注册和检索从上IoTHub一个装置的连接串的例子。

我还下设物联网中心端点Azure中 - >上传文件。在这个例子中,我使用的选项SET_TRUSTED_CERT_IN_SAMPLES。

Q2:这是什么意思?我不是那么熟悉了基本的加密和也许应该对阅读起来。

编译为您的设备SDK时,该标志被使用。见the CMake File

#Conditionally use the SDK trusted certs in the samples
if(${use_sample_trusted_cert})
    add_definitions(-DSET_TRUSTED_CERT_IN_SAMPLES)
    include_directories(${PROJECT_SOURCE_DIR}/certs)
    set(iothub_client_sample_upload_to_blob_mb_c_files ${iothub_client_sample_upload_to_blob_mb_c_files} ${PROJECT_SOURCE_DIR}/certs/certs.c)
endif()

Q3:为什么我会得到一个401错误?这可能是一个可能的解决方案?

确保你在Azure上IoTHub正确配置文件上传 - https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-file-upload并使用正确的连接字符串的样本。还利用the ESP8266 sample应该有类似的步骤为ESP32配置。


0
投票

为了摆脱401错误:在代码中使用MSFT巴尔的摩证书。为了摆脱对ESP的恐慌:看看这个GitHub上issue

© www.soinside.com 2019 - 2024. All rights reserved.