Aktivera autentiseringsalternativ i en webbapp med hjälp av Azure AD B2C

Viktigt!

Från och med den 1 maj 2025 är Azure AD B2C inte längre tillgängligt att köpa för nya kunder. Läs mer i våra vanliga frågor och svar.

Den här artikeln beskriver hur du aktiverar, anpassar och förbättrar autentiseringsupplevelsen för Azure Active Directory B2C (Azure AD B2C) för ditt webbprogram.

Innan du börjar är det viktigt att bekanta dig med följande artiklar:

Använda en anpassad domän

Genom att använda en anpassad domän kan du helt märka autentiserings-URL:en. Från ett användarperspektiv finns användarna kvar på din domän under autentiseringsprocessen, i stället för att omdirigeras till Azure AD B2C-b2clogin.com domännamn.

Om du vill ta bort alla referenser till "b2c" i URL:en kan du också ersätta ditt B2C-klientnamn, contoso.onmicrosoft.com, i URL:en för autentiseringsbegäran med ditt klient-ID GUID. Du kan till exempel ändra https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ till https://account.contosobank.co.uk/<tenant ID GUID>/.

Följ anvisningarna i Aktivera anpassade domäner om du vill använda en anpassad domän och ditt klient-ID i autentiserings-URL:en. Öppna filen appsettings.json under projektrotmappen. Den här filen innehåller information om din Azure AD B2C-identitetsprovider.

Gör följande i filenappsettings.json :

Följande JSON visar appinställningarna före ändringen:

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

Följande JSON visar appinställningarna efter ändringen:

"AzureAdB2C": {
  "Instance": "https://login.contoso.com",
  "Domain": "00000000-0000-0000-0000-000000000000",
  ...
}

Stöd för avancerade scenarier

Med AddMicrosoftIdentityWebAppAuthentication metoden i Api:et för Microsofts identitetsplattform kan utvecklare lägga till kod för avancerade autentiseringsscenarier eller prenumerera på OpenIdConnect-händelser. Du kan till exempel prenumerera på OnRedirectToIdentityProvider, som gör att du kan anpassa den autentiseringsbegäran som appen skickar till Azure AD B2C.

Om du vill ha stöd för avancerade scenarier öppnar du filen Startup.cs och ConfigureServices ersätter AddMicrosoftIdentityWebAppAuthentication i funktionen med följande kodfragment:

// 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;
});

Föregående kod lägger till händelsen OnRedirectToIdentityProvider med en referens till OnRedirectToIdentityProviderFunc metoden. Lägg till följande kodfragment i Startup.cs klassen.

private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
    // Custom code here
    
    // Don't remove this line
    await Task.CompletedTask.ConfigureAwait(false);
}

Du kan skicka parametrar mellan kontrollanten OnRedirectToIdentityProvider och funktionen med hjälp av kontextparametrar.

Fyll i inloggningsnamnet i förväg

Under en inloggningsresa kan din app rikta in sig på en specifik användare. När en app riktar sig mot en användare kan den i auktoriseringsbegäran login_hint ange frågeparametern med användarens inloggningsnamn. Azure AD B2C fyller automatiskt i inloggningsnamnet och användaren behöver bara ange lösenordet.

Gör följande för att fylla i inloggningsnamnet i förväg:

  1. Använder du en anpassad princip, lägg till det nödvändiga indata som beskrivs i Konfigurera direkt inloggning.

  2. Slutför proceduren För avancerade supportscenarier .

  3. Lägg till följande kodrad i OnRedirectToIdentityProvider funktionen:

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      context.ProtocolMessage.LoginHint = "emily@contoso.com";
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Avmarkera en identitetsprovider i förväg

Om du har konfigurerat inloggningsresan för ditt program så att det innehåller sociala konton, till exempel Facebook, LinkedIn eller Google, kan du ange parametern domain_hint . Den här frågeparametern ger ett tips till Azure AD B2C om den sociala identitetsprovider som ska användas för inloggning. Om programmet till exempel anger går inloggningsflödet domain_hint=facebook.comdirekt till Facebooks inloggningssida.

Om du vill omdirigera användare till en extern identitetsprovider gör du följande:

  1. Kontrollera domännamnet för din externa identitetsprovider. Mer information finns i Omdirigera inloggning till en social provider.

  2. Slutför proceduren För avancerade supportscenarier .

  3. OnRedirectToIdentityProviderFunc I funktionen lägger du till följande kodrad i OnRedirectToIdentityProvider funktionen:

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      context.ProtocolMessage.DomainHint = "facebook.com";
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Ange användargränssnittsspråket

Språkanpassning i Azure AD B2C gör att ditt användarflöde kan hantera en mängd olika språk som passar dina kunders behov. Mer information finns i Språkanpassning.

Gör följande för att ange önskat språk:

  1. Konfigurera språkanpassning.

  2. Slutför proceduren För avancerade supportscenarier .

  3. Lägg till följande kodrad i OnRedirectToIdentityProvider funktionen:

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      context.ProtocolMessage.UiLocales = "es";
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Skicka en anpassad frågesträngsparameter

Med anpassade principer kan du skicka en anpassad frågesträngsparameter. Ett bra exempel på användningsfall är när du vill ändra sidinnehållet dynamiskt.

Gör följande för att skicka en anpassad frågesträngsparameter:

  1. Konfigurera elementet ContentDefinitionParameters .

  2. Slutför proceduren För avancerade supportscenarier .

  3. Lägg till följande kodrad i OnRedirectToIdentityProvider funktionen:

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      context.ProtocolMessage.Parameters.Add("campaignId", "123");
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Skicka ett ID-tokentips

Ett förlitande partprogram kan skicka en inkommande JSON-webbtoken (JWT) som en del av OAuth2-auktoriseringsbegäran. Den inkommande token är ett tips om användaren eller auktoriseringsbegäran. Azure AD B2C verifierar token och extraherar sedan anspråket.

Gör följande om du vill inkludera ett ID-tokentips i autentiseringsbegäran:

  1. Slutför proceduren För avancerade supportscenarier .

  2. I din anpassade policy definierar du en teknisk profil för ID-tokentips.

  3. Lägg till följande kodrad i OnRedirectToIdentityProvider funktionen:

    private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
    {
      // The idTokenHint variable holds your ID token 
      context.ProtocolMessage.IdTokenHint = idTokenHint
    
      // More code
      await Task.CompletedTask.ConfigureAwait(false);
    }
    

Kontokontrollant

Om du vill anpassa åtgärderna SignIn, SignUp eller SignOut rekommenderar vi att du skapar en egen kontrollant. Med din egen kontrollant kan du skicka parametrar mellan din kontrollant och autentiseringsbiblioteket. AccountController är en del av Microsoft.Identity.Web.UI NuGet-paketet, som hanterar inloggnings- och utloggningsåtgärderna. Du hittar dess implementering i Microsoft Identity-webbbiblioteket.

Lägg till kontokontrollanten

I Visual Studio-projektet högerklickar du på mappen Controllers och lägger sedan till en ny kontrollant. Välj MVC – tom styrenhet och ange sedan namnet MyAccountController.cs.

Följande kodfragment visar en anpassad MyAccountController kod med signin-åtgärden .

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);
        }

    }
}

Ändra inloggningslänken till kontrollanten i vyn _LoginPartial.cshtml .

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

Skicka princip-ID:t för Azure AD B2C

Följande kodfragment visar en anpassad MyAccountController kod med åtgärden SignIn och SignUp . Åtgärden skickar en parameter med namnet policy till autentiseringsbiblioteket. På så sätt kan du ange rätt Princip-ID för Azure AD B2C för den specifika åtgärden.

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);
}

I vyn _LoginPartial.cshtml ändrar du asp-controller värdet till MyAccountController för andra autentiseringslänkar, till exempel registrering eller redigeringsprofil.

Skicka anpassade parametrar

Följande kodfragment visar en anpassad MyAccountController kod med signin-åtgärden . Åtgärden skickar en parameter med namnet campaign_id till autentiseringsbiblioteket.

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);
}

Slutför proceduren Support advanced scenarios (Avancerade scenarier för support ) och läs sedan den anpassade parametern i OnRedirectToIdentityProvider metoden:

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);
}

Säkra omdirigeringen för utloggning

Efter utloggningen omdirigeras användaren till den URI som anges i parametern post_logout_redirect_uri , oavsett vilka svars-URL:er som har angetts för programmet. Men om ett giltigt id_token_hint skickas och Kräv ID-token i utloggningsbegäranden är aktiverat verifierar Azure AD B2C att värdet post_logout_redirect_uri för matchar en av programmets konfigurerade omdirigerings-URI:er innan omdirigeringen utförs. Om ingen matchande svars-URL har konfigurerats för programmet visas ett felmeddelande och användaren omdirigeras inte.

Om du vill ha stöd för en säker omdirigering av utloggning i ditt program följer du först stegen i avsnitten Kontokontrollant och Stöd för avancerade scenarier . Följ sedan stegen nedan:

  1. Lägg MyAccountController.cs till en SignOut-åtgärd i kontrollanten med hjälp av följande kodfragment:

    [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);
    }
    
  2. I klassen Startup.cs parsar id_token_hint du värdet och lägger till värdet i autentiseringsbegäran. Följande kodfragment visar hur du skickar id_token_hint värdet till autentiseringsbegäran:

    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);
    }
    
  3. ConfigureServices I funktionen lägger du till SaveTokens alternativet för Kontrollanter har åtkomst till id_token värdet:

    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(options =>
        {
            Configuration.Bind("AzureAdB2C", options);
            options.Events ??= new OpenIdConnectEvents();        
            options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc;
            options.SaveTokens = true;
        });
    
  4. I konfigurationsfilenappsettings.json lägger du till din omdirigerings-URI-sökväg för utloggning till SignedOutCallbackPath nyckeln.

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

I exemplet ovan är post_logout_redirect_uri som skickas till utloggningsbegäran i formatet: https://your-app.com/signout/<your-sign-up-in-policy>. Den här URL:en måste läggas till i programregistreringens svars-URL.

Rollbaserad åtkomstkontroll

Med auktorisering i ASP.NET Core kan du kontrollera om användarna har behörighet att komma åt en skyddad resurs med någon av följande metoder:

ConfigureServices I -metoden lägger du till AddAuthorization metoden, som lägger till auktoriseringsmodellen. I följande exempel skapas en princip med namnet EmployeeOnly. Principen kontrollerar att ett anspråk EmployeeNumber finns. Värdet för anspråket måste vara något av följande ID: 1, 2, 3, 4 eller 5.

services.AddAuthorization(options =>
    {
        options.AddPolicy("EmployeeOnly", policy =>
              policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
    });

Du styr auktoriseringen i ASP.NET Core med hjälp av AuthorizeAttribute och dess olika parametrar. I sin mest grundläggande form begränsar tillämpningen av attributet till en kontrollant, åtgärd eller Razor Page åtkomsten till komponentens autentiserade Authorize användare.

Du tillämpar principer på kontrollanter med hjälp Authorize av attributet med principnamnet. Följande kod begränsar åtkomsten Claims till åtgärden för användare som har behörighet av EmployeeOnly principen:

[Authorize(Policy = "EmployeeOnly")]
public IActionResult Claims()
{
    return View();
}

Nästa steg