Aplikasi web yang memanggil API web: Memperoleh token untuk aplikasi

Anda telah membangun objek aplikasi klien Anda. Sekarang, Anda 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). Biasanya, Anda tidak perlu mendapatkan token, Anda perlu membuat header Otorisasi yang Anda tambahkan ke permintaan Anda. Untuk mendapatkan header otorisasi, Anda menyuntikkan IAuthorizationHeaderProvider layanan dengan injeksi dependensi di konstruktor pengontrol Anda (atau konstruktor halaman Anda jika Anda menggunakan Blazor), dan Anda menggunakannya dalam tindakan pengontrol Anda. Antarmuka ini memiliki metode yang menghasilkan string yang berisi protokol (Pembawa, Pop, ...) dan token. Untuk mendapatkan header otorisasi untuk memanggil API atas nama pengguna, gunakan (CreateAuthorizationHeaderForUserAsync). Untuk mendapatkan header otorisasi untuk memanggil API hilir atas nama aplikasi itu sendiri, dalam skenario daemon, gunakan (CreateAuthorizationHeaderForAppAsync).

Metode pengontrol dilindungi oleh atribut [Authorize] yang memastikan hanya pengguna terautentikasi yang dapat menggunakan aplikasi 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 tersedia dengan 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 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);
}

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 Bersyar.

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.