Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Berlaku mulai 1 Mei 2025, Azure AD B2C tidak akan lagi tersedia untuk dibeli untuk pelanggan baru. Pelajari lebih lanjut di FAQ kami.
Artikel ini menjelaskan cara mengaktifkan, menyesuaikan, dan meningkatkan pengalaman autentikasi Azure Active Directory B2C (Azure AD B2C) untuk aplikasi web Anda.
Sebelum memulai, penting untuk membiasakan diri dengan artikel berikut:
- Mengonfigurasi autentikasi dalam contoh aplikasi web
- Aktifkan autentikasi di aplikasi web Anda sendiri.
Menggunakan domain kustom
Dengan menggunakan domain kustom, Anda dapat sepenuhnya memberi merek URL autentikasi. Dari perspektif pengguna, pengguna tetap berada di domain Anda selama proses autentikasi, daripada dialihkan ke nama domain azure AD B2C b2clogin.com.
Untuk menghapus semua referensi ke "b2c" di URL, Anda juga dapat mengganti nama penyewa B2C, contoso.onmicrosoft.com, di URL permintaan autentikasi dengan GUID ID penyewa Anda. Misalnya, Anda dapat mengubah https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ ke https://account.contosobank.co.uk/<tenant ID GUID>/.
Untuk menggunakan domain kustom dan ID penyewa Anda di URL autentikasi, ikuti panduan di Mengaktifkan domain kustom. Di bawah folder akar proyek, buka file appsettings.json. File ini berisi informasi tentang IdP Azure AD B2C Anda.
Dalam file appsettings.json , lakukan hal berikut:
-
InstancePerbarui entri dengan domain kustom Anda. -
DomainPerbarui entri dengan ID penyewa Anda. Untuk informasi selengkapnya, lihat Menggunakan ID penyewa.
JSON berikut menunjukkan pengaturan aplikasi sebelum perubahan:
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "tenant-name.onmicrosoft.com",
...
}
JSON berikut menunjukkan pengaturan aplikasi setelah perubahan:
"AzureAdB2C": {
"Instance": "https://login.contoso.com",
"Domain": "00000000-0000-0000-0000-000000000000",
...
}
Mendukung skenario tingkat lanjut
Metode AddMicrosoftIdentityWebAppAuthentication dalam API platform identitas Microsoft memungkinkan pengembang menambahkan kode untuk skenario autentikasi tingkat lanjut atau berlangganan peristiwa OpenIdConnect. Misalnya, Anda dapat berlangganan OnRedirectToIdentityProvider, yang memungkinkan Anda menyesuaikan permintaan autentikasi yang dikirim aplikasi Anda ke Azure AD B2C.
Untuk mendukung skenario tingkat lanjut, buka file Startup.cs dan, dalam ConfigureServices fungsi, ganti dengan cuplikan AddMicrosoftIdentityWebAppAuthentication kode berikut:
// Configuration to sign-in users with Azure AD B2C
//services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C");
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(options =>
{
Configuration.Bind("AzureAdB2C", options);
options.Events ??= new OpenIdConnectEvents();
options.Events.OnRedirectToIdentityProvider += OnRedirectToIdentityProviderFunc;
});
Kode sebelumnya menambahkan peristiwa OnRedirectToIdentityProvider dengan referensi ke OnRedirectToIdentityProviderFunc metode . Tambahkan cuplikan kode berikut ke Startup.cs kelas .
private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
// Custom code here
// Don't remove this line
await Task.CompletedTask.ConfigureAwait(false);
}
Anda dapat meneruskan parameter antara pengontrol dan OnRedirectToIdentityProvider fungsi dengan menggunakan parameter konteks.
Mengisi nama masuk terlebih dahulu
Selama perjalanan pengguna masuk, aplikasi Anda mungkin menargetkan pengguna tertentu. Saat aplikasi menargetkan pengguna, aplikasi dapat menentukan parameter kueri dengan nama masuk pengguna dalam permintaan otorisasi login_hint. Azure AD B2C secara otomatis mengisi nama masuk, dan pengguna hanya perlu menyediakan kata sandi.
Untuk mengisi nama masuk terlebih dahulu, lakukan hal berikut:
Jika Anda menggunakan kebijakan kustom, tambahkan klaim masuk yang diperlukan, seperti yang dijelaskan dalam Menyiapkan masuk langsung.
Selesaikan prosedur Dukung skenario lanjutan .
Tambahkan baris kode berikut ke
OnRedirectToIdentityProviderfungsi :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.LoginHint = "emily@contoso.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Memilih penyedia identitas terlebih dahulu
Jika anda mengonfigurasi perjalanan masuk untuk aplikasi anda untuk menyertakan akun sosial, seperti Facebook, LinkedIn, atau Google, Anda dapat menentukan parameter.domain_hint Parameter kueri ini memberikan petunjuk kepada Azure AD B2C tentang IdP sosial yang harus digunakan untuk masuk. Misalnya, jika aplikasi menentukan domain_hint=facebook.com, alur masuk langsung masuk ke halaman masuk Facebook.
Untuk mengalihkan pengguna ke penyedia identitas eksternal, lakukan hal berikut:
Periksa nama domain penyedia identitas eksternal Anda. Untuk informasi selengkapnya, lihat Mengalihkan pendaftaran masuk ke penyedia sosial.
Selesaikan prosedur Dukung skenario lanjutan .
OnRedirectToIdentityProviderFuncDalam fungsi , tambahkan baris kode berikut keOnRedirectToIdentityProviderfungsi :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.DomainHint = "facebook.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Tentukan bahasa UI
Penyesuaian bahasa di Azure AD B2C memungkinkan alur pengguna Anda untuk mengakomodasi berbagai bahasa yang sesuai dengan kebutuhan pelanggan Anda. Untuk informasi selengkapnya, lihat Kustomisasi bahasa.
Untuk mengatur bahasa pilihan, lakukan hal berikut:
Selesaikan prosedur Dukung skenario lanjutan .
Tambahkan baris kode berikut ke
OnRedirectToIdentityProviderfungsi :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.UiLocales = "es"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Mengirimkan parameter string kueri kustom
Dengan kebijakan kustom, Anda dapat meneruskan parameter string kueri kustom. Contoh kasus penggunaan yang baik adalah ketika Anda ingin mengubah konten halaman secara dinamis.
Untuk meneruskan parameter string kueri kustom, lakukan hal berikut:
Konfigurasikan elemen ContentDefinitionParameters .
Selesaikan prosedur Dukung skenario lanjutan .
Tambahkan baris kode berikut ke
OnRedirectToIdentityProviderfungsi :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.Parameters.Add("campaignId", "123"); // More code await Task.CompletedTask.ConfigureAwait(false); }
Berikan petunjuk token ID
Aplikasi pihak yang mengandalkan dapat mengirim JSON Web Token (JWT) masuk sebagai bagian dari permintaan otorisasi OAuth2. Token masuk adalah petunjuk tentang pengguna atau permintaan otorisasi. Azure AD B2C memvalidasi token lalu mengekstrak klaim.
Untuk menyertakan petunjuk token ID dalam permintaan autentikasi, lakukan hal berikut:
Selesaikan prosedur Dukung skenario lanjutan .
Dalam kebijakan kustom Anda, tentukan profil teknis petunjuk token ID.
Tambahkan baris kode berikut ke
OnRedirectToIdentityProviderfungsi :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { // The idTokenHint variable holds your ID token context.ProtocolMessage.IdTokenHint = idTokenHint // More code await Task.CompletedTask.ConfigureAwait(false); }
Pengontrol akun
Jika Anda ingin menyesuaikan tindakan SignIn, SignUp, atau SignOut , kami mendorong Anda untuk membuat pengontrol Anda sendiri. Memiliki pengontrol Anda sendiri memungkinkan Anda meneruskan parameter antara pengontrol dan pustaka autentikasi.
AccountController adalah bagian Microsoft.Identity.Web.UI dari paket NuGet, yang menangani tindakan masuk dan keluar. Anda dapat menemukan implementasinya di pustaka Web Identitas Microsoft.
Menambahkan pengontrol Akun
Di proyek Visual Studio Anda, klik kanan folder Pengontrol , lalu tambahkan Pengontrol baru. Pilih MVC - Pengontrol Kosong, lalu berikan nama MyAccountController.cs.
Cuplikan kode berikut menunjukkan kustom MyAccountController dengan tindakan SignIn .
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace mywebapp.Controllers
{
[AllowAnonymous]
[Area("MicrosoftIdentity")]
[Route("[area]/[controller]/[action]")]
public class MyAccountController : Controller
{
[HttpGet("{scheme?}")]
public IActionResult SignIn([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
return Challenge(properties, scheme);
}
}
}
Dalam tampilan _LoginPartial.cshtml , ubah tautan masuk ke pengontrol Anda.
<form method="get" asp-area="MicrosoftIdentity" asp-controller="MyAccount" asp-action="SignIn">
Meneruskan ID kebijakan Azure AD B2C
Cuplikan kode berikut menunjukkan kustom MyAccountController dengan tindakan SignIn dan SignUp . Tindakan meneruskan parameter bernama policy ke pustaka autentikasi. Ini memungkinkan Anda memberikan ID kebijakan Azure AD B2C yang benar untuk tindakan tertentu.
public IActionResult SignIn([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
properties.Items["policy"] = "B2C_1_SignIn";
return Challenge(properties, scheme);
}
public IActionResult SignUp([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
properties.Items["policy"] = "B2C_1_SignUp";
return Challenge(properties, scheme);
}
Dalam tampilan _LoginPartial.cshtml , ubah asp-controller nilai menjadi MyAccountController untuk tautan autentikasi lainnya, seperti daftar atau edit profil.
Meneruskan parameter kustom
Cuplikan kode berikut menunjukkan kustom MyAccountController dengan tindakan SignIn . Tindakan meneruskan parameter bernama campaign_id ke pustaka autentikasi.
public IActionResult SignIn([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
properties.Items["policy"] = "B2C_1_SignIn";
properties.Items["campaign_id"] = "1234";
return Challenge(properties, scheme);
}
Selesaikan prosedur Dukung skenario lanjutan lalu, dalam OnRedirectToIdentityProvider metode , baca parameter kustom:
private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
// Read the custom parameter
var campaign_id = context.Properties.Items.FirstOrDefault(x => x.Key == "campaign_id").Value;
// Add your custom code here
if (campaign_id != null)
{
// Send parameter to authentication request
context.ProtocolMessage.SetParameter("campaign_id", campaign_id);
}
await Task.CompletedTask.ConfigureAwait(false);
}
Amankan pengalihan logout Anda
Setelah keluar, pengguna dialihkan ke URI yang ditentukan dalam post_logout_redirect_uri parameter, terlepas dari URL balasan yang telah ditentukan untuk aplikasi. Namun, jika id_token_hint yang valid diteruskan dan Memerlukan Token ID dalam permintaan keluar diaktifkan, Azure AD B2C memverifikasi bahwa nilai post_logout_redirect_uri cocok dengan salah satu URI pengalihan yang dikonfigurasi dari aplikasi sebelum pengalihan dilakukan. Jika tidak ada URL balasan yang cocok yang dikonfigurasi untuk aplikasi, pesan kesalahan ditampilkan dan pengguna tidak dialihkan.
Untuk mendukung pengalihan keluar yang aman di aplikasi Anda, pertama-tama ikuti langkah-langkah di bagian Pengontrol akun dan Dukungan skenario tingkat lanjut . Kemudian ikuti langkah-langkah di bawah ini:
Di
MyAccountController.cspengontrol, tambahkan tindakan SignOut menggunakan cuplikan kode berikut:[HttpGet("{scheme?}")] public async Task<IActionResult> SignOutAsync([FromRoute] string scheme) { scheme ??= OpenIdConnectDefaults.AuthenticationScheme; //obtain the id_token var idToken = await HttpContext.GetTokenAsync("id_token"); //send the id_token value to the authentication middleware properties.Items["id_token_hint"] = idToken; return SignOut(properties,CookieAuthenticationDefaults.AuthenticationScheme,scheme); }Di kelas Startup.cs , uraikan
id_token_hintnilai dan tambahkan nilai ke permintaan autentikasi. Cuplikan kode berikut menunjukkan cara meneruskanid_token_hintnilai ke permintaan autentikasi:private async Task OnRedirectToIdentityProviderForSignOutFunc(RedirectContext context) { var id_token_hint = context.Properties.Items.FirstOrDefault(x => x.Key == "id_token_hint").Value; if (id_token_hint != null) { // Send parameter to authentication request context.ProtocolMessage.SetParameter("id_token_hint", id_token_hint); } await Task.CompletedTask.ConfigureAwait(false); }ConfigureServicesDalam fungsi , tambahkanSaveTokensopsi untuk Pengontrol memiliki akses keid_tokennilai :services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { Configuration.Bind("AzureAdB2C", options); options.Events ??= new OpenIdConnectEvents(); options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc; options.SaveTokens = true; });Dalam file konfigurasi appsettings.json , tambahkan jalur URI pengalihan keluar Anda ke
SignedOutCallbackPathkunci."AzureAdB2C": { "Instance": "https://<your-tenant-name>.b2clogin.com", "ClientId": "<web-app-application-id>", "Domain": "<your-b2c-domain>", "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>", "SignUpSignInPolicyId": "<your-sign-up-in-policy>" }
Dalam contoh di atas, post_logout_redirect_uri yang diteruskan ke permintaan keluar akan dalam format: https://your-app.com/signout/<your-sign-up-in-policy>. URL ini harus ditambahkan ke URL balasan Pendaftaran Aplikasi.
Kontrol akses berbasis peran
Dengan otorisasi di ASP.NET Core , Anda dapat memeriksa apakah pengguna berwenang untuk mengakses sumber daya yang dilindungi dengan menggunakan salah satu metode berikut:
Dalam metode , ConfigureServices tambahkan AddAuthorization metode , yang menambahkan model otorisasi. Contoh berikut membuat kebijakan bernama EmployeeOnly. Kebijakan memeriksa untuk memverifikasi bahwa klaim EmployeeNumber ada. Nilai klaim harus salah satu ID berikut: 1, 2, 3, 4, atau 5.
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
Anda mengontrol otorisasi di ASP.NET Core dengan menggunakan AuthorizeAttribute dan berbagai parameternya. Dalam bentuk yang paling dasar, menerapkan Authorize atribut ke pengontrol, tindakan, atau Halaman Razor membatasi akses ke pengguna terautentikasi komponen tersebut.
Anda menerapkan kebijakan ke pengontrol dengan menggunakan Authorize atribut dengan nama kebijakan. Kode berikut membatasi akses ke Claims tindakan kepada pengguna yang diotorisasi oleh EmployeeOnly kebijakan:
[Authorize(Policy = "EmployeeOnly")]
public IActionResult Claims()
{
return View();
}
Langkah selanjutnya
- Untuk mempelajari selengkapnya tentang otorisasi, lihat Pengenalan otorisasi di ASP.NET Core.