共用方式為


呼叫 Web API 的 Web 應用程式:取得應用程式的權杖

您已建立用戶端應用程式物件。 現在,您使用該物件取得權杖來呼叫 Web API。 在 ASP.NET 或 ASP.NET Core 中,呼叫 Web API 是在控制器中完成:

  • 使用權杖快取來取得 Web API 的權杖。 若要取得此權杖,請呼叫 Microsoft 驗證程式庫 (MSAL) AcquireTokenSilent 方法 (或 Microsoft.Identity.Web 中的對等項目)。
  • 呼叫受保護的 API,並將作為參數的存取權杖傳遞給它。

Microsoft.Identity.Web 會新增擴充方法,以提供用來呼叫 Microsoft Graph 或下游 Web API 的便利服務。 這些方法在 呼叫 Web API 的 Web 應用程式:呼叫 API 中有詳細的說明。 使用這些協助程式方法時,您不需要手動取得權杖。

但是,如果您想要以手動方式取得權杖,下列程式碼會示範使用 Microsoft.Identity.Web 在首頁控制器中執行此動作的範例。 它會使用 REST API 呼叫 Microsoft Graph (而非 Microsoft Graph SDK)。 通常,您不需要取得權杖,而是需要建置授權標頭以新增至您的要求。 若要取得授權標頭,您可以透過控制器的建構函式 (如果使用 Blazor,則為頁面建構函式) 中的相依性插入來插入 IAuthorizationHeaderProvider 服務,並在控制器動作中使用。 這個介面有方法可產生包含通訊協定 (Bearer、Pop 等) 和權杖的字串。 若要取得代表使用者呼叫 API 的授權標頭,請使用 (CreateAuthorizationHeaderForUserAsync)。 若要取得授權標頭來代表應用程式本身呼叫下游 API,請在精靈案例中使用 (CreateAuthorizationHeaderForAppAsync)。

控制器方法會受到[Authorize]屬性的保護,確保僅有已驗證的使用者可以使用 Web 應用程式。

[Authorize]
public class HomeController : Controller
{
 readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

 public HomeController(IAuthorizationHeaderProvider authorizationHeaderProvider)
 {
  this.authorizationHeaderProvider = authorizationHeaderProvider;
 }

 // Code for the controller actions (see code below)

}

ASP.NET Core 透過相依性插入提供 IAuthorizationHeaderProvider

以下是HomeController動作的簡易程式碼,其會取得要呼叫 Microsoft Graph 的權杖:

[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public async Task<IActionResult> Profile()
{
 // Acquire the access token.
 string[] scopes = new string[]{"user.read"};
 string accessToken = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

 // Use the access token to call a protected web API.
 HttpClient client = new HttpClient();
 client.DefaultRequestHeaders.Add("Authorization", accessToken);
 string json = await client.GetStringAsync(url);
}

如要更加了解此情節要求的程式碼,請參閱階段 2 (2-1-Web 應用程式呼叫 Microsoft Graph) 的 ms-identity-aspnetcore-webapp-tutorial 教學課程步驟。

控制器動作頂端的AuthorizeForScopes屬性 (或如果您使用 Razor 範本,即Razor 頁面上的屬性) 是由 Microsoft.Identity.Web 提供。 其可確保使用者會在需要且遞增的情況下要求同意。

還有其他複雜的變化,例如:

  • 呼叫數個 API。
  • 處理增量同意和條件式存取。

這些進階步驟在 3-WebApp-multi-APIs 教學課程的第 3 章中有涵蓋。

下一步

請繼續進入此案例的下一個文章:呼叫 Web API