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

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

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

總括來說,身分識別登錄是支援 REST 的裝置或模組身分識別資源集合。 當您在身分識別登錄中新增項目時,IoT 中樞會建立一組每一裝置資源,例如,包含傳遞中雲端到裝置訊息的佇列。

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

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

身分識別登錄作業

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

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

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

重要

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

IoT 中樞身分識別登錄:

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

重要

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

注意

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

停用裝置

您可以在身分識別登錄中更新身分識別的 [狀態] 屬性來停用裝置。 您通常會在兩種情況下使用此屬性:

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

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

此功能不適用於模組。

匯入和匯出裝置身分識別

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

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

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

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

裝置佈建

給定的 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 文件中的驗證機制
capabilities 選用 裝置的功能集。 例如,裝置是否為邊緣裝置。 如需詳細資訊,請參閱 REST API 文件中的裝置功能
deviceScope 選用 裝置的範圍。 在邊緣裝置中,自動產生且不可變。 在非邊緣裝置中已淘汰。 不過,在子 (分葉) 裝置中,請將此屬性設定為與 parentScopes 屬性相同的值 (父裝置的 deviceScope),以保留對於舊版 API 的回溯相容性。 如需詳細資訊,請參閱 IoT Edge 作為閘道:父子關係
parentScopes 選用 子裝置直系父代的範圍 (父裝置的 deviceScope 屬性值)。 在邊緣裝置中,如果裝置沒有父代,則此值是空的。 在非邊緣裝置中,如果裝置沒有父系,則屬性不存在。 如需詳細資訊,請參閱 IoT Edge 作為閘道:父子關係
status required 存取指示器。 可以是 [已啟用] 或 [已停用]。 如果為 [已啟用] ,則允許連接裝置。 如果 停用,則此裝置無法存取任何裝置面向的端點。
statusReason 選用 長度為 128 個字元的字串,用來儲存裝置身分識別狀態的原因。 允許所有 UTF-8 字元。
statusUpdateTime 唯讀 暫時指示器,顯示上次狀態更新的日期和時間。
connectionState 唯讀 指出連線狀態的欄位︰已連線已中斷連線。 這個欄位代表裝置連線狀態的 IoT 中樞檢視。 重要事項:此欄位只應用於開發/偵錯用途。 只有針對使用 MQTT 或 AMQP 的裝置才會更新連線狀態。 此外,它是以通訊協定層級 ping (MQTT ping 或 AMQP ping) 為基礎,而且最多可以延遲 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 選用 識別管理此課程模組的人員。 例如,如果邊緣執行時間擁有此模組,則此值為 「IoT Edge」。
cloudToDeviceMessageCount 唯讀 目前排入佇列中等待傳送至模組的雲端到模組訊息數目。
connectionState 唯讀 指出連線狀態的欄位︰已連線已中斷連線。 這個欄位代表裝置連線狀態的 IoT 中樞檢視。 重要事項:此欄位只應用於開發/偵錯用途。 只有針對使用 MQTT 或 AMQP 的裝置才會更新連線狀態。 此外,它是以通訊協定層級 ping (MQTT ping 或 AMQP ping) 為基礎,而且最多可以延遲 5 分鐘。 基於這些理由,其中可能會有誤判的情形,例如將裝置回報為已連線,但卻已中斷連線。
connectionStateUpdatedTime 唯讀 暫時指示器,顯示上次更新連線狀態的日期和時間。
lastActivityTime 唯讀 暫時指示器,顯示裝置上次連接、接收或傳送訊息的日期和時間。

注意

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

其他參考資料

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

下一步

既然您已瞭解如何使用IoT 中樞身分識別登錄,您可能對下列IoT 中樞開發人員指南文章感興趣:

若要嘗試本文所述的一些概念,請參閱下列「IoT 中樞」教學課程:

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