以程式設計方式為 TPM 證明建立裝置佈建服務的個別註冊
本文說明如何使用 Azure IoT 中樞 DPS 服務 SDK 以及範例應用程式,以程式設計方式在 Azure IoT 中樞裝置佈建服務中建立 TPM 裝置的個別註冊。 建立個別註冊之後,您可以選擇性地透過此註冊專案向布建服務註冊模擬 TPM 裝置。
您可以在 Windows 和 Linux 電腦上執行這些步驟,而本文將使用 Windows 開發電腦。
必要條件
-
如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
在 Windows 機器上安裝 .NET 6.0 SDK 或更新版本。 您可以使用下列命令來檢查您的版本。
dotnet --info
(選擇性) 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰。 請儲存簽署金鑰,因為您稍候會在本文中加以使用。
請勿遵循使用 Azure 入口網站建立個別註冊的步驟。
安裝 Node.js v4.0+。
(選擇性) 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰和註冊識別碼。 請儲存簽署金鑰和註冊識別碼,因為您稍候會在本文中加以使用。
請勿遵循使用 Azure 入口網站建立個別註冊的步驟。
安裝 Java SE 開發套件 8。 本文稍後會安裝 Java Service SDK (英文)。 其同時適用於 Windows 和 Linux。 本文使用 Windows。
安裝 Maven 3。
安裝 Git,並確定路徑已新增至環境變數
PATH
。(選擇性) 如果您想要在本文結尾處註冊模擬裝置,請依照建立和佈建模擬 TPM 裝置中的程序操作,直到您取得裝置的簽署金鑰。 請記下簽署金鑰和註冊識別碼,因為您稍候會在本文中加以使用。
請勿遵循使用 Azure 入口網站建立個別註冊的步驟。
取得佈建服務的連接字串
針對本文中的範例,您會使用布建服務的 連接字串。
登入 Azure 入口網站。
在左側功能表或入口網站頁面上,選取 [所有資源]。
選取您的裝置佈建服務。
在 [設定] 功能表中,選取 [共用存取原則]。
選取您想要使用的存取原則。
在 [存取原則] 面板中,複製並儲存主要金鑰連接字串。
建立個別註冊範例
本節將說明如何建立 .NET Core 主控台應用程式,以將 TPM 裝置的個別註冊新增至您的佈建服務。
開啟 Windows 命令提示字元,並瀏覽至您要在其中建立應用程式的資料夾。
若要建立主控台專案,請執行下列命令:
dotnet new console --framework net6.0 --use-program-main
若要新增 DPS 服務 SDK 的參考,請執行下列命令:
dotnet add package Microsoft.Azure.Devices.Provisioning.Service
此步驟會下載及安裝 Azure IoT DPS 服務用戶端 NuGet 套件及其相依性,並新增其參考。 此套件包含 .NET 服務 SDK 的二進位檔。
在編輯器中開啟 Program.cs 檔案。
將位於檔案頂端的命名空間陳述式取代為下列內容:
namespace CreateIndividualEnrollment;
在檔案頂端的
namespace
陳述式上方新增下列using
陳述式:using System.Threading.Tasks; using Microsoft.Azure.Devices.Provisioning.Service;
將下列欄位新增至
Program
類別,並進行列出的變更。private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}"; private const string RegistrationId = "sample-registrationid-csharp"; private const string TpmEndorsementKey = "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUS" + "cTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3d" + "yKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKR" + "dln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFe" + "WlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ=="; // Optional parameters private const string OptionalDeviceId = "myCSharpDevice"; private const ProvisioningStatus OptionalProvisioningStatus = ProvisioningStatus.Enabled;
將
ProvisioningServiceConnectionString
預留位置值取代為您在上一節中複製的佈建服務連接字串。如果您要使用本文搭配建立和佈建模擬 TPM 裝置快速入門來佈建模擬裝置,請將簽署金鑰取代為您在該快速入門中記下的值。 您可以使用該快速入門中建議的值、使用您自己的值,或使用此範例中的預設值來取代裝置識別碼和註冊識別碼。
將下列方法新增至
Program
類別。 此程式碼會建立個別註冊項目,然後在ProvisioningServiceClient
上呼叫CreateOrUpdateIndividualEnrollmentAsync
方法,以將個別註冊新增到佈建服務。public static async Task RunSample() { Console.WriteLine("Starting sample..."); using (ProvisioningServiceClient provisioningServiceClient = ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString)) { #region Create a new individualEnrollment config Console.WriteLine("\nCreating a new individualEnrollment object..."); Attestation attestation = new TpmAttestation(TpmEndorsementKey); IndividualEnrollment individualEnrollment = new IndividualEnrollment( RegistrationId, attestation); // The following parameters are optional. Remove them if you don't need them. individualEnrollment.DeviceId = OptionalDeviceId; individualEnrollment.ProvisioningStatus = OptionalProvisioningStatus; #endregion #region Create the individualEnrollment Console.WriteLine("\nAdding the individualEnrollment to the provisioning service..."); IndividualEnrollment individualEnrollmentResult = await provisioningServiceClient.CreateOrUpdateIndividualEnrollmentAsync(individualEnrollment).ConfigureAwait(false); Console.WriteLine("\nIndividualEnrollment created with success."); Console.WriteLine(individualEnrollmentResult); #endregion } }
最後,將
Main
方法取代為下列幾行:static async Task Main(string[] args) { await RunSample(); Console.WriteLine("\nHit <Enter> to exit ..."); Console.ReadLine(); }
儲存您的變更。
提示
為了簡單起見,此範例會使用 SAS 驗證來連線到 DPS 服務 API。 更安全的方法是使用 Azure 令牌認證。 如需該驗證方法的範例,請參閱 Node.js SDK 中的create_tpm_enrollment_with_token_credentials.js 範例。
從工作資料夾中的命令視窗中,執行:
npm install azure-iot-provisioning-service
此步驟會下載及安裝 Azure IoT DPS 服務用戶端套件及其相依性,並新增其參考。 此套件包含 Node.js 服務 SDK 的二進位檔。
使用文字編輯器,在工作資料夾中建立 create_individual_enrollment.js 檔案。 將下列程式碼新增至 檔案:
'use strict'; var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient; var serviceClient = provisioningServiceClient.fromConnectionString(process.argv[2]); var endorsementKey = process.argv[3]; var enrollment = { registrationId: 'first', attestation: { type: 'tpm', tpm: { endorsementKey: endorsementKey } } }; serviceClient.createOrUpdateIndividualEnrollment(enrollment, function(err, enrollmentResponse) { if (err) { console.log('error creating the individual enrollment: ' + err); } else { console.log("enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2)); } });
儲存檔案。
開啟 Windows 命令提示字元。
複製 Microsoft Azure IoT SDK for Java GitHub 存放庫:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
移至範例資料夾:
cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample
在編輯器中開啟檔案 \src\main\java\samples\com\microsoft\azure\sdk\iot\ServiceEnrollmentSample.java。
將
[Provisioning Connection String]
取代為您在取得佈建服務的連接字串中複製的連接字串。private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]";
新增 TPM 裝置詳細資料。 將下列陳述式中的
[RegistrationId]
和[TPM Endorsement Key]
取代為您的簽署金鑰和註冊識別碼。private static final String REGISTRATION_ID = "[RegistrationId]"; private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
如果您要使用本文搭配建立和佈建模擬 TPM 裝置快速入門來佈建模擬裝置,請使用您在該快速入門中記下的註冊識別碼和簽署金鑰值。
如果您只要使用本文建立範例個別註冊,而不打算用它來註冊裝置,您可以使用下列簽署金鑰值:
private static final String TPM_ENDORSEMENT_KEY = "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnefZcBhgy1SSDQMQ==";
輸入您自己的註冊識別碼值。
針對個別註冊,您可以選擇設定 DPS 在將裝置佈建到 IoT 中樞時為其指派的裝置識別碼。 若未指派裝置識別碼,DPS 會使用註冊識別碼作為裝置識別碼。 根據預設,此範例會將 "myJavaDevice" 指派為裝置識別碼。 如果您想要變更裝置識別碼,請修改下列陳述式:
private static final String DEVICE_ID = "myJavaDevice";
如果您不想指派特定的裝置識別碼,請將下列陳述式註解化:
individualEnrollment.setDeviceId(DEVICE_ID);
此範例可讓您在個別註冊中設定 IoT 中樞,以將裝置佈建到該處。 此 IoT 中樞必須是先前已連結至佈建服務的中樞。 在本文中,我們會讓 DPS 根據預設配置原則 (平均加權分佈) 從連結的中樞中選擇。 將檔案中的下列陳述式註解化:
individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
範例會建立、更新、查詢並刪除個別的 TPM 裝置註冊。 若要確認入口網站中的註冊成功,請將檔案結尾處的以下幾行程式碼暫時註解化:
// *********************************** Delete info of individualEnrollment ************************************ System.out.println("\nDelete the individualEnrollment..."); provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID);
儲存您的變更。
執行個別註冊範例
執行範例:
dotnet run
成功建立時,命令視窗會顯示新註冊的屬性。
若要執行範例,您需要在上一節中複製的佈建服務連接字串,以及裝置的簽署金鑰。 如果您依照建立和佈建模擬裝置快速入門建立了模擬 TPM 裝置,請使用為該裝置建立的簽署金鑰。 否則,若要建立範例個別註冊,您可以使用下列隨 Node.js 服務 SDK 提供的簽署金鑰:
AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
若要建立 TPM 裝置的個別註冊,請執行下列命令 (包括命令列引數的括號):
node create_individual_enrollment.js "<the connection string for your provisioning service>" "<endorsement key>"
成功建立時,命令視窗會顯示新註冊的屬性。
從命令提示字元中的 azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample 資料夾中,執行下列命令以建置範例:
mvn install -DskipTests
此命令會將 Azure IoT DPS 服務用戶端 Maven 套件下載到您的機器,並建置範例。 此套件包含 Java 服務 SDK 的二進位檔。
切換至 target 資料夾並執行範例。 上一個步驟中的組建會以下列檔案格式輸出 target 資料夾中的 .jar 檔案:
service-enrollment-sample-{version}-with-deps.jar
;例如:service-enrollment-sample-1.8.1-with-deps.jar
。 您可能需要取代下列命令中的版本。cd target java -jar ./service-enrollment-sample-1.8.1-with-deps.jar
成功建立時,命令視窗會顯示新註冊的屬性。
若要確認個別註冊是否已建立:
在 Azure 入口網站中,瀏覽至您的裝置佈建服務執行個體。
在 [設定] 功能表中,選取 [管理註冊]。
選取 [個別註冊] 索引標籤。您應會看到與您在此範例中使用的註冊識別碼相對應的新註冊項目。
註冊模擬裝置 (選擇性)
如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置。
如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置。
如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置。
清除資源
如果您預計要探索 DPS 教學課程,請不要清除本文中建立的資源。 否則請使用下列步驟來刪除本文建立的所有資源。
在 Azure 入口網站中,瀏覽至您的裝置佈建服務執行個體。
在 [設定] 功能表中,選取 [管理註冊]。
選取 [個別註冊] 索引標籤。
選取您在本文中所建立之註冊項目註冊識別碼旁的核取方塊。
在頁面頂端,選取 [刪除]。
如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:
在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。
在左側功能表的 [裝置管理] 底下,選取 [裝置]。
選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。
在窗格頂端,選取 [刪除]。
如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:
關閉模擬裝置的 TPM 模擬器視窗和範例輸出視窗。
在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。
在左側功能表的 [裝置管理] 底下,選取 [裝置]。
選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。
在窗格頂端,選取 [刪除]。
如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:
關閉模擬裝置的 TPM 模擬器視窗和範例輸出視窗。
在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。
在左側功能表的 [裝置管理] 底下,選取 [裝置]。
選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。
在窗格頂端,選取 [刪除]。
下一步
在本文中,您會以程序設計方式建立 TPM 裝置的個別註冊專案。 (選擇性) 您已在電腦上建立 TPM 模擬裝置,並使用 Azure IoT 中樞裝置佈建服務將其佈建到 IoT 中樞。 若要進一步探索,請查看下列連結:
如需使用 DPS 進行 TPM 證明的詳細資訊,請參閱 TPM 證明。
如需使用 TPM 證明透過個別註冊來佈建裝置的端對端範例,請參閱佈建模擬 TPM 裝置快速入門。
若要了解如何使用 Azure 入口網站管理個別註冊和註冊群組,請參閱如何使用 Azure 入口網站管理裝置註冊。