Verificatieopties configureren in een web-app die een web-API aanroept met behulp van Azure AD B2C

In dit artikel worden manieren beschreven waarop u de verificatie-ervaring van Azure Active Directory B2C (Azure AD B2C) kunt aanpassen en verbeteren voor uw webtoepassing die een web-API aanroept. Raadpleeg voordat u begint eerst 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 onder de hoofdmap van het appsettings.json project. Dit bestand bevat informatie over uw Azure AD B2C-id-provider.

  • 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 app-instellingen vóór de wijziging worden weergegeven in de volgende JSON-code:

"AzureAdB2C": {
  "Instance": "https://contoso.b2clogin.com",
  "Domain": "tenant-name.onmicrosoft.com",
  ...
}

De app-instellingen na de wijziging worden weergegeven in de volgende JSON-code:

"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.

Ter ondersteuning van geavanceerde scenario's opent u het bestand Startup.cs en vervangt u in de ConfigureServices functie de AddMicrosoftIdentityWebAppAuthentication door 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 bovenstaande code wordt de gebeurtenis OnRedirectToIdentityProvider toegevoegd met een verwijzing naar de methode OnRedirectToIdentityProviderFunc . 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 functie OnRedirectToIdentityProvider 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:

  1. Als u een aangepast beleid gebruikt, voegt u de vereiste invoerclaim toe, zoals beschreven in Directe aanmelding instellen.

  2. Voltooi de procedure Geavanceerde scenario's ondersteunen .

  3. Voeg de volgende regel code toe aan de functie OnRedirectToIdentityProvider :

    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:

  1. Controleer de domeinnaam van de externe id-provider. Zie Aanmelden omleiden naar een sociale provider voor meer informatie.

  2. Voltooi de procedure Geavanceerde scenario's ondersteunen .

  3. Voeg in de functie OnRedirectToIdentityProviderFunc de volgende regel code toe aan de functie OnRedirectToIdentityProvider :

    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:

  1. Taalaanpassing configureren.

  2. Voltooi de procedure Geavanceerde scenario's ondersteunen .

  3. Voeg de volgende regel code toe aan de functie OnRedirectToIdentityProvider :

    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:

  1. Configureer het element ContentDefinitionParameters.

  2. Voltooi de procedure Geavanceerde scenario's ondersteunen .

  3. Voeg de volgende regel code toe aan de functie OnRedirectToIdentityProvider :

    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:

  1. Voltooi de procedure Geavanceerde scenario's ondersteunen .

  2. Definieer in uw aangepaste beleid een technisch profiel voor de hint voor het id-token.

  3. Voeg de volgende regel code toe aan de functie OnRedirectToIdentityProvider :

    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 een aanmeldings-, registratie- of afmeldingsactie wilt aanpassen, raden we u aan uw eigen controller te maken. Wanneer u uw eigen controller hebt, kunt u parameters doorgeven tussen uw controller en de verificatiebibliotheek. De 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.

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.

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 };
            properties.Items["campaign_id"] = "1234";
            return Challenge(properties, scheme);
        }

    }
}

Wijzig in de _LoginPartial.cshtml weergave de aanmeldingskoppeling naar uw controller

<form method="get" asp-area="MicrosoftIdentity" asp-controller="MyAccount" asp-action="SignIn">

In de OnRedirectToIdentityProviderkunt u in de Startup.cs aanroepen de aangepaste parameter lezen:

private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
    // Read the custom parameter
    var campaign_id = (context.Properties.Items.ContainsKey("campaign_id"))
    
    // Add your custom code here
    
    await Task.CompletedTask.ConfigureAwait(false);
}

Op rollen gebaseerd toegangsbeheer

Met autorisatie in ASP.NET Core kunt u autorisatie op basis van rollen, op claims gebaseerde autorisatie of autorisatie op basis van beleid gebruiken om te controleren of de gebruiker gemachtigd is om toegang te krijgen tot een beveiligde resource.

Voeg in de methode ConfigureServices de methode AddAuthorization 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 bepaalt de autorisatie in ASP.NET Core met behulp van AuthorizeAttribute en de verschillende parameters. Wanneer u de meest eenvoudige vorm van het [Authorize] kenmerk toepast op een controller, actie of Razor-pagina, beperkt u 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.