Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Vanaf 1 mei 2025 is Azure AD B2C niet meer beschikbaar voor nieuwe klanten. Meer informatie vindt u in onze veelgestelde vragen.
In dit artikel wordt beschreven hoe u de verificatie-ervaring van Azure Active Directory B2C (Azure AD B2C) voor uw webtoepassing inschakelt, aanpast en verbetert.
Voordat u begint, is het belangrijk om vertrouwd te raken met de volgende artikelen:
Gebruik een eigen domein
Met behulp van een aangepast domein kunt u de verificatie-URL volledig brandmerken. Vanuit het oogpunt van een gebruiker blijven gebruikers in uw domein tijdens het verificatieproces, in plaats van om te worden omgeleid naar de Azure AD B2C-b2clogin.com domeinnaam.
Als u alle verwijzingen naar 'b2c' in de URL wilt verwijderen, kunt u ook de naam van uw B2C-tenant, contoso.onmicrosoft.com, in de verificatieaanvraag-URL vervangen door de GUID van uw tenant-id. U kunt bijvoorbeeld overschakelen naar https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/https://account.contosobank.co.uk/<tenant ID GUID>/.
Als u een aangepast domein en uw tenant-id in de verificatie-URL wilt gebruiken, volgt u de richtlijnen in Aangepaste domeinen inschakelen. Open het bestand appsettings.json in de hoofdmap van het project. Dit bestand bevat informatie over uw Azure AD B2C-id-provider.
Ga als volgt te werk in het bestandappsettings.json :
- Werk de
Instancevermelding bij met uw aangepaste domein. - Werk de
Domainvermelding bij met uw tenant-id. Zie Tenant-id gebruiken voor meer informatie.
In de volgende JSON worden de app-instellingen weergegeven vóór de wijziging:
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "tenant-name.onmicrosoft.com",
...
}
In de volgende JSON worden de app-instellingen weergegeven na de wijziging:
"AzureAdB2C": {
"Instance": "https://login.contoso.com",
"Domain": "00000000-0000-0000-0000-000000000000",
...
}
Geavanceerde scenario's ondersteunen
Met AddMicrosoftIdentityWebAppAuthentication de methode in de API van het Microsoft Identity Platform kunnen ontwikkelaars code toevoegen voor geavanceerde verificatiescenario's of zich abonneren op OpenIdConnect-gebeurtenissen. U kunt zich bijvoorbeeld abonneren op OnRedirectToIdentityProvider, waarmee u de verificatieaanvraag kunt aanpassen die uw app verzendt naar Azure AD B2C.
Als u geavanceerde scenario's wilt ondersteunen, opent u het bestand Startup.cs en vervangt ConfigureServices u in de AddMicrosoftIdentityWebAppAuthentication functie het volgende codefragment:
// 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;
});
Met de voorgaande code wordt de gebeurtenis OnRedirectToIdentityProvider toegevoegd met een verwijzing naar de OnRedirectToIdentityProviderFunc methode. Voeg het volgende codefragment toe aan de Startup.cs klasse.
private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
// Custom code here
// Don't remove this line
await Task.CompletedTask.ConfigureAwait(false);
}
U kunt parameters doorgeven tussen uw controller en de OnRedirectToIdentityProvider functie met behulp van contextparameters.
De aanmeldingsnaam vooraf invullen
Tijdens een aanmeldingsgebruikerstraject kan uw app zich richten op een specifieke gebruiker. Wanneer een app is gericht op een gebruiker, kan deze in de autorisatieaanvraag de login_hint queryparameter opgeven met de aanmeldingsnaam van de gebruiker. Azure AD B2C vult automatisch de aanmeldingsnaam in en de gebruiker moet alleen het wachtwoord opgeven.
Ga als volgt te werk om de inlognaam vooraf in te vullen:
Als u een aangepast beleid gebruikt, voegt u de vereiste invoerclaim toe, zoals beschreven in Directe aanmelding instellen.
Voltooi de procedure geavanceerde ondersteuningsscenario's .
Voeg de volgende coderegel toe aan de
OnRedirectToIdentityProviderfunctie:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.LoginHint = "emily@contoso.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Een id-provider vooraf selecteren
Als u het aanmeldingstraject voor uw toepassing hebt geconfigureerd voor het opnemen van sociale accounts, zoals Facebook, LinkedIn of Google, kunt u de domain_hint parameter opgeven. Deze queryparameter biedt een hint voor Azure AD B2C over de id-provider voor sociale netwerken die moet worden gebruikt voor aanmelding. Als de toepassing bijvoorbeeld opgeeft domain_hint=facebook.com, gaat de aanmeldingsstroom rechtstreeks naar de aanmeldingspagina van Facebook.
Ga als volgt te werk om gebruikers om te leiden naar een externe id-provider:
Controleer de domeinnaam van uw externe id-provider. Zie Aanmelding omleiden naar een sociale providervoor meer informatie.
Voltooi de procedure geavanceerde ondersteuningsscenario's .
Voeg in de
OnRedirectToIdentityProviderFuncfunctie de volgende coderegel toe aan deOnRedirectToIdentityProviderfunctie:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.DomainHint = "facebook.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
De gebruikersinterfacetaal opgeven
Met taalaanpassing in Azure AD B2C kan uw gebruikersstroom voldoen aan verschillende talen die aansluiten bij de behoeften van uw klanten. Zie Taalaanpassing voor meer informatie.
Ga als volgt te werk om de voorkeurstaal in te stellen:
Voltooi de procedure geavanceerde ondersteuningsscenario's .
Voeg de volgende coderegel toe aan de
OnRedirectToIdentityProviderfunctie:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.UiLocales = "es"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Een aangepaste queryreeksparameter doorgeven
Met aangepast beleid kunt u een aangepaste querytekenreeksparameter doorgeven. Een goed gebruiksvoorbeeld is wanneer u de pagina-inhoud dynamisch wilt wijzigen.
Ga als volgt te werk om een aangepaste queryreeksparameter door te geven:
Configureer het element ContentDefinitionParameters .
Voltooi de procedure geavanceerde ondersteuningsscenario's .
Voeg de volgende coderegel toe aan de
OnRedirectToIdentityProviderfunctie:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.Parameters.Add("campaignId", "123"); // More code await Task.CompletedTask.ConfigureAwait(false); }
Een id-tokenhint doorgeven
Een relying party-toepassing kan een binnenkomend JSON-webtoken (JWT) verzenden als onderdeel van de OAuth2-autorisatieaanvraag. Het binnenkomende token is een hint over de gebruiker of de autorisatieaanvraag. Azure AD B2C valideert het token en extraheert vervolgens de claim.
Ga als volgt te werk om een id-tokenhint op te nemen in de verificatieaanvraag:
Voltooi de procedure geavanceerde ondersteuningsscenario's .
Definieer in uw aangepaste beleid een technisch profiel voor id-tokenhints.
Voeg de volgende coderegel toe aan de
OnRedirectToIdentityProviderfunctie:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { // The idTokenHint variable holds your ID token context.ProtocolMessage.IdTokenHint = idTokenHint // More code await Task.CompletedTask.ConfigureAwait(false); }
Accountcontroller
Als u de acties SignIn, SignUp of SignOut wilt aanpassen, raden we u aan uw eigen controller te maken. Met uw eigen controller kunt u parameters doorgeven tussen uw controller en de verificatiebibliotheek.
AccountController maakt deel uit van Microsoft.Identity.Web.UI het NuGet-pakket, dat de aanmeldings- en afmeldingsacties afhandelt. U vindt de implementatie ervan in de Microsoft Identity-webbibliotheek.
De accountcontroller toevoegen
Klik in uw Visual Studio-project met de rechtermuisknop op de map Controllers en voeg vervolgens een nieuwe controller toe. Selecteer MVC - Lege controller en geef de naam op MyAccountController.cs.
In het volgende codefragment ziet u een aangepaste MyAccountController code met de actie 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);
}
}
}
Wijzig in de weergave _LoginPartial.cshtml de aanmeldingskoppeling naar uw controller.
<form method="get" asp-area="MicrosoftIdentity" asp-controller="MyAccount" asp-action="SignIn">
De azure AD B2C-beleids-id doorgeven
In het volgende codefragment ziet u een aangepaste MyAccountController code met de actie SignIn en SignUp . De actie geeft een parameter met de naam policy door aan de verificatiebibliotheek. Hiermee kunt u de juiste Azure AD B2C-beleids-id opgeven voor de specifieke actie.
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);
}
Wijzig in de weergave _LoginPartial.cshtml de asp-controller waarde MyAccountController voor andere verificatiekoppelingen, zoals registratie- of bewerkingsprofiel.
Aangepaste parameters doorgeven
In het volgende codefragment ziet u een aangepaste MyAccountController code met de actie SignIn . De actie geeft een parameter met de naam campaign_id door aan de verificatiebibliotheek.
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);
}
Voltooi de procedure Geavanceerde scenario's voor ondersteuning en lees vervolgens in de OnRedirectToIdentityProvider methode de aangepaste parameter:
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);
}
Uw afmeldingsomleiding beveiligen
Na afmelding wordt de gebruiker omgeleid naar de URI die is opgegeven in de post_logout_redirect_uri parameter, ongeacht de antwoord-URL's die zijn opgegeven voor de toepassing. Als er echter een geldige waarde id_token_hint wordt doorgegeven en het id-token vereisen in afmeldingsaanvragen is ingeschakeld, controleert Azure AD B2C of de waarde post_logout_redirect_uri overeenkomt met een van de geconfigureerde omleidings-URI's van de toepassing voordat de omleiding wordt uitgevoerd. Als er geen overeenkomende antwoord-URL is geconfigureerd voor de toepassing, wordt er een foutbericht weergegeven en wordt de gebruiker niet omgeleid.
Als u een beveiligde afmeldingsomleiding in uw toepassing wilt ondersteunen, volgt u eerst de stappen in de secties Accountcontroller en Ondersteuning voor geavanceerde scenario's . Volg vervolgens de onderstaande stappen:
Voeg
MyAccountController.csin de controller een aanmeldingsactie toe met behulp van het volgende codefragment:[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); }Parseert in de klasse Startup.cs de
id_token_hintwaarde en voegt u de waarde toe aan de verificatieaanvraag. Het volgende codefragment laat zien hoe u deid_token_hintwaarde doorgeeft aan de verificatieaanvraag: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); }Voeg in de
ConfigureServicesfunctie deSaveTokensoptie voor Controllers toe die toegang hebben tot deid_tokenwaarde:services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { Configuration.Bind("AzureAdB2C", options); options.Events ??= new OpenIdConnectEvents(); options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc; options.SaveTokens = true; });Voeg in het appsettings.json configuratiebestand uw omleidings-URI-pad voor afmelden toe aan de
SignedOutCallbackPathsleutel."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>" }
In het bovenstaande voorbeeld heeft de post_logout_redirect_uri doorgegeven aan de afmeldingsaanvraag de volgende indeling: https://your-app.com/signout/<your-sign-up-in-policy>. Deze URL moet worden toegevoegd aan de antwoord-URL's van de toepassingsregistratie.
Op rollen gebaseerd toegangsbeheer
Met autorisatie in ASP.NET Core kunt u controleren of gebruikers gemachtigd zijn om toegang te krijgen tot een beveiligde resource met behulp van een van de volgende methoden:
Voeg in de ConfigureServices methode de AddAuthorization methode toe, waarmee het autorisatiemodel wordt toegevoegd. In het volgende voorbeeld wordt een beleid met de naam EmployeeOnlygemaakt. Het beleid controleert of er een claim EmployeeNumber bestaat. De waarde van de claim moet een van de volgende id's zijn: 1, 2, 3, 4 of 5.
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
U bepaalt autorisatie in ASP.NET Core met behulp van AuthorizeAttribute en de verschillende parameters. In de meest eenvoudige vorm beperkt het toepassen van het Authorize kenmerk op een controller, actie of Razor Page de toegang tot de geverifieerde gebruikers van dat onderdeel.
U past beleidsregels toe op controllers met behulp van het Authorize kenmerk met de beleidsnaam. De volgende code beperkt de toegang tot de Claims actie voor gebruikers die zijn geautoriseerd door het EmployeeOnly beleid:
[Authorize(Policy = "EmployeeOnly")]
public IActionResult Claims()
{
return View();
}
Volgende stappen
- Zie Inleiding tot autorisatie in ASP.NET Core voor meer informatie over autorisatie.