Azure IoT SDK C:连接到Blob存储时出现错误401

Azure IoT SDK C:连接到Blob存储时出现错误401,azure,azure-iot-hub,esp32,azure-iot-sdk,Azure,Azure Iot Hub,Esp32,Azure Iot Sdk,操作系统和使用的版本:Ubuntu 18.04 使用的SDK版本:2018年12月13日发布 目标:ESP32 问题描述: 我正在尝试将ESP32连接到Blob存储。我收到一个HTTP错误401(未经授权的访问)。 我使用的例子是:iothub\u客户端\u示例\u上传\u到\u blob\u mb。 我尝试仅使用连接字符串中的共享访问密钥进行连接,但这不起作用(无连接)。之后,我在Azure中生成了一个SAS令牌(存储帐户->->共享访问签名),并将其插入到我的连接字符串中。 我的连接字符串如

操作系统和使用的版本:Ubuntu 18.04

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

目标:ESP32

问题描述:

我正在尝试将ESP32连接到Blob存储。我收到一个HTTP错误401(未经授权的访问)。 我使用的例子是:iothub\u客户端\u示例\u上传\u到\u blob\u mb。 我尝试仅使用连接字符串中的共享访问密钥进行连接,但这不起作用(无连接)。之后,我在Azure中生成了一个SAS令牌(存储帐户->->共享访问签名),并将其插入到我的连接字符串中。 我的连接字符串如下所示:

static const char* connectionString = "HostName=<Host name>;DeviceId=<Device ID>;SharedAccessSignature=<inserted here without the "?" at the beginning>"; 
static const char*connectionString=“主机名=;设备ID=;SharedAccessSignature=”;
问题1:为什么令牌前面有一个“?”?当我查看连接字符串时,在SharedAccessSignature=。。我看不到“?”

我还在Azure的IoT Hub->Upload files下设置了端点。 在本例中,我在示例中使用选项SET\u TRUSTED\u CERT\u

问题2:这是什么意思?我对基本的加密技术不太熟悉,可能应该仔细阅读一下

问题3:为什么我会遇到401错误?可能的解决办法是什么

日志:

初始化SNTP ESP平台sntp初始化! 时间尚未确定。连接到WiFi并通过NTP获得时间。timeinfo.tm_年份:70 正在等待设置系统时间。。。tm_年份:0[次数:1] 正在启动IoTHub客户端示例上载到具有多个块的blob

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

错误:时间:2019年1月17日星期四22:06:00文件:/home/julian/eclipse workspace/chaze-esp32/components/esp-azure/azure-iot-sdk-c/iothub_-client/src/iothub_-client_-ll_-loadtoblob.c函数:发送http_请求行:142 http代码为401

错误:时间:2019年1月17日星期四22:06:00文件:/home/julian/eclipse workspace/chaze-esp32/components/esp-azure/azure-iot-sdk-c/iothub_-client/src/iothub_-client_-ll_-uploadtoblob.c函数:IoTHubClient_-ll_-uploadtoblob第1步和第2行:494无法HTTPAPIEX_-executer请求

错误:时间:2019年1月17日星期四22:06:00文件:/home/julian/eclipse workspace/chaze-esp32/components/esp azure/azure-iot-sdk-c/iothub\u client/src/iothub\u client\u ll\u uploadtoblob.c函数:IoTHubClient\u ll\u uploadmultipleblockstoblock\u Impl行:768 IoTHubClient\u uploadtobloadtoblob\u步骤1中的错误 收到意外的结果文件\u上载\u错误

hello world无法上载 按任意键继续

是指向GitHub Repo的链接

可以找到这个例子

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

static const char* connectionString = "HostName=<Host name>;DeviceId=<Device ID>;SharedAccessSignature=<inserted here without the "?" at the beginning>"; 
static const char*connectionString=“主机名=;设备ID=;SharedAccessSignature=”

问题1:为什么令牌前面有一个“?”?当我查看连接字符串时,在SharedAccessSignature=。。我看不到“?”

在IoTHub上注册设备后,您需要检索该设备的连接字符串,以便在此示例中使用。请参阅有关如何从IoTHub上的设备注册和检索连接字符串的示例

我还在Azure的IoT Hub->Upload files下设置了端点。在本例中,我在示例中使用选项SET\u TRUSTED\u CERT\u

问题2:这是什么意思?我对基本的加密技术不太熟悉,可能应该仔细阅读一下

该标志在为设备编译SDK时使用。见:

问题3:为什么我会遇到401错误?可能的解决办法是什么


确保在Azure IoTHub上正确配置文件上载-并在示例上使用正确的连接字符串。此外,还应利用与ESP32配置步骤类似的功能。

要消除401错误,请在代码中使用MSFT巴尔的摩证书。
为了消除ESP上的恐慌:看看这个GitHub。

谢谢你的回答,我稍后会试试!