Генерация токенов безопасности Azure IOT Hub с помощью mbed

Мы подключаемся к Azure IOT Hub с учетными данными, созданными с помощью обозревателя устройств. Однако, поскольку срок действия этих учетных данных истекает, нашим устройствам IOT требуется возможность периодически генерировать учетные данные.

Наше устройство работает под mbed поэтому мы пытаемся использовать mbed библиотеки в C++ для генерации подписи.

Из инструкций Azure:

Маркер безопасности имеет следующий формат: SharedAccessSignature sig={signature-string}&se={expiry}&skn={policyName}&sr={URL-encoded-resourceURI}

Мы создали подпрограмму для генерации подписи и полного токена безопасности. Тем не менее, соединение отклоняется, когда мы используем это значение. Из проверки различных значений мы можем сказать, что проблема заключается в поле подписи.

Наш код:

unsigned char   inputVal[90];
unsigned char   outputVal[60];

string GenerateSasToken (string resourceUri, string key, int expiryInSecs)
{
string *expiryStr;
const mbedtls_md_info_t *md_info;
string          *stringToSign;
std::vector<uint8_t>   keyVector;
string          *sasKey;
string          *password;

md_info = mbedtls_md_info_from_string("SHA256");

expiryStr = new string("1552139574");

stringToSign = new string();
*stringToSign = UrlEncode(resourceUri) + "\n" + *expiryStr;

logInfo("encode url: %s size: %d", stringToSign->data(), stringToSign->size());

mts::Text::base642bin(key, keyVector);
memcpy (inputVal, stringToSign->data(), stringToSign->size());
logInfo("input: key vector size: %d string size: %d", keyVector.size(), stringToSign->size());

mbedtls_md_hmac(md_info, keyVector.data(), keyVector.size(), inputVal, stringToSign->size(), outputVal);

sasKey = new(string);
*sasKey = mts::Text::bin2base64(outputVal, keyVector.size()); // sizeof(outputVal));

logInfo("sas token: %s", sasKey->data());

password = new(string);
*password = "SharedAccessSignature sr=" + UrlEncode(resourceUri) + "&sig=" + UrlEncode(sasKey->data()) + "&se=" + *expiryStr;
logInfo("password: %s", password->data());


delete sasKey;
delete password;
delete expiryStr;
delete stringToSign;
    return *password;
}

Любые предложения о том, что не так? Спасибо

0 ответов

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