Share via


了解 IoT 中樞的身分識別登錄

每個 IoT 中樞都有身分識別登錄,可儲存允許連線至 IoT 中樞裝置和模組的相關資訊。 若要讓裝置或模組可以連線到 IoT 中樞,IoT 中樞的身分識別登錄中必須先有該裝置或模組的項目。 裝置或模組也必須根據身分識別登錄中儲存的認證,向 IoT 中樞進行驗證。

儲存在身分識別登錄的裝置或模組識別碼會區分大小寫。

總括來說,身分識別登錄是支援 REST 的裝置或模組身分識別資源集合。 當您在身分識別登錄中新增項目時,IoT 中樞會建立一組個別裝置資源,例如包含正式發行前小眾測試版雲端到裝置訊息的佇列。

當您需要進行下列動作時,請使用身分識別登錄:

  • 佈建裝置或模組來連線到 IoT 中樞。
  • 針對中樞的裝置或面對模組的端點,控制依裝置或依模組的存取。

身分識別登錄作業

IoT 中樞身分識別登錄會公開下列作業:

  • 建立裝置或模組身分識別
  • 更新裝置或模組身分識別
  • 依識別碼擷取裝置或模組身分識別
  • 刪除裝置或模組身分識別
  • 列出多達 1000 個識別
  • 將裝置身分識別匯出至 Azure Blob 儲存體
  • 從 Azure Blob 儲存體匯入裝置身分識別

上述所有作業均可使用 RFC7232 中指定的開放式並行存取。

重要

如果要擷取 IoT 中樞的身分識別登錄中的所有身分識別,唯一方法是使用匯出功能。

IoT 中樞身分識別登錄:

  • 不包含任何應用程式中繼資料。

重要

只能將身分識別登錄用於裝置管理和佈建作業。 執行階段的高輸送量作業不應該仰賴在身分識別登錄中執行作業。 例如,在傳送命令前先檢查裝置的連線狀態就不是支援的模式。 請務必檢查身分識別登錄的節流速率

注意

裝置或模組身分識別建立之後可能需要經過幾秒鐘才可供擷取。 如果失敗,請對裝置或模組身分識別重試 get 作業。

停用裝置

您可以在身分識別登錄中更新身分識別的 [狀態] 屬性來停用裝置。 一般而言,您會在兩個案例中使用此屬性:

  • 在佈建協調流程程序期間。 如需詳細資訊,請參閱裝置佈建

  • 如果因為任何原因,您認為裝置遭到入侵,或變成未經授權。

    重要

    使用憑證式驗證驗證裝置時,IoT 中樞不會檢查憑證撤銷清單。 如果您有因為憑證可能遭入侵而無法連線到 IoT 中樞的裝置,您應該停用身分識別登錄中的裝置。

模組無法使用這項功能。

如需詳細資訊,請參閱 在 IoT 中樞停用或刪除裝置

匯入和匯出裝置身分識別

請使用 IoT 中樞資源提供者端點上的非同步作業,從 IoT 中樞的身分識別登錄大量匯出裝置身分識別。 匯出是長時間執行的作業,其使用客戶提供的 Blob 容器來儲存讀取自身分識別登錄的裝置身分識別資料。

請使用 IoT 中樞資源提供者端點上的非同步作業,將裝置身分識別大量匯入至 IoT 中樞的身分識別登錄。 匯入是長時間執行的作業,其使用客戶提供的 Blob 容器中的資料,將裝置身分識別資料寫入至身分識別登錄。

如需有關匯入和匯出 API 的詳細資訊,請參閱 IoT 中樞資源提供者 REST API。 若要深入了解如何執行匯入和匯出作業,請參閱大量管理 IoT 中樞的裝置身分識別

裝置身分識別也可以透過 REST API 或其中一個 IoT 中樞服務 SDK,從 IoT 中樞導出和匯入。

裝置佈建

給定的 IoT 解決方案儲存的裝置資料取決於該解決方案的特定需求。 但是解決方案至少必須儲存裝置身分識別和驗證金鑰。 Azure IoT 中樞包含身分識別登錄,其可以儲存每個裝置的值,例如識別碼、驗證金鑰和狀態碼。 解決方案可以使用其他 Azure 服務 (例如表格儲存體、Blob 儲存體或 Azure Cosmos DB) 來儲存其他裝置資料。

裝置佈建 是將初始裝置資料加入至解決方案中存放區的程序。 若要讓新裝置能夠連接到您的中樞,必須將裝置識別碼和金鑰新增至「IoT 中樞」身分識別登錄。 做為佈建程序的一部分,您可能需要初始化其他解決方案存放區中的裝置特定資料。 您也可以使用 Azure IoT 中樞裝置佈建服務,以無須人為介入的方式對一或多個 IoT 中樞進行 Just-In-Time 自動佈建。 若要深入了解,請參閱佈建服務文件

裝置和模組生命週期通知

在建立或刪除裝置身分識別時,IoT 中樞可以傳送生命週期通知以通知 IoT 解決方案。 若要這樣做,您的 IoT 解決方案必須建立路由,並將資料來源設為等於 DeviceLifecycleEvents。 根據預設,系統不會傳送任何生命週期通知,不存在此類路由。 透過以資料來源等於 DeviceLifecycleEvents 建立路由,則系統會傳送裝置身分識別和模組身分識別的生命週期事件。不過,根據產生事件是針對模組身分識別還是裝置身分識別而定,訊息內容會有所不同。 請注意,對於 IoT Edge 模組,模組身分識別建立流程與其他模組不同,因此,就 IoT Edge 模組而言,只有當更新的 IoT Edge 模組身分識別相對應的 IoT Edge 裝置正在執行時,才會傳送建立通知。 至於其他所有模組,每當 IoT 中樞端更新模組身分識別時,就會傳送生命週期通知。 若要深入了解通知訊息中傳回的屬性和本文,請參閱非遙測事件結構描述

裝置身分識別屬性

裝置身分識別會以 JSON 檔表示,其中包含下列屬性:

屬性 選項。 描述
deviceId 必要,更新時為唯讀 區分大小寫的字串,最長為 128 個字元,可使用 ASCII 7 位元英數字元和某些特殊字元:- . % _ * ? ! ( ) , : = @ $ '。 不支援特殊字元: + #
generationId 必要、唯讀 IoT 中樞產生、區分大小寫的字串 (最長為 128 個字元)。 刪除並重新建立具有相同 deviceID 的裝置時,該值用於區分它們。
etag 必要、唯讀 依據 RFC7232,此字串代表裝置身分識別的弱式 ETag。
驗證 (authentication) 選用 包含驗證資訊和安全性材料的複合物件。 如需詳細資訊,請參閱 REST API 文件中的驗證機制
能力 選用 裝置的功能集。 例如,裝置是否為邊緣裝置。 如需詳細資訊,請參閱 REST API 文件中的裝置功能
deviceScope 選用 裝置的範圍。 在邊緣裝置中,自動產生且不可變。 在非邊緣裝置中已淘汰。 不過,在子 (分葉) 裝置中,請將此屬性設定為與 parentScopes 屬性相同的值 (父裝置的 deviceScope),以保留對於舊版 API 的回溯相容性。 如需詳細資訊,請參閱 IoT Edge 作為閘道:父子關係
parentScopes 選用 子裝置直系父代的範圍 (父裝置的 deviceScope 屬性值)。 在邊緣裝置中,如果裝置沒有父代,則此值是空的。 在非邊緣裝置中,如果裝置沒有父代,則此屬性不存在。 如需詳細資訊,請參閱 IoT Edge 作為閘道:父子關係
status 必要 存取指示器。 可為 [已啟用] 或 [已停用]。 若為 [已啟用],則裝置可連線。 如果為 [已停用],此裝置無法存取任何裝置對應的端點。
statusReason 選用 長達 128 個字元的字串,用於儲存裝置身份識別狀態的原因。 允許所有 UTF-8 字元。
statusUpdateTime 唯讀 時態性指示器,顯示上次狀態更新的日期和時間。
connectionState 唯讀 指示連線狀態的欄位:[已連線] 或 [已中斷連線]。 此欄位代表 IoT 中樞角度的裝置連線狀態。 重要事項:此欄位僅應作為開發/偵錯用途。 僅針對使用 MQTT 或 AMQP 的裝置更新連線狀態。 此外,這是以通訊協定層級的偵測 (MQTT 偵測或 AMQP 偵測) 為基礎,而且最多只能有 5 分鐘的延遲。 基於這些理由,可能會有誤判為真的情形,例如已中斷連線的裝置回報為已連線。
connectionStateUpdatedTime 唯讀 時態性指示器,顯示上線狀態更新的日期和時間。
lastActivityTime 唯讀 時態性指示器,顯示裝置連線、接收或傳送訊息的日期和時間。 此屬性最終一致,但可能延遲長達 5 到 10 分鐘。 因此,不應該用於生產案例中。

注意

連線狀態僅能代表連線狀態的 IoT 中樞檢視。 視網路狀況和設定,此狀態的更新可能會延遲。

注意

目前,裝置 SDK 不支援在 deviceId 中使用 +# 字元。

模組身分識別屬性

模組身分識別會以 JSON 檔表示,其中包含下列屬性:

屬性 選項。 描述
deviceId 必要,更新時為唯讀 區分大小寫的字串,最長為 128 個字元,可使用 ASCII 7 位元英數字元和某些特殊字元:- . + % _ # * ? ! ( ) , : = @ $ '
moduleId 必要,更新時為唯讀 區分大小寫的字串,最長為 128 個字元,可使用 ASCII 7 位元英數字元和某些特殊字元:- . + % _ # * ? ! ( ) , : = @ $ '
generationId 必要、唯讀 IoT 中樞產生、區分大小寫的字串 (最長為 128 個字元)。 此值可用來在刪除並重建裝置時,區分具有相同 deviceId 的裝置。
etag 必要、唯讀 依據 RFC7232,此字串代表裝置身分識別的弱式 ETag。
驗證 (authentication) 選用 包含驗證資訊和安全性材料的複合物件。 如需詳細資訊,請參閱 REST API 文件中的驗證機制
managedBy 選用 識別管理此課程模組的人員。 例如,如果邊緣執行階段擁有此模組,則此值為 "IotEdge"。
cloudToDeviceMessageCount 唯讀 目前排入佇列中等待傳送至模組的雲端到模組訊息數目。
connectionState 唯讀 指示連線狀態的欄位:[已連線] 或 [已中斷連線]。 此欄位代表 IoT 中樞角度的裝置連線狀態。 重要事項:此欄位僅應作為開發/偵錯用途。 僅針對使用 MQTT 或 AMQP 的裝置更新連線狀態。 此外,這是以通訊協定層級的偵測 (MQTT 偵測或 AMQP 偵測) 為基礎,而且最多只能有 5 分鐘的延遲。 基於這些理由,可能會有誤判為真的情形,例如已中斷連線的裝置回報為已連線。
connectionStateUpdatedTime 唯讀 時態性指示器,顯示上線狀態更新的日期和時間。
lastActivityTime 唯讀 時態性指示器,顯示裝置連線、接收或傳送訊息的日期和時間。

注意

目前,裝置 SDK 不支援在 deviceIdmoduleId 中使用 +# 字元。

其他參考資料

IoT 中樞開發人員指南中的其他參考文章包括︰

下一步

現在您已了解如何使用 IoT 中樞身分識別登錄,接下來您可能對下列 IoT 中樞開發人員指南的文章感興趣:

若要探索使用 IoT 中樞裝置佈建服務進行 Just-In-Time 自動佈建,請參閱: