測試受保護的 ASP.NET Core Web API
適用於:白色複選標記符號的 企業員工租戶
外部租戶(深入瞭解)
本教學課程是一系列的最後一個部分,示範如何建置及測試已在 Microsoft Entra 租用戶中註冊的受保護 Web API。 在 本系列的第 1 部分中,您已建立 ASP.NET Core Web API 並保護其端點。 您現在會建立輕量型精靈應用程式、在您的租用戶中註冊它,並使用精靈應用程式來測試您所建置的Web API。
在本教學課程中,您將瞭解如何:
- 註冊精靈應用程式
- 將應用程式角色指派給精靈應用程式
- 建置精靈應用程式
- 執行精靈應用程式以呼叫受保護的 Web API
先決條件
註冊精靈應用程式
下列步驟示範如何在 Microsoft Entra 系統管理中心註冊您的精靈應用程式:
以至少 應用程式開發人員身分登入 Microsoft Entra 系統管理中心。
如果您有多個租使用者的存取權,請使用頂端功能表中的 [設定] 圖示
,從 [目錄 + 訂用帳戶] 功能表切換至外部租使用者。
瀏覽至 身分識別>應用程式>應用程式註冊。
選擇 + 新註冊。
在出現的 [[註冊應用程式] 頁面 中,輸入應用程式的註冊資訊:
在 [名稱] 區段中,輸入將向用戶顯示有意義的應用程式名稱,例如 ciam-client-app。
在 支援的帳戶類型下,選取 僅此組織目錄中的帳戶。
選取 寄存器。
註冊完成時,會顯示應用程式的 [概觀] 窗格。 記錄 目錄(租使用者)標識碼 和 應用程式(用戶端)標識碼,以用於您的應用程式原始程式碼。
建立已註冊應用程式的客戶端密碼。 應用程式會在要求令牌時,使用用戶端密碼來證明其身分識別:
- 從 [應用程式註冊] 頁面中,選取您建立的應用程式(例如 Web 應用程式用戶端密碼),以開啟其 概觀 頁面。
- 在 [管理] 底下,選取 [憑證 & 密碼>[客戶端密碼]>[新增客戶端密碼]。
- 在 [描述] 方塊中,輸入客戶端密碼的描述(例如,Web 應用程式用戶端密碼)。
- 在 [到期] 底下,選取秘密的有效期(根據貴組織的安全規則),然後選取 [新增]。
- 記錄秘密的 值。 您可以在稍後的步驟中使用此值進行設定。 離開 憑證和秘密頁面後,秘密值將不再顯示,並且無法以任何方式檢索。 確保你有記錄下來。
將應用程式角色指派給精靈應用程式
自行驗證的應用程式需要應用程式許可權。
從 [應用程式註冊] 頁面中,選取您建立的精靈應用程式。
在 [管理] 下,選取 [API 許可權]。
在 設定的許可權下,選取 新增許可權。
選取 API 我組織使用的 標籤。
在 API 清單中,選取您稍早註冊的 Web API。
請選擇 應用程式許可權 選項。 我們會選取此選項,因為應用程式會以本身身分登入,但不代表使用者登入。
從許可權清單中,選取(Forecast.Read),如有需要,請使用搜尋方塊。
選擇 新增許可權 按鈕。
此時,您已正確賦予權限。 不過,由於精靈應用程式不允許使用者與其互動,因此使用者本身無法同意這些許可權。 若要解決此問題,身為系統管理員必須代表租使用者中的所有使用者同意這些許可權:
- 選取 [授與 <你的租戶名稱>的系統管理員同意],然後選取 [是]。
- 選取 [重新整理],然後確認您的租用戶名稱 [授與 <]> 是否顯示在 [許可權] 狀態 底下。
建置精靈應用程式
初始化 .NET 控制台應用程式,並流覽至其根資料夾:
dotnet new console -o MyTestApp cd MyTestApp
執行下列命令來安裝 MSAL.NET,以協助處理驗證:
dotnet add package Microsoft.Identity.Client
執行您的 API 專案,並記下其執行所在的埠。
開啟 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>/weatherforecast"); Console.WriteLine("Your response is: " + response.StatusCode);
瀏覽至精靈應用程式根目錄,並使用 命令執行應用程式
dotnet run
。 此程式代碼會傳送沒有存取令牌的要求。 您應該會看到字串:您的回應為:未經授權的 列印在控制台中。拿掉步驟 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(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>/weatherforecast"); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine("Your response is: " + response.StatusCode); Console.WriteLine(content);
瀏覽至精靈應用程式根目錄,並使用 命令執行應用程式
dotnet run
。 此程式碼會傳送具有有效存取令牌的要求。 您應該會看到字串:您的回應是:OK 顯示在控制台中,以及來自我們簡約 API 的一些虛擬天氣預報數據。Your response is: OK [{"date":"2025-03-01","temperatureC":45,"summary":"Warm","temperatureF":112}, {"date":"2025-03-02","temperatureC":7,"summary":"Freezing","temperatureF":44}, {"date":"2025-03-03","temperatureC":48,"summary":"Sweltering","temperatureF":118}, {"date":"2025-03-04","temperatureC":-20,"summary":"Chilly","temperatureF":-3}, {"date":"2025-03-05","temperatureC":12,"summary":"Scorching","temperatureF":53}]
相關內容
- 如何使用 cURL 呼叫受保護的Web API
- 如何使用 Insomnia 呼叫受保護的 Web API