问题描述
在 IOT Hub\Central 的参考架构中,您可以轻松了解 SAS 或 X509 证书如何用于设备身份验证。作为示例,请查看此 MXChip OTA 示例。 (我的粉红色笔记)
参考文章:Azure MXChip IoT DevKit Firmware OTA (Over-the-Air)
当我们扩展到其他 Azure 服务时,您能否利用此身份验证进行其他操作,例如下载 OTA 文件。
我能想到的唯一方法是:
a) 通过默默无闻来确保下载端点的安全(不太好)。
b) 引入一个 shim 服务并在那里实现一个额外的身份验证层。
A 看起来很糟糕。 B好像有点浪费。我觉得我缺少选项 C 或缺少有关 Azure 方式的正确信息。
谢谢!
解决方法
以下是使用 IoT Central 应用从 Azure 存储 blob 容器下载设备文件的步骤:
-
上传到配置的存储 blob 容器请求 blob 以供设备下载(在我的示例中:container=iotc、deviceId=device123、blobname=test.json)
-
为您的 IoT Central 应用程序生成设备连接字符串、主机名和 sasToken,查看更多实现细节 here。
-
根据第 3 步的响应,使用 REST POST 请求向 IoT Central 应用程序的底层 IoT 中心发送特定 blob 引用,例如:
{ "correlationId":"****","hostName":"****.blob.core.windows.net","containerName":"iotc","blobName":"device123/test.json","sasToken":"?sv=2018-03-28&sr=b&sig=****&se=2021-01-20T10%3A26%3A59Z&sp=rw" }
-
根据第 4 步的响应,使用 REST GET 请求下载 blob,请参见以下示例:
https://****.blob.core.windows.net/iotc/device123/test.json?sv=2018-03-28&sr=b&sig=****&se=2021-01-20T10%3A26%3A59Z&sp=rw
-
通知 IoT Central 应用程序的底层 IoT 中心设备已结束下载过程,请参阅 REST POST 请求。请注意,您将在步骤 4 中收到 correlationId。
关于我最初提出的关于使用经过身份验证的设备会话访问其他 Azure 服务的问题,无论是一般情况下还是专门出于下载 OTA 文件的目的。这是不可能的。
您需要实施额外的身份验证机制和您自己的服务,在您的应用程序中使用服务特定的 SDK,或者对于具有固件更新的 Blob 存储,请使用公开可用的下载点。
注意:来自 Roman 的答案显示了如何上传和访问上传的文件。它可能会帮助一些最终会来到这里的人。