Пакет SDK для Интернета вещей Azure C: ошибка 401 при подключении к хранилищу BLOB-объектов

ОС и используемая версия: 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 в разделе «Центр Интернета вещей» -> «Загрузить файлы». В этом примере я использую параметр SET_TRUSTED_CERT_IN_SAMPLES.

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

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

Журнал:

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

Информация: Ожидание соединения 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

Привет, мир не удалось загрузить. Нажмите любую клавишу, чтобы продолжить.

Вот ссылка на репозиторий GitHub.

Пример можно найти .


person jbuchel    schedule 17.01.2019    source источник


Ответы (2)


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

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

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

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

Я также настроил конечную точку в Azure в Центре Интернета вещей - ›Загрузить файлы. В этом примере я использую параметр SET_TRUSTED_CERT_IN_SAMPLES.

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

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

#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.

person asergaz    schedule 24.01.2019
comment
Спасибо за ответ, попробую позже! - person jbuchel; 24.01.2019

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

person jbuchel    schedule 06.02.2019