共用方式為


呼叫 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)。 通常,您不需要取得令牌,您必須建置您新增至要求的授權標頭。 若要取得授權標頭,您可以在 IAuthorizationHeaderProvider 控制器的建構函式中插入相依性插入服務(或使用 Blazor 時的頁面建構函式),並在控制器動作中使用。 這個介面有方法可產生包含通訊協定的字串(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);
}

若要進一步瞭解此案例所需的程序代碼,請參閱 ms-identity-aspnetcore-webapp-tutorial 教學課程的階段 2 (2-1-Web 應用程式呼叫 Microsoft Graph) 步驟。

AuthorizeForScopes Microsoft.Identity.Web 提供控制器動作上方的屬性(如果您使用 Razor 範本,則為 Razor 頁面的屬性。 它會確保使用者在需要時要求同意,並以累加方式進行。

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

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

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

下一步

請移至此案例中的下一篇文章, 呼叫 Web API