Aplikasi web yang memasukkan pengguna: Konfigurasi kode

Pelajari cara mengonfigurasi kode untuk aplikasi web Anda yang memasukkan pengguna.

Pustaka Microsoft yang mendukung aplikasi web

Pustaka Microsoft berikut digunakan untuk melindungi aplikasi web (dan API web):

Bahasa pemrogram/kerangka kerja Proyek di
GitHub
Paket Persiapan
memulai
Memasukkan pengguna Mengakses API web Tersedia secara umum (GA) atau
Pratinjau umum1
.NET MSAL.NET Microsoft.Identity.Client Library cannot request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel Library cannot request ID tokens for user sign-in.2 Library cannot request access tokens for protected web APIs.2 GA
Inti ASP.NET Inti ASP.NET Microsoft.AspNetCore.Authentication Mulai Cepat Library can request ID tokens for user sign-in. Library cannot request access tokens for protected web APIs. GA
Inti ASP.NET Microsoft.Identity.Web Microsoft.Identity.Web Mulai Cepat Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Java MSAL4J msal4j Mulai Cepat Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Node.js MSAL Node msal-node Mulai Cepat Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA
Python MSAL Python msal Mulai Cepat Library can request ID tokens for user sign-in. Library can request access tokens for protected web APIs. GA

1Ketentuan penggunaan tambahan untuk Pratinjau Microsoft Azure berlaku untuk pustaka dalam Pratinjau umum.

2 Pustaka Microsoft.IdentityModel hanya memvalidasi token - pustaka ini tidak dapat meminta ID atau mengakses token.

Pilih tab yang sesuai dengan platform yang Anda minati:

Cuplikan kode dalam artikel ini dan berikut ini diekstrak dari tutorial inkremental aplikasi web Core ASP.NET, bab 1.

Anda mungkin ingin merujuk ke tutorial ini untuk detail penerapan lengkap.

File konfigurasi

Aplikasi web yang memasukkan pengguna menggunakan platform identitas Microsoft dikonfigurasi melalui file konfigurasi. Ini adalah nilai yang harus Anda tentukan dalam konfigurasi:

  • Instans cloud (Instance) jika Anda ingin aplikasi Anda berjalan di cloud nasional, misalnya
  • Audiens di ID penyewa (TenantId)
  • ID klien (ClientId) untuk aplikasi Anda, seperti yang disalin dari portal Microsoft Azure

Anda mungkin juga melihat referensi ke Authority. Nilai Authority adalah penggabungan nilai Instance dan TenantId.

Di ASP.NET Core, pengaturan ini terletak di file appsettings.json, di bagian "AzureAd".

{
  "AzureAd": {
    // Azure cloud instance among:
    // - "https://login.microsoftonline.com/" for Azure public cloud
    // - "https://login.microsoftonline.us/" for Azure US government
    // - "https://login.microsoftonline.de/" for Azure AD Germany
    // - "https://login.partner.microsoftonline.cn/common" for Azure AD China operated by 21Vianet
    "Instance": "https://login.microsoftonline.com/",

    // Azure AD audience among:
    // - "TenantId" as a GUID obtained from the Azure portal to sign in users in your organization
    // - "organizations" to sign in users in any work or school account
    // - "common" to sign in users with any work or school account or Microsoft personal account
    // - "consumers" to sign in users with a Microsoft personal account only
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

Di ASP.NET Core, file lain (properties\launchSettings.json) berisi URL (applicationUrl) dan port TLS/SSL (sslPort) untuk aplikasi dan berbagai profil Anda.

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

Di portal Microsoft Azure, URI pengalihan yang Anda daftarkan di halaman Autentikasi untuk aplikasi Anda harus cocok dengan URL ini. Untuk dua file konfigurasi sebelumnya akan menjadi https://localhost:44321/signin-oidc. Alasannya adalah bahwa applicationUrl adalah http://localhost:3110, tetapi sslPort ditentukan (44321). CallbackPath adalah /signin-oidc, seperti yang ditentukan dalam appsettings.json.

Dengan cara yang sama, URI keluar akan ditetapkan ke https://localhost:44321/signout-oidc.

Catatan

SignedOutCallbackPath harus diatur ke portal atau aplikasi untuk menghindari konflik saat menangani peristiwa.

Kode inisialisasi

Kode inisialisasi berbeda tergantung platform. Untuk ASP.NET Core dan ASP.NET, pengguna yang masuk didelegasikan ke middleware OpenID Connect. Template ASP.NET atau ASP.NET Core menghasilkan aplikasi web untuk titik akhir Microsoft Azure Active Directory (Azure AD) v1.0. Beberapa konfigurasi diperlukan untuk menyesuaikannya dengan platform identitas Microsoft. Dalam kasus Java, ini ditangani oleh Spring dengan kerja sama aplikasi.

Selain aplikasi web ASP.NET Core (dan API web), aplikasi dilindungi karena Anda memiliki atribut [Authorize] pada pengontrol atau tindakan pengontrol. Atribut ini memeriksa bahwa pengguna sudah diautentikasi. Sebelum rilis .NET 6, kode yang menginisialisasi aplikasi ada di file Startup.cs. Proyek ASP.NET Core baru dengan .NET 6 tidak lagi berisi file Startup.cs. Ia digantikan oleh file Program.cs. Bagian selanjutnya dari tutorial ini berkaitan dengan .NET 5 atau yang lebih rendah.

Untuk menambahkan autentikasi dengan platform identitas Microsoft (dulu Microsoft Azure Active Directory v2.0), Anda harus menambahkan kode berikut. Komentar dalam kode harus jelas.

Catatan

Jika Anda ingin memulai langsung dengan templat ASP.NET Core baru untuk platform identitas Microsoft, yang memanfaatkan Microsoft.Identity.Web, Anda dapat mengunduh pratinjau paket NuGet yang berisi templat proyek untuk .NET Core 3.1 dan .NET 5.0. Selanjutnya, setelah diinstal, Anda dapat langsung membuat contoh aplikasi web ASP.NET Core (MVC atau Blazor). Lihat Template proyek aplikasi web Microsoft.Identity.Web untuk detailnya. Ini adalah pendekatan paling sederhana karena akan melakukan semua langkah di bawah ini untuk Anda.

Jika Anda lebih suka memulai proyek dengan proyek web ASP.NET Core default saat ini dalam Visual Studio atau dengan menggunakan dotnet new mvc --auth SingleOrg atau dotnet new webapp --auth SingleOrg, Anda akan melihat kode seperti berikut:

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

Kode ini menggunakan warisan paket NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI yang digunakan untuk membuat aplikasi Azure AD v1.0. Artikel ini menjelaskan cara membuat aplikasi platform identitas Microsoft (Microsoft Azure Active Directory v2.0) yang menggantikan kode tersebut.

  1. Tambahkan paket NuGet Microsoft.Identity.Web dan Microsoft.Identity.Web.UI ke proyek Anda. Hapus paket NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI.

  2. Perbarui kode di ConfigureServices agar menggunakan metode AddMicrosoftIdentityWebAppAuthentication dan AddMicrosoftIdentityUI.

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. Dalam metode Configure pada Startup.cs, aktifkan autentikasi dengan panggilan ke app.UseAuthentication(); dan app.MapControllers();.

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

Dalam kode di atas:

  • Metode ekstensi AddMicrosoftIdentityWebAppAuthentication didefinisikan dalam Microsoft.Identity.Web. Ini:

    • Menambahkan layanan autentikasi.
    • Mengonfigurasi opsi untuk membaca file konfigurasi (di sini dari bagian "AzureAD")
    • Mengonfigurasi opsi OpenID Connect agar otoritasnya adalah platform identitas Microsoft.
    • Memvalidasi pengeluar sertifikat token.
    • Memastikan klaim yang sesuai dengan nama dipetakan dari klaim preferred_username dalam token ID.
  • Selain objek konfigurasi, Anda dapat menentukan nama bagian konfigurasi saat memanggil AddMicrosoftIdentityWebAppAuthentication. Secara default, ini adalah AzureAd.

  • AddMicrosoftIdentityWebAppAuthentication memiliki parameter lain untuk skenario tingkat lanjut. Misalnya, menelusuri kejadian middleware OpenID Connect dapat membantu Anda memecahkan masalah aplikasi web jika autentikasi tidak berfungsi. Mengatur parameter opsional subscribeToOpenIdConnectMiddlewareDiagnosticsEvents ke true akan memperlihatkan bagaimana informasi diproses oleh kumpulan middleware ASP.NET Core saat berkembang dari respons HTTP ke identitas pengguna di HttpContext.User.

  • Metode ekstensi AddMicrosoftIdentityUI didefinisikan dalam Microsoft.Identity.Web. Ini menyediakan pengontrol default untuk menangani masuk dan keluar.

Untuk informasi selengkapnya tentang bagaimana Microsoft.Identity.Web memungkinkan Anda membuat aplikasi web, lihat Web Apps di microsoft-identity-web.

Langkah berikutnya

Di artikel berikutnya, Anda akan mempelajari cara memicu masuk dan keluar.

Beralih ke artikel berikutnya dalam skenario ini, Masuk dan keluar.