Azure IoT SDK C:连接到 Blob 存储时出现错误 401
Azure IoT SDK C: Error 401 when connecting to Blob Storage
OS 和使用的版本: 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 中的 IoT 中心 -> 上传文件下设置了端点。
在示例中,我使用选项 SET_TRUSTED_CERT_IN_SAMPLES.
Q2:什么意思?我对基本加密不是很熟悉,应该仔细阅读一下。
问题 3:为什么我会收到 401 错误?可能的解决方案是什么?
日志:
正在初始化 SNTP
ESP 平台 sntp 启动!
时间尚未确定。连接到 WiFi 并通过 NTP 获取时间。 timeinfo.tm_year:70
等待设置系统时间... tm_year:0[times:1]
开始将 IoTHub 客户端示例上传到具有多个块的 blob...
信息:等待 TLS 连接
信息:等待 TLS 连接
信息:等待 TLS 连接
信息:等待 TLS 连接
错误:Time:Thu 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 Line:142 HTTP 代码为 401
错误:Time:Thu 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 Line:494 无法 HTTPAPIEX_ExecuteRequest
错误:Time:Thu 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 Line:768 IoTHubClient_LL_UploadToBlob_step1 中的错误
收到意外结果 FILE_UPLOAD_ERROR
hello world上传失败
按任意键继续
Here 是 link 到 GitHub 回购。
可以找到示例here。
I generated an SAS token in Azure (Storage Accounts -> -> Shared Access Signature) and plugged that in into my connection string. My connection string looks like this:
static const char* connectionString = "HostName=<Host name>;DeviceId=<DeviceID>;SharedAccessSignature=<inserted here without the "?" at the beginning>";
Q1: Why is there a "?" in front of the token? When I look at the connection string, at SharedAccessSignature=.. I don't see the "?".
在 IoTHub 上注册设备后,您需要检索它的连接字符串以用于此示例。请参阅 here 有关如何从 IoTHub 上的设备注册和检索连接字符串的示例。
I also set up the Endpoint in Azure under IoT Hub -> Upload files. In the example, I am using the option SET_TRUSTED_CERT_IN_SAMPLES.
Q2: What does that mean? I am not so familiar with basic encryption and should probably read up on that.
在为您的设备编译 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: Why am I getting an 401 error? What could be a possible solution?
确保在 Azure IoTHub 上正确配置文件上传 - https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-file-upload and use the correct connection string on the sample. Also leverage the ESP8266 sample 这应该具有与 ESP32 配置类似的步骤。
消除 401 错误:在代码中使用 MSFT Baltimore 证书。
要摆脱 ESP 上的恐慌:看看这个 GitHub issue.
OS 和使用的版本: 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 中的 IoT 中心 -> 上传文件下设置了端点。 在示例中,我使用选项 SET_TRUSTED_CERT_IN_SAMPLES.
Q2:什么意思?我对基本加密不是很熟悉,应该仔细阅读一下。
问题 3:为什么我会收到 401 错误?可能的解决方案是什么?
日志:
正在初始化 SNTP ESP 平台 sntp 启动! 时间尚未确定。连接到 WiFi 并通过 NTP 获取时间。 timeinfo.tm_year:70 等待设置系统时间... tm_year:0[times:1] 开始将 IoTHub 客户端示例上传到具有多个块的 blob...
信息:等待 TLS 连接 信息:等待 TLS 连接 信息:等待 TLS 连接 信息:等待 TLS 连接
错误:Time:Thu 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 Line:142 HTTP 代码为 401
错误:Time:Thu 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 Line:494 无法 HTTPAPIEX_ExecuteRequest
错误:Time:Thu 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 Line:768 IoTHubClient_LL_UploadToBlob_step1 中的错误 收到意外结果 FILE_UPLOAD_ERROR
hello world上传失败 按任意键继续
Here 是 link 到 GitHub 回购。
可以找到示例here。
I generated an SAS token in Azure (Storage Accounts -> -> Shared Access Signature) and plugged that in into my connection string. My connection string looks like this:
static const char* connectionString = "HostName=<Host name>;DeviceId=<DeviceID>;SharedAccessSignature=<inserted here without the "?" at the beginning>";
Q1: Why is there a "?" in front of the token? When I look at the connection string, at SharedAccessSignature=.. I don't see the "?".
在 IoTHub 上注册设备后,您需要检索它的连接字符串以用于此示例。请参阅 here 有关如何从 IoTHub 上的设备注册和检索连接字符串的示例。
I also set up the Endpoint in Azure under IoT Hub -> Upload files. In the example, I am using the option SET_TRUSTED_CERT_IN_SAMPLES.
Q2: What does that mean? I am not so familiar with basic encryption and should probably read up on that.
在为您的设备编译 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: Why am I getting an 401 error? What could be a possible solution?
确保在 Azure IoTHub 上正确配置文件上传 - https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-file-upload and use the correct connection string on the sample. Also leverage the ESP8266 sample 这应该具有与 ESP32 配置类似的步骤。
消除 401 错误:在代码中使用 MSFT Baltimore 证书。 要摆脱 ESP 上的恐慌:看看这个 GitHub issue.