共用方式為


以程式設計方式為 TPM 證明建立裝置佈建服務的個別註冊

本文說明如何使用 Azure IoT 中樞 DPS 服務 SDK 以及範例應用程式,以程式設計方式在 Azure IoT 中樞裝置佈建服務中建立 TPM 裝置的個別註冊。 建立個別註冊之後,您可以選擇性地透過此註冊專案向布建服務註冊模擬 TPM 裝置。

您可以在 Windows 和 Linux 電腦上執行這些步驟,而本文將使用 Windows 開發電腦。

必要條件

  • 在 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 入口網站建立個別註冊的步驟。

取得佈建服務的連接字串

針對本文中的範例,您會使用布建服務的 連接字串。

  1. 登入 Azure 入口網站

  2. 在左側功能表或入口網站頁面上,選取 [所有資源]

  3. 選取您的裝置佈建服務。

  4. 在 [設定] 功能表中,選取 [共用存取原則]

  5. 選取您想要使用的存取原則。

  6. 在 [存取原則] 面板中,複製並儲存主要金鑰連接字串。

    從入口網站取得布建服務 連接字串。

建立個別註冊範例

本節將說明如何建立 .NET Core 主控台應用程式,以將 TPM 裝置的個別註冊新增至您的佈建服務。

  1. 開啟 Windows 命令提示字元,並瀏覽至您要在其中建立應用程式的資料夾。

  2. 若要建立主控台專案,請執行下列命令:

    dotnet new console --framework net6.0 --use-program-main 
    
  3. 若要新增 DPS 服務 SDK 的參考,請執行下列命令:

    dotnet add package Microsoft.Azure.Devices.Provisioning.Service 
    

    此步驟會下載及安裝 Azure IoT DPS 服務用戶端 NuGet 套件及其相依性,並新增其參考。 此套件包含 .NET 服務 SDK 的二進位檔。

  4. 在編輯器中開啟 Program.cs 檔案。

  5. 將位於檔案頂端的命名空間陳述式取代為下列內容:

    namespace CreateIndividualEnrollment;
    
  6. 在檔案頂端的 namespace 陳述式上方新增下列 using 陳述式:

    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. 將下列欄位新增至 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 裝置快速入門來佈建模擬裝置,請將簽署金鑰取代為您在該快速入門中記下的值。 您可以使用該快速入門中建議的值、使用您自己的值,或使用此範例中的預設值來取代裝置識別碼和註冊識別碼。

  8. 將下列方法新增至 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
    
        }
    }
    
  9. 最後,將 Main 方法取代為下列幾行:

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. 儲存您的變更。

提示

為了簡單起見,此範例會使用 SAS 驗證來連線到 DPS 服務 API。 更安全的方法是使用 Azure 令牌認證。 如需該驗證方法的範例,請參閱 Node.js SDK 中的create_tpm_enrollment_with_token_credentials.js 範例。

  1. 從工作資料夾中的命令視窗中,執行:

    npm install azure-iot-provisioning-service
    

    此步驟會下載及安裝 Azure IoT DPS 服務用戶端套件及其相依性,並新增其參考。 此套件包含 Node.js 服務 SDK 的二進位檔。

  2. 使用文字編輯器,在工作資料夾中建立 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));
      }
    });
    
  3. 儲存檔案。

  1. 開啟 Windows 命令提示字元。

  2. 複製 Microsoft Azure IoT SDK for Java GitHub 存放庫

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. 移至範例資料夾:

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample
    
  4. 在編輯器中開啟檔案 \src\main\java\samples\com\microsoft\azure\sdk\iot\ServiceEnrollmentSample.java

  5. [Provisioning Connection String] 取代為您在取得佈建服務的連接字串中複製的連接字串。

    private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]";
    
  6. 新增 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==";
      

      輸入您自己的註冊識別碼值。

  7. 針對個別註冊,您可以選擇設定 DPS 在將裝置佈建到 IoT 中樞時為其指派的裝置識別碼。 若未指派裝置識別碼,DPS 會使用註冊識別碼作為裝置識別碼。 根據預設,此範例會將 "myJavaDevice" 指派為裝置識別碼。 如果您想要變更裝置識別碼,請修改下列陳述式:

        private static final String DEVICE_ID = "myJavaDevice";
    

    如果您不想指派特定的裝置識別碼,請將下列陳述式註解化:

    individualEnrollment.setDeviceId(DEVICE_ID);
    
  8. 此範例可讓您在個別註冊中設定 IoT 中樞,以將裝置佈建到該處。 此 IoT 中樞必須是先前已連結至佈建服務的中樞。 在本文中,我們會讓 DPS 根據預設配置原則 (平均加權分佈) 從連結的中樞中選擇。 將檔案中的下列陳述式註解化:

    individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
    
  9. 範例會建立、更新、查詢並刪除個別的 TPM 裝置註冊。 若要確認入口網站中的註冊成功,請將檔案結尾處的以下幾行程式碼暫時註解化:

    // *********************************** Delete info of individualEnrollment ************************************
    System.out.println("\nDelete the individualEnrollment...");
    provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID);
    
  10. 儲存您的變更。

執行個別註冊範例

  1. 執行範例:

    dotnet run
    
  2. 成功建立時,命令視窗會顯示新註冊的屬性。

若要執行範例,您需要在上一節中複製的佈建服務連接字串,以及裝置的簽署金鑰。 如果您依照建立和佈建模擬裝置快速入門建立了模擬 TPM 裝置,請使用為該裝置建立的簽署金鑰。 否則,若要建立範例個別註冊,您可以使用下列隨 Node.js 服務 SDK 提供的簽署金鑰:

AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
  1. 若要建立 TPM 裝置的個別註冊,請執行下列命令 (包括命令列引數的括號):

    node create_individual_enrollment.js "<the connection string for your provisioning service>" "<endorsement key>"
    
  2. 成功建立時,命令視窗會顯示新註冊的屬性。

  1. 從命令提示字元中的 azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample 資料夾中,執行下列命令以建置範例:

    mvn install -DskipTests
    

    此命令會將 Azure IoT DPS 服務用戶端 Maven 套件下載到您的機器,並建置範例。 此套件包含 Java 服務 SDK 的二進位檔。

  2. 切換至 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
    
  3. 成功建立時,命令視窗會顯示新註冊的屬性。

若要確認個別註冊是否已建立:

  1. Azure 入口網站中,瀏覽至您的裝置佈建服務執行個體。

  2. 在 [設定] 功能表中,選取 [管理註冊]

  3. 選取 [個別註冊] 索引標籤。您應會看到與您在此範例中使用的註冊識別碼相對應的新註冊項目。

    顯示驗證入口網站中個別裝置註冊的螢幕快照。

註冊模擬裝置 (選擇性)

如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置

如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置

如果您依照建立和佈建模擬 TPM 裝置快速入門中的步驟佈建了模擬裝置,請繼續進行快速入門中的註冊裝置

清除資源

如果您預計要探索 DPS 教學課程,請不要清除本文中建立的資源。 否則請使用下列步驟來刪除本文建立的所有資源。

  1. Azure 入口網站中,瀏覽至您的裝置佈建服務執行個體。

  2. 在 [設定] 功能表中,選取 [管理註冊]

  3. 選取 [個別註冊] 索引標籤。

  4. 選取您在本文中所建立之註冊項目註冊識別碼旁的核取方塊。

  5. 在頁面頂端,選取 [刪除]

  1. 如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:

    1. 在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。

    2. 在左側功能表的 [裝置管理] 底下,選取 [裝置]

    3. 選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。

    4. 在窗格頂端,選取 [刪除]

  1. 如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:

    1. 關閉模擬裝置的 TPM 模擬器視窗和範例輸出視窗。

    2. 在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。

    3. 在左側功能表的 [裝置管理] 底下,選取 [裝置]

    4. 選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。

    5. 在窗格頂端,選取 [刪除]

  1. 如果您依照建立和佈建模擬 TPM 裝置中的步驟建立了模擬 TPM 裝置,請執行下列步驟:

    1. 關閉模擬裝置的 TPM 模擬器視窗和範例輸出視窗。

    2. 在 Azure 入口網站中,瀏覽至已佈建您的裝置的 IoT 中樞。

    3. 在左側功能表的 [裝置管理] 底下,選取 [裝置]

    4. 選取您在本文中所註冊裝置之裝置識別碼旁的核取方塊。

    5. 在窗格頂端,選取 [刪除]

下一步

在本文中,您會以程序設計方式建立 TPM 裝置的個別註冊專案。 (選擇性) 您已在電腦上建立 TPM 模擬裝置,並使用 Azure IoT 中樞裝置佈建服務將其佈建到 IoT 中樞。 若要進一步探索,請查看下列連結: