1

您好,我正在尝试通过 RESTAPI 获取在 IOTHUB 存在/注册的设备。但我很困惑如何获取所有设备。我已阅读此处的文档:IoT 中心服务 - 获取设备

但是当我发送请求时,我收到了错误

“消息”:“错误代码:IotHubUnauthorizedAccess;未授权”,“异常消息”:“跟踪 ID:a795ee1f7ae04adfa600333e45e9aa09-G:5-TimeStamp:06/29/2020 14:32:56”

为了获取设备,是否需要提供任何身份验证令牌?

4

2 回答 2

2

因此,为了快速入门,我们可以使用 Postman 和Azure IoT Hub 查询语言..+ SAS 令牌进行授权。

第 1 步:生成 SAS 令牌,如 Matthijs 所说,我们也可以快速使用设备资源管理器工具使用此链接找到SetupDeviceExplorer.msi。完全复制生成的 SAS 令牌。

在此处输入图像描述

第 2 步:构造查询体。

POST 查询类似于此示例。请参阅注册表管理器 - 查询物联网中心

发布 https://IOTHUB.azure-devices.net/devices/query?api-version=2020-03-13

{
  "query": "SELECT deviceId FROM devices"
}

在此处输入图像描述

第三步:授权使用SAS token,并发送请求进行测试。

在此处输入图像描述

可以从Get all devices from IoT Azure Hub中读取 RomanKiss 回答的类似线程。如果您知道进一步的帮助,请告诉我们!

于 2020-06-29T16:24:23.037 回答
2

您可以使用共享访问签名调用其余 API。要获取有效令牌,可以像这样使用 Azure CLI:

az iot hub generate-sas-token -n <IoT hub name> --policy registryRead

这将产生如下输出:

{
  "sas": "SharedAccessSignature sr=iothubname.azure-devices.net&sig=kPszxZZZZZZZZZZZZZZZZZAhLTILsVpT0tp5sRSWiDZ0%3D&se=1593446477&skn=registryRead"
}

然后,您需要在执行 GET 请求时使用“sas”的值作为 Authorization 标头。卷曲示例:

curl --location --request GET 'https://iothubname.azure-devices.net/devices?api-version=2019-07-01-preview' \
--header 'Authorization: SharedAccessSignature sr=iothubname.azure-devices.net&sig=kPszxZZZZZZZZZZZZZZZZZAhLTILsVpT0tp5sRSWiDZ0%3D&se=1593446477&skn=registryRead'
于 2020-06-29T15:07:17.333 回答