Azure IoT SDK C: ошибка 401 при подключении к хранилищу больших двоичных объектов - PullRequest
0 голосов
/ 18 января 2019

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

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

Вход

Инициализация SNTP На платформе ESP запущено sntp! Время еще не установлено. Подключение к WiFi и получение времени по NTP. timeinfo.tm_year: 70 Ожидание установки системного времени ... tm_year: 0 [times: 1] Запуск загрузки примера клиента IoTHub в 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 в IoTHubClient_LL_UploadToBlob_step1 Получен неожиданный результат FILE_UPLOAD_ERROR

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

Здесь - ссылка на GitHub Repo.

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

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

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

0 голосов
/ 24 января 2019

Я создал токен 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()

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

Убедитесь, что вы правильно настроили загрузку файлов в Azure IoTHub - https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-file-upload и использовали правильную строку подключения в образце. Также используйте образец ESP8266 , который должен иметь те же шаги, что и конфигурация ESP32.

...