共用方式為


測試受保護的 ASP.NET Core Web API

適用於帶有白色核取記號符號的綠色圓圈,表示以下內容適用於員工租戶。 員工租戶 帶有白色核取記號符號的綠色圓圈,表示以下內容適用於外部租戶。 外部租戶 (進一步了解

本教學課程是一系列的最後一個部分,示範如何建置及測試已在 Microsoft Entra 租用戶中註冊的受保護 Web API。 在此 系列的第 1 部分中,您已建立 ASP.NET Core Web API,並保護其端點。 您現在會建立輕量型精靈應用程式、在您的租用戶中註冊它,並使用精靈應用程式來測試您所建置的Web API。

在本教學課程中,您會:

  • 註冊精靈應用程式
  • 將應用程式角色指派給精靈應用程式
  • 建置精靈應用程式
  • 執行精靈應用程式以呼叫受保護的 Web API

先決條件

註冊精靈應用程式

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

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

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

  3. 流覽至 Entra ID>應用程式註冊

  4. 選取 [+ 新增註冊]。

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

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

    2. [支持的帳戶類型] 下, 選取 [僅限此組織目錄中的帳戶]。

  6. 選取 [註冊]。

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

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

  1. 從 [ 應用程式註冊] 頁面中,選取您建立的應用程式(例如 Web 應用程式用戶端密碼),以開啟其 [ 概觀 ] 頁面。
  2. [管理] 底下,選取 [>客戶端密碼>] [新增客戶端密碼]。
  3. 在 [ 描述] 方塊中,輸入用戶端密碼的描述(例如 Web 應用程式用戶端密碼)。
  4. [到期日] 底下,選取密碼有效的持續時間(根據您的組織安全性規則),然後選取 [ 新增]。
  5. 記錄秘密的 。 您可以在稍後的步驟中使用此值進行設定。 在您離開證書和秘密之後,秘密值將不會再次顯示,且無任何方法能夠擷取。 別忘了記錄下來。

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

在沒有用戶的情況下自行驗證的應用程式需要應用程式許可權(也稱為角色)。 這些許可權可讓應用程式本身直接存取資源。 另一方面,如果我們以已登入的用戶測試 API,我們會指派委派的許可權(範圍)。 委派的許可權可讓應用程式代表使用者採取行動,僅限於使用者的訪問許可權。 請遵循下列步驟,將應用程式許可權指派給精靈應用程式:

  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.NET,以協助處理驗證:

    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("http://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 tenantId = "<your-tenant-id>";     //Use in workforce tenant configuration
    var tenantName = "<your-tenant-name>"; //Use in external tenant configuration
    var authority = $"https://login.microsoftonline.com/{tenantId}"; // Use "https://{tenantName}.ciamlogin.com" for external tenant configuration 
    
    var app = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithAuthority(authority)
        .WithClientSecret(clientSecret)
        .Build();
    
    var result = await app.AcquireTokenForClient(new string[] { scopes }).ExecuteAsync();
    Console.WriteLine($"Access Token: {result.AccessToken}");
    
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    var response = await client.GetAsync("http://localhost:/<your-api-port>/api/todolist");
    var content = await response.Content.ReadAsStringAsync();
    
    Console.WriteLine("Your response is: " + response.StatusCode);
    Console.WriteLine(content);
    
  6. 將程式代碼中的佔位元替換為您的守護程序應用程式客戶端標識、密鑰、Web API 應用程式標識和租戶名稱。

    • 針對外部租戶,請以以下格式使用權限: "https://{tenantName}.ciamlogin.com/"
    • 針對員工租戶,請使用以下格式的權限: "https://login.microsoftonline.com/{tenantId}"
  7. 瀏覽至精靈應用程式根目錄,並使用 命令執行應用程式 dotnet run。 此程式碼會傳送具有有效存取令牌的要求。 您應該會看到字串: 您的回應是:確定 列印在控制台中。