我刚刚将Visual Studio升级到2022,发现云连接器不再是VS的一部分。我们曾经从VS为我们的物联网设备生成SAS令牌,它们采用了以下形式:
SharedAccessSignature sr=azure-devices.net%2Fdevices%2F<DeviceID>&sig=<VS sig string>%3D&se=1979665819
我想‘没问题。我只想用PowerShell做一个。它看起来不一样,不起作用。我的设备得到";"意外断开";。我用了这个代码:
$context = (Get-AzStorageAccount -ResourceGroupName $resourceGroup -AccountName $storageAccount).context
New-AzStorageAccountSASToken -Context $context
-Service Table,Queue
-ResourceType Service,Container,Object
-Permission racwdlup
-ExpiryTime $tenYears
它生成一个看起来像这样的令牌:
sv=2021-06-08&ss=qt&srt=sco&se=2032-09-29T15%3A28%3A56Z&sp=rwdlacup&sig=<PS sig string>
我想我可以在VS sig字符串的位置替换PS sig字符串,但这不起作用。将整个PS SAS令牌粘贴到设备的SAS令牌字段中也不起作用。不幸的是,我无法访问任何错误消息,只能访问设备在日志中显示的内容:MQTT Disconnected (unexpected)
。如果我输出MQTT STATUS
,它的值为4
,根据手册,它只是指disconnected
。
我怀疑我的问题是旧的VS令牌是容器级别的令牌,而PowerShell命令生成帐户级别的令牌。是否存在使用PowerShell或C#生成正确令牌的方法?
事实证明已经有PowerShell命令可以做到这一点:New AzIotHubSasToken
New-AzIotHubSasToken -ResourceGroupName "myResourceGroup"
-IotHubName "myIoTHub"
-DeviceId "myDevice"
SharedAccessSignature sr=myIoTHub.azure-devices.net%2Fdevices%2FmyDevice
&sig=<signature>
&se=<epiry>