Aplikasi web yang memanggil API web: Memperoleh token untuk aplikasi

Anda telah membangun objek aplikasi klien Anda. Sekarang, Anda akan menggunakannya untuk memperoleh token untuk memanggil API web. Pada ASP.NET atau ASP.NET Core, memanggil API web dilakukan di pengontrol:

  • Dapatkan token untuk API web menggunakan cache token. Untuk mendapatkan token ini, Anda memanggil metode Microsoft Authentication Library (MSAL) AcquireTokenSilent (atau yang setara di Microsoft.Identity.Web).
  • Hubungi API yang dilindungi, yang meneruskan token akses ke sana sebagai parameter.

Microsoft.Identity.Web menambahkan metode ekstensi yang menyediakan layanan kemudahan untuk memanggil Microsoft Graph atau API web downstream. Metode ini dijelaskan secara terperinci di Aplikasi web yang memanggil API web: Panggil API. Dengan metode pembantu ini, Anda tidak perlu memperoleh token secara manual.

Namun, jika Anda ingin memperoleh token secara manual, kode berikut menunjukkan contoh penggunaan Microsoft.Identity.Web untuk melakukannya di pengontrol rumah. Ini memanggil Microsoft Graph menggunakan REST API (bukan Microsoft Graph SDK). Untuk mendapat token untuk memanggil API hilir, Anda menyuntikkan layanan ITokenAcquisition dengan injeksi dependensi di konstruktor pengontrol Anda (atau konstruktor halaman Anda jika Anda menggunakan Blazor), dan Anda menggunakannya dalam tindakan pengontrol Anda, yang mendapatkan token untuk pengguna (GetAccessTokenForUserAsync) atau untuk aplikasi itu sendiri (GetAccessTokenForAppAsync) dalam skenario daemon.

Metode pengontrol dilindungi oleh atribut [Authorize] yang memastikan hanya pengguna terautentikasi yang dapat menggunakan aplikasi web.

[Authorize]
public class HomeController : Controller
{
 readonly ITokenAcquisition tokenAcquisition;

 public HomeController(ITokenAcquisition tokenAcquisition)
 {
  this.tokenAcquisition = tokenAcquisition;
 }

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

}

Layanan ITokenAcquisition ini disuntikkan oleh ASP.NET menggunakan injeksi dependensi.

Berikut ini adalah kode yang disederhanakan untuk tindakan HomeController, yang mendapat token untuk memanggil 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 tokenAcquisition.GetAccessTokenForUserAsync(scopes);

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

Untuk lebih memahami kode yang diperlukan untuk skenario ini, lihat langkah fase 2 (2-1-Web app Calls Microsoft Graph) dari tutorial ms-identity-aspnetcore-webapp-tutorial.

Atribut AuthorizeForScopes di atas tindakan pengontrol (atau halaman Razor jika Anda menggunakan templat Razor) disediakan oleh Microsoft.Identity.Web. Ini memastikan bahwa pengguna dimintai persetujuan jika diperlukan, dan secara bertahap.

Ada variasi kompleks lainnya, seperti:

  • Memanggil beberapa API.
  • Memproses persetujuan inkremental dan akses bersyarat.

Langkah-langkah lanjutan ini dibahas dalam bab 3 dari tutorial 3-WebApp-multi-API.

Langkah berikutnya

Lanjutkan ke artikel berikutnya dalam skenario ini, yaitu Panggil API web.