Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
A partire dal 1° maggio 2025, Azure AD B2C non sarà più disponibile per l'acquisto per i nuovi clienti. Altre informazioni sono disponibili nelle domande frequenti.
Questo articolo descrive come abilitare, personalizzare e migliorare l'esperienza di autenticazione di Azure Active Directory B2C (Azure AD B2C) per l'applicazione Web.
Prima di iniziare, è importante acquisire familiarità con gli articoli seguenti:
- Configurare l'autenticazione in un'app Web di esempio
- Abilitare l'autenticazione nella propria app Web.
Usare un dominio personalizzato
Usando un dominio personalizzato, è possibile personalizzare completamente l'URL di autenticazione. Dal punto di vista dell'utente, gli utenti rimangono nel dominio durante il processo di autenticazione, anziché essere reindirizzati al nome di dominio di Azure AD B2C b2clogin.com.
Per rimuovere tutti i riferimenti a "b2c" nell'URL, è anche possibile sostituire il nome del tenant B2C, contoso.onmicrosoft.com, nell'URL della richiesta di autenticazione con il GUID dell'ID tenant. Ad esempio, è possibile passare https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ a https://account.contosobank.co.uk/<tenant ID GUID>/.
Per usare un dominio personalizzato e l'ID tenant nell'URL di autenticazione, seguire le indicazioni in Abilitare domini personalizzati. Nella cartella radice del progetto aprire il file appsettings.json . Questo file contiene informazioni sul provider di identità di Azure AD B2C.
Nel fileappsettings.json eseguire le operazioni seguenti:
- Aggiornare la
Instancevoce con il dominio personalizzato. - Aggiornare la voce con
Domaintenant. Per altre informazioni, vedere Usare l'ID tenant.
Il codice JSON seguente mostra le impostazioni dell'app prima della modifica:
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "tenant-name.onmicrosoft.com",
...
}
Il codice JSON seguente mostra le impostazioni dell'app dopo la modifica:
"AzureAdB2C": {
"Instance": "https://login.contoso.com",
"Domain": "00000000-0000-0000-0000-000000000000",
...
}
Supportare scenari avanzati
Il AddMicrosoftIdentityWebAppAuthentication metodo nell'API di Microsoft Identity Platform consente agli sviluppatori di aggiungere codice per scenari di autenticazione avanzati o sottoscrivere eventi OpenIdConnect. Ad esempio, è possibile sottoscrivere OnRedirectToIdentityProvider, che consente di personalizzare la richiesta di autenticazione inviata dall'app ad Azure AD B2C.
Per supportare scenari avanzati, aprire il file Startup.cs e, nella ConfigureServices funzione, sostituire AddMicrosoftIdentityWebAppAuthentication con il frammento di codice seguente:
// 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;
});
Il codice precedente aggiunge l'evento OnRedirectToIdentityProvider con un riferimento al OnRedirectToIdentityProviderFunc metodo . Aggiungere il frammento di codice seguente alla Startup.cs classe .
private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
// Custom code here
// Don't remove this line
await Task.CompletedTask.ConfigureAwait(false);
}
È possibile passare parametri tra il controller e la OnRedirectToIdentityProvider funzione usando i parametri di contesto.
Prepopolare il nome di accesso
Durante un percorso utente di accesso, l'app potrebbe avere come destinazione un utente specifico. Quando un'app è destinata a un utente, può specificare nella richiesta di autorizzazione il login_hint parametro di query con il nome di accesso dell'utente. Azure AD B2C popola automaticamente il nome di accesso e l'utente deve fornire solo la password.
Per precompilare il nome di accesso, eseguire le operazioni seguenti:
Se stai usando una polizza personalizzata, aggiungere l'attestazione di input richiesta, come descritto in Configurare l'accesso diretto.
Completare la procedura Scenari avanzati di supporto .
Aggiungere la riga di codice seguente alla
OnRedirectToIdentityProviderfunzione :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.LoginHint = "emily@contoso.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Preselezionare un fornitore di identità
Se è stato configurato il percorso di accesso per l'applicazione per includere account di social networking, ad esempio Facebook, LinkedIn o Google, è possibile specificare il domain_hint parametro . Questo parametro di query fornisce un suggerimento ad Azure AD B2C sul provider di identità social che dovrebbe essere usato per l'accesso. Ad esempio, se l'applicazione specifica domain_hint=facebook.com, il flusso di accesso passa direttamente alla pagina di accesso di Facebook.
Per reindirizzare gli utenti a un provider di identità esterno, eseguire le operazioni seguenti:
Controlla il nome di dominio del provider di identità esterno. Per altre informazioni, vedere Reindirizzare l'accesso a un provider di social networking.
Completare la procedura Scenari avanzati di supporto .
OnRedirectToIdentityProviderFuncNella funzione aggiungere la riga di codice seguente allaOnRedirectToIdentityProviderfunzione :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.DomainHint = "facebook.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Specificare la lingua dell'interfaccia utente
La personalizzazione della lingua in Azure AD B2C consente al flusso utente di soddisfare diverse lingue in base alle esigenze dei clienti. Per altre informazioni, vedere Personalizzazione della lingua.
Per impostare la lingua preferita, eseguire le operazioni seguenti:
Completare la procedura Scenari avanzati di supporto .
Aggiungere la riga di codice seguente alla
OnRedirectToIdentityProviderfunzione :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.UiLocales = "es"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Passare un parametro personalizzato della stringa di query
Con i criteri personalizzati, è possibile passare un parametro di stringa di query personalizzato. Un buon esempio di caso d'uso è quando si vuole modificare dinamicamente il contenuto della pagina.
Per passare un parametro di stringa di query personalizzato, eseguire le operazioni seguenti:
Configurare l'elemento ContentDefinitionParameters .
Completare la procedura Scenari avanzati di supporto .
Aggiungere la riga di codice seguente alla
OnRedirectToIdentityProviderfunzione :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.Parameters.Add("campaignId", "123"); // More code await Task.CompletedTask.ConfigureAwait(false); }
Fornire un suggerimento per il token ID
Un'applicazione relying party può inviare un token JSON Web (JWT) in ingresso come parte della richiesta di autorizzazione OAuth2. Il token in ingresso è un suggerimento sull'utente o sulla richiesta di autorizzazione. Azure AD B2C convalida il token e quindi estrae l'attestazione.
Per includere un hint per il token ID nella richiesta di autenticazione, eseguire le operazioni seguenti:
Completare la procedura Scenari avanzati di supporto .
Nei tuoi criteri personalizzati, definisci un profilo tecnico del suggerimento del token ID.
Aggiungere la riga di codice seguente alla
OnRedirectToIdentityProviderfunzione :private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { // The idTokenHint variable holds your ID token context.ProtocolMessage.IdTokenHint = idTokenHint // More code await Task.CompletedTask.ConfigureAwait(false); }
Controller account
Per personalizzare le azioni SignIn, SignUp o SignOut , è consigliabile creare un controller personalizzato. La presenza di un controller personalizzato consente di passare parametri tra il controller e la libreria di autenticazione.
AccountController fa parte del Microsoft.Identity.Web.UI pacchetto NuGet, che gestisce le azioni di accesso e disconnesso. È possibile trovarne l'implementazione nella libreria Web di Microsoft Identity.
Aggiungere il controller account
Nel progetto di Visual Studio fare clic con il pulsante destro del mouse sulla cartella Controller e quindi aggiungere un nuovo controller. Selezionare MVC - Controller vuoto e quindi specificare il nome MyAccountController.cs.
Il frammento di codice seguente illustra un oggetto personalizzato MyAccountController con l'azione 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);
}
}
}
Nella visualizzazione _LoginPartial.cshtml modificare il collegamento di accesso al controller.
<form method="get" asp-area="MicrosoftIdentity" asp-controller="MyAccount" asp-action="SignIn">
Passare l'ID criterio di Azure AD B2C
Il frammento di codice seguente illustra un oggetto personalizzato MyAccountController con l'azione SignIn e SignUp . L'azione passa un parametro denominato policy alla libreria di autenticazione. In questo modo è possibile specificare l'ID dei criteri di Azure AD B2C corretto per l'azione specifica.
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);
}
Nella visualizzazione _LoginPartial.cshtml modificare il asp-controller valore in MyAccountController per tutti gli altri collegamenti di autenticazione, ad esempio l'iscrizione o la modifica del profilo.
Passare parametri personalizzati
Il frammento di codice seguente illustra un oggetto personalizzato MyAccountController con l'azione SignIn . L'azione passa un parametro denominato campaign_id alla libreria di autenticazione.
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);
}
Completare la procedura Support advanced scenarios (Scenari avanzati di supporto ) e quindi nel OnRedirectToIdentityProvider metodo leggere il parametro personalizzato:
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);
}
Assicurati di proteggere il reindirizzamento del logout
Dopo la disconnessione, l'utente viene reindirizzato all'URI specificato nel post_logout_redirect_uri parametro, indipendentemente dagli URL di risposta specificati per l'applicazione. Tuttavia, se viene passato un valore valido id_token_hint e l'opzione Richiedi token ID nelle richieste di disconnessione è attivata, Azure AD B2C verifica che il valore di post_logout_redirect_uri corrisponda a uno degli URI di reindirizzamento configurati dell'applicazione prima di eseguire il reindirizzamento. Se non è stato configurato alcun URL di risposta corrispondente per l'applicazione, viene visualizzato un messaggio di errore e l'utente non viene reindirizzato.
Per supportare un reindirizzamento di disconnessione protetto nell'applicazione, seguire prima di tutto la procedura descritta nelle sezioni Account Controller e Supporto di scenari avanzati . Seguire quindi la procedura seguente:
Nel
MyAccountController.cscontroller aggiungere un'azione SignOut usando il frammento di codice seguente:[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); }Nella classe Startup.cs analizzare il
id_token_hintvalore e aggiungere il valore alla richiesta di autenticazione. Il frammento di codice seguente illustra come passare ilid_token_hintvalore alla richiesta di autenticazione: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); }ConfigureServicesNella funzione aggiungere l'opzioneSaveTokensper Controller avere accesso alid_tokenvalore :services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { Configuration.Bind("AzureAdB2C", options); options.Events ??= new OpenIdConnectEvents(); options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc; options.SaveTokens = true; });Nel file di configurazioneappsettings.json aggiungere il percorso dell'URI di reindirizzamento disconnessione alla
SignedOutCallbackPathchiave."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>" }
Nell'esempio precedente, il post_logout_redirect_uri passato nella richiesta di disconnessione sarà nel formato : https://your-app.com/signout/<your-sign-up-in-policy>. Questo URL deve essere aggiunto all'URL di risposta della registrazione dell'applicazione.
Controllo degli accessi in base al ruolo
Con l'autorizzazione in ASP.NET Core è possibile verificare se gli utenti sono autorizzati ad accedere a una risorsa protetta usando uno dei metodi seguenti:
- Autorizzazione basata sui ruoli
- Autorizzazione basata sulle attestazioni
- Autorizzazione basata su criteri
ConfigureServices Nel metodo aggiungere il AddAuthorization metodo , che aggiunge il modello di autorizzazione. Nell'esempio seguente viene creato un criterio denominato EmployeeOnly. Il criterio verifica l'esistenza di un'attestazione EmployeeNumber . Il valore dell'attestazione deve essere uno degli ID seguenti: 1, 2, 3, 4 o 5.
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
È possibile controllare l'autorizzazione in ASP.NET Core usando AuthorizeAttribute e i relativi vari parametri. Nella forma più semplice, l'applicazione dell'attributo Authorize a un controller, un'azione o una pagina Razor limita l'accesso agli utenti autenticati del componente.
I criteri vengono applicati ai controller usando l'attributo Authorize con il nome del criterio. Il codice seguente limita l'accesso all'azione Claims agli utenti autorizzati dai EmployeeOnly criteri:
[Authorize(Policy = "EmployeeOnly")]
public IActionResult Claims()
{
return View();
}
Passaggi successivi
- Per altre informazioni sull'autorizzazione, vedere Introduzione all'autorizzazione in ASP.NET Core.