Verificatieopties inschakelen in een web-app met behulp van Azure AD B2C
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 dat u vertrouwd raakt met de volgende artikelen:
Een aangepast domein gebruiken
Met behulp van een aangepast domein kunt u de verificatie-URL volledig aanpassen aan uw merknaam. Voor gebruikers lijkt het alsof ze tijdens het verificatieproces op uw domein blijven, in plaats van dat ze worden omgeleid naar de Azure AD B2C-domeinnaam b2clogin.com.
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 URL van de verificatieaanvraag vervangen door de GUID van uw tenant-id. U kunt https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/
bijvoorbeeld wijzigen in 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. Het bestand bevat informatie over uw Azure AD B2C-id-provider.
Ga als volgt te werk in het bestand appsettings.json :
- Werk de
Instance
vermelding bij met uw aangepaste domein. - Werk de
Domain
vermelding bij met uw tenant-id. Zie Tenant-id gebruiken voor meer informatie.
De volgende JSON-code toont de toepassingsinstellingen voorafgaand aan de wijziging:
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "tenant-name.onmicrosoft.com",
...
}
De volgende JSON-code toont de toepassingsinstellingen na de wijziging:
"AzureAdB2C": {
"Instance": "https://login.contoso.com",
"Domain": "00000000-0000-0000-0000-000000000000",
...
}
Ondersteuning voor geavanceerde scenario's
Met AddMicrosoftIdentityWebAppAuthentication
de methode in de Microsoft identity platform-API 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 naar Azure AD B2C verzendt.
Als u geavanceerde scenario's wilt ondersteunen, opent u het bestand Startup.cs en vervangt u in de ConfigureServices
functie door AddMicrosoftIdentityWebAppAuthentication
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 gebruikersbeleving voor aanmelden kan uw app zich op een specifieke gebruiker richten. Wanneer een app zich op een gebruiker richt, geeft de app in de autorisatieaanvraag mogelijk de queryparameter login_hint
op met de aanmeldingsnaam van de gebruiker. Azure AD B2C vult automatisch de aanmeldingsnaam in en de gebruiker hoeft alleen het wachtwoord op te geven.
Ga als volgt te werk om de aanmeldingsnaam 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 scenario's ondersteunen .
Voeg de volgende regel code toe aan de
OnRedirectToIdentityProvider
functie: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 socialemedia-accounts, zoals Facebook, LinkedIn en Google, in de aanmeldbeleving voor uw toepassing hebt geconfigureerd, kunt u de parameter domain_hint
opgeven. Deze queryparameter biedt een hint naar Azure AD B2C over de id-provider voor sociale media die moet worden gebruikt voor aanmelden. Als de toepassing bijvoorbeeld domain_hint=facebook.com
opgeeft, leidt 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 de externe id-provider. Zie Aanmelden omleiden naar een sociale provider voor meer informatie.
Voltooi de procedure Geavanceerde scenario's ondersteunen .
Voeg in de
OnRedirectToIdentityProviderFunc
functie de volgende regel code toe aan deOnRedirectToIdentityProvider
functie:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.DomainHint = "facebook.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
De taal van de gebruikersinterface opgeven
Met taalaanpassing in Azure AD B2C kunt u verschillende talen in uw gebruikersstroom opnemen om aan de behoeften van uw klanten te voldoen. Zie Taalaanpassing voor meer informatie.
Ga als volgt te werk om de voorkeurstaal in te stellen:
Voltooi de procedure Geavanceerde scenario's ondersteunen .
Voeg de volgende regel code toe aan de
OnRedirectToIdentityProvider
functie:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.UiLocales = "es"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Een aangepaste querytekenreeksparameter doorgeven
Met aangepast beleid kunt u een aangepaste querytekenreeksparameter doorgeven. Dit is bijvoorbeeld handig wanneer u de pagina-inhoud dynamisch wilt wijzigen.
Ga als volgt te werk om een aangepaste querytekenreeksparameter door te geven:
Configureer het element ContentDefinitionParameters.
Voltooi de procedure Geavanceerde scenario's ondersteunen .
Voeg de volgende regel code toe aan de
OnRedirectToIdentityProvider
functie:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.Parameters.Add("campaignId", "123"); // More code await Task.CompletedTask.ConfigureAwait(false); }
Een hint voor een id-token doorgeven
Een Relying Party-toepassing kan een binnenkomend JSON Web Token (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 hint voor het id-token in de verificatieaanvraag op te nemen:
Voltooi de procedure Geavanceerde scenario's ondersteunen .
Definieer in uw aangepaste beleid een technisch profiel voor de hint voor het id-token.
Voeg de volgende regel code toe aan de
OnRedirectToIdentityProvider
functie: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 het Microsoft.Identity.Web.UI
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 vervolgens de naam MyAccountController.cs op.
In het volgende codefragment ziet u een aangepaste MyAccountController
met de actie Aanmelden .
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
actie 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
in voor andere verificatiekoppelingen, zoals registratie of profiel bewerken.
Aangepaste parameters doorgeven
In het volgende codefragment ziet u een aangepaste MyAccountController
met de actie Aanmelden . 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 ondersteunen 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 echter een geldige id_token_hint
wordt doorgegeven en het token id vereisen in afmeldingsaanvragen is ingeschakeld, controleert Azure AD B2C of de waarde van 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 . Voer vervolgens de onderstaande stappen uit:
Voeg
MyAccountController.cs
in de controller een afmeldingsactie 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_hint
waarde en voeg de waarde toe aan de verificatieaanvraag. Het volgende codefragment laat zien hoe u deid_token_hint
waarde 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
ConfigureServices
functie deSaveTokens
optie voor Controllers hebben toegang tot deid_token
waarde toe:services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { Configuration.Bind("AzureAdB2C", options); options.Events ??= new OpenIdConnectEvents(); options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc; options.SaveTokens = true; });
Voeg in het configuratiebestand appsettings.json het omleidings-URI-pad voor afmelding toe aan
SignedOutCallbackPath
sleutel."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 die is 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 op een van de volgende manieren controleren of gebruikers gemachtigd zijn om toegang te krijgen tot een beveiligde resource:
Voeg in de ConfigureServices
methode de AddAuthorization
methode toe, waarmee het autorisatiemodel wordt toegevoegd. In het volgende voorbeeld wordt een beleid met de naam gemaakt EmployeeOnly
. 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 kunt autorisatie in ASP.NET Core beheren 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-pagina de toegang tot de geverifieerde gebruikers van dat onderdeel.
U past beleidsregels toe op controllers met behulp van het Authorize
kenmerk met de beleidsnaam. Met de volgende code wordt de toegang tot de Claims
actie beperkt tot 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.