Azure IoT SDK C: ошибка 401 при подключении к хранилищу больших двоичных объектов

Используемая ОС и версия: Ubuntu 18.04

Используемая версия SDK: выпуск 13 декабря 2018 г.

Цель: ESP32.

Описание проблемы:

Я пытаюсь подключить ESP32 к моему хранилищу BLOB-объектов. Я получаю ошибку HTTP 401 (несанкционированный доступ). Я использую пример: iothub_client_sample_upload_to_blob_mb. Я попытался подключиться, используя только общий ключ доступа в строке подключения, но это не сработало (без подключения). После этого я сгенерировал токен SAS в Azure (учетные записи хранения -> -> подпись общего доступа) и подключил его к строке подключения. Моя строка подключения выглядит так:

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: что это значит? Я не очень знаком с базовым шифрованием и, вероятно, должен прочитать об этом.

Q3: почему я получаю ошибку 401? Что может быть возможным решением?

Журнал:

Инициализация SNTP ESP платформы запущена sntp! Время еще не установлено. Подключение к WiFi и получение времени по NTP. timeinfo.tm_year:70 Ожидание установки системного времени... tm_year:0[times:1] Запуск загрузки примера клиента IoT Hub в BLOB-объект с несколькими блоками...

Информация: Ожидание соединения TLS Информация: Ожидание соединения TLS Информация: Ожидание соединения TLS Информация: Ожидание соединения TLS

Ошибка: время: четверг 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

Ошибка: время: четверг 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

Ошибка: время: четверг 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 в IoT HubClient_LL_UploadToBlob_step1 Получен неожиданный результат FILE_UPLOAD_ERROR

hello world не удалось загрузить Нажмите любую клавишу для продолжения

Вот ссылка на GitHub Repo.

Пример можно найти здесь.

2 ответа

Решение

Чтобы избавиться от ошибки 401: используйте сертификат MSFT Baltimore в коде. Чтобы избавиться от паники на ESP: посмотрите на эту проблему GitHub.

Я сгенерировал токен SAS в Azure (учетные записи хранения -> -> Общая подпись) и подключил его к строке подключения. Моя строка подключения выглядит так:

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

Q1: почему есть "?" перед жетоном? Когда я смотрю на строку подключения, SharedAccessSignature=.. Я не вижу "?".

После регистрации устройства на IoTHub вам нужно будет извлечь его строку подключения для использования в этом примере. Смотрите здесь пример того, как зарегистрировать и получить строку подключения с устройства на IoTHub.

Я также настроил конечную точку в Azure в разделе IoT -> Загрузка файлов. В этом примере я использую опцию SET_TRUSTED_CERT_IN_SAMPLES.

Q2: что это значит? Я не очень знаком с базовым шифрованием и, вероятно, должен прочитать об этом.

Этот флаг используется при компиляции SDK для вашего устройства. Смотрите файл CMake:

#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 и использовали правильную строку подключения в примере. Также используйте образец ESP8266, который должен иметь те же шаги, что и конфигурация ESP32.

Другие вопросы по тегам