我要使用邮政编码在Azure IoT集线器中创建用于注册设备的SAS令牌.SAS令牌将使用预先请求的脚本创建.

    var resourceUri = "scopeId/registrations/deviceId" // The resource uri
    var deviceId = "deviceId";
    
    resourceUri = encodeURIComponent(resourceUri.toLowerCase()); // Encode the url
    
    var expires = Math.ceil((Date.now() / 1000) + 10 * 60); // Expire the token 60 minutes from now
    
    var toSign = resourceUri + "\n" + expires; // this is the string format to gen signature from
    
 var crypted = CryptoJS.HmacSHA256(deviceId, CryptoJS.enc.Base64.parse("symmetrickKeyOfEnrollmentGroup"));

var signature = CryptoJS.HmacSHA256(toSign, crypted); // The signature generated from the decodedKey
var encodedUri = encodeURIComponent(CryptoJS.enc.Base64.stringify(signature)); // The url encoded version of the Base64 signature
    

// Construct authorization string (shared access signature)
var iotHubSasToken = "SharedAccessSignature sr=" + resourceUri + "&sig=" + encodedUri + "&se=" + expires +"&skn=registration";

console.log(iotHubSasToken);
postman.setGlobalVariable("token", iotHubSasToken);

这是我创作的,但我收到的是未经授权的.有些 idea 我错了,我想我在签名的某个地方,因为"sr"和"se"是可以的

上面抛出未经授权的代码的输出:

SharedAccessSignature sr=0ne002ee24e%2Fregistrations%2Fcxdlx3f3zv9xx3f3zq&sig=Ukz%2FPyyLaweLYmFq4gHUP%2BhiO7X%2FyQAE9noAaw4nuLU%3D&se=1659940252&skn=registration

参考资料:

关于SAS:https://docs.microsoft.com/en-us/azure/iot-dps/how-to-control-access

关于REST API:https://docs.microsoft.com/en-us/rest/api/iot-dps/device/runtime-registration/register-device#provisioningserviceerrordetails

关于DPS SAS令牌:https://docs.microsoft.com/en-us/azure/iot-dps/how-to-control-access

错误:

enter image description here

推荐答案

这个问题在签名中.

 var crypted = CryptoJS.HmacSHA256(deviceId, CryptoJS.enc.Base64.parse("symmetrickKeyOfEnrollmentGroup"));

var signature = CryptoJS.HmacSHA256(toSign, crypted); // The signature generated from the decodedKey
var encodedUri = encodeURIComponent(CryptoJS.enc.Base64.stringify(signature)); // The url encoded version of the Base64 signature

这是创建它的正确方式.

Javascript相关问答推荐

使用续集和下拉栏显示模型属性

Redux查询多个数据库Api reducerPath&

点击按钮一次有文本出现和褪色,而不是点击两次?(html,CSS,JavaScript)

当试图显示小部件时,使用者会出现JavaScript错误.

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

不能将空字符串传递给cy.containes()

如何将未排序的元素追加到数组的末尾?

一个实体一刀VS每个实体多刀S

为什么当我更新数据库时,我的所有组件都重新呈现?

如何防止ionic 输入中的特殊字符.?

OnClick更改Json数组JSX中的图像源

如何根据查询结果重新排列日期

FindByIdAndUpdate在嵌套对象中创建_id

我无法在Api Reaction本机上发出GET请求

如何压缩图像并将其编码为文本?

在范围数组中查找公共(包含)范围

JSON Web令牌(JWT)错误:RSA密钥对的签名无效

如果未定义,如何添加全局变量

在采购unpept-visalizations.js时遇到问题

如何在使用FOR AWAIT时从异步生成器中获取返回值