如何使用其他 Azure 服务对 IoT Central 设备进行身份验证? (例如:下载 OTA bin)

How to Authentication IoT Central devices with other Azure services? (example: download OTA bin)

在 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 容器下载设备文件的步骤:

  1. 为设备文件上传配置 IoT Central 应用程序。

  2. 上传到配置的存储 blob 容器请求 blob 以供设备下载(在我的示例中:container=iotc,deviceId=device123,blobname=test.json)

  3. 为您的 IoT Central 应用程序生成设备连接字符串、主机名和 sasToken,查看更多实现细节here

  4. 基于步骤 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"
    }
    
  5. 根据步骤 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
    
  6. 通知 IoT Central 应用程序的底层 IoT 中心设备已结束下载过程,请参阅 REST POST 请求。请注意,您将在步骤 4 中收到 correlationId

关于我最初关于使用经过身份验证的设备会话访问其他 Azure 服务的问题,无论是一般的还是专门用于下载 OTA 文件的目的。这是不可能的。

您需要实施额外的身份验证机制和您自己的服务,在您的应用程序中使用服务特定的 SDK,或者对于带有固件更新的 Blob 存储,使用公开可用的下载点。

注意:Roman 的回答显示了如何上传和访问上传的文件。它可能会帮助一些最终会来到这里的人。