共用方式為


測試受保護的 API

本教學課程是系列的最後一個部分,示範如何建置並測試已在外部租用戶中註冊的受保護 Web API。 在此系列的第 1 部分中,您已建立 ASP.NET Core Web API 並保護其端點。 在此最後一個步驟中,您將註冊精靈應用程式,並測試您的 API。

在本教學課程中,您會了解如何:

  • 使用呼叫 Web API 的輕量型精靈應用程式來測試受保護的 Web API

必要條件

教學課程:保護已在外部租用戶中註冊的 ASP.NET Web API

註冊精靈應用程式

下列步驟示範如何在 Microsoft Entra 系統管理中心註冊您的精靈應用程式:

  1. 至少以應用程式開發人員的身分登入 Microsoft Entra 系統管理中心

  2. 如果您有權存取多個租用戶,請使用頂端功能表中的 [設定] 圖示 ,以從 [目錄 + 訂用帳戶] 功能表切換至您的外部租用戶。

  3. 瀏覽至 [身分識別] > [應用程式] > [應用程式註冊]

  4. 選取 + 新增註冊

  5. 在出現的 [註冊應用程式] 頁面 中,輸入應用程式的註冊資訊:

    1. 在 [名稱] 區段中,輸入將向應用程式使用者顯示的有意義應用程式名稱,例如 ciam-client-app

    2. 在 [支援的帳戶類型] 底下,選取 [僅在此組織目錄中的帳戶]

  6. 選取註冊

  7. 註冊完成時,將會顯示應用程式的 [概觀] 窗格。 記錄要在應用程式原始程式碼中使用的 [目錄 (租用戶) 識別碼] 和 [應用程式 (用戶端) 識別碼]

為已註冊的應用程式建立用戶端密碼。 在要求權杖時,應用程式會使用用戶端密碼來證明其身分識別。

  1. 從 [應用程式註冊] 頁面中,選取您建立的應用程式 (例如 ciam-client-app),以開啟其 [概觀] 頁面。
  2. 在 [管理] 下,選取 [憑證和密碼]
  3. 選取 [新用戶端密碼]
  4. 在 [描述] 方塊中,輸入用戶端密碼的描述 (例如「ciam 應用程式用戶端密碼」)。
  5. 在 [到期] 下方,選取祕密有效的持續時間 (根據組織的安全性規則),然後選取 [新增]
  6. 記錄祕密的 [值]。 您將會在稍後的步驟中使用此值進行設定。 在您離開 [憑證和祕密] 之後,祕密值將不會再次顯示,而且無法透過任何方式擷取。 請確保將其妥善記錄。

將應用程式角色指派給您的精靈應用程式

自行驗證的應用程式需要應用程式權限。

  1. 從 [應用程式註冊] 頁面中,選取您建立的應用程式 (例如 ciam-client-app)。

  2. 在 [管理] 之下選取 [API 權限]

  3. 在 [已設定的權限] 底下,選取 [新增權限]

  4. 選取 [我的組織使用的 API] 索引標籤。

  5. 在 API 清單中,選取 API,例如 ciam-ToDoList-api

  6. 選取 [應用程式權限] 選項。 我們選取此選項是因為應用程式會以自身身分 (而不是使用者) 登入。

  7. 從權限清單中,選取 [TodoList.Read.All]、[ToDoList.ReadWrite.All] (如有必要,請使用搜尋方塊)。

  8. 選取 [新增權限] 按鈕。

  9. 此時,您已正確獲指派權限。 不過,因為精靈應用程式不允許使用者與其互動,所以使用者本身無法同意這些權限。 若要解決此問題,身為管理員的您必須代表租用戶中的所有使用者同意這些權限:

    1. 選取 [代表 <您的租用戶名稱> 授與管理員同意],然後選取 [是]
    2. 選取 [重新整理],然後驗證 [已授與 <您的租用戶名稱>] 是否出現在這兩個權限的 [狀態] 下方。

撰寫程式碼

  1. 初始化 .NET 主控台應用程式並瀏覽至其根資料夾

    dotnet new console -o MyTestApp
    cd MyTestApp
    
  2. 執行下列命令來安裝 MSAL 以協助您處理驗證:

    dotnet add package Microsoft.Identity.Client
    
  3. 執行您的 API 專案,並記下其執行所在的連接埠。

  4. 開啟 Program.cs 檔案,並將 "Hello world" 程式碼取代為下列程式碼。

    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var response = await client.GetAsync("https://localhost:<your-api-port>/api/todolist");
    Console.WriteLine("Your response is: " + response.StatusCode);
    

    瀏覽至精靈應用程式根目錄,並使用命令 dotnet run 執行應用程式。 此程式碼會傳送沒有存取權杖的要求。 您應該會看到字串「您的回應是:未經授權」列印在主控台中。

  5. 移除步驟 4 中的程式碼,並將其取代為下列程式碼,以藉由傳送含有效存取權杖的要求來測試您的 API。

    using Microsoft.Identity.Client;
    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var clientId = "<your-daemon-app-client-id>";
    var clientSecret = "<your-daemon-app-secret>";
    var scopes = new[] {"api://<your-web-api-application-id>/.default"};
    var tenantName= "<your-tenant-name>";
    var authority = $"https://{tenantName}.ciamlogin.com/";
    
    var app = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithAuthority(authority)
        .WithClientSecret(clientSecret)
        .Build();
    
    var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
    
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    var response = await client.GetAsync("https://localhost:44351/api/todolist");
    Console.WriteLine("Your response is: " + response.StatusCode);
    

    瀏覽至精靈應用程式根目錄,並使用命令 dotnet run 執行應用程式。 此程式碼會傳送含有效存取權杖的要求。 您應該會看到字串「您的回應是:沒問題」列印在主控台中。

另請參閱

啟用自助密碼重設