Sdílet prostřednictvím


Povolení možností ověřování ve webové aplikaci pomocí Azure AD B2C

Důležité

Od 1. května 2025 už nebude Azure AD B2C k dispozici k nákupu pro nové zákazníky. Další informace najdete v našich nejčastějších dotazech.

Tento článek popisuje, jak povolit, přizpůsobit a vylepšit prostředí ověřování Azure Active Directory B2C (Azure AD B2C) pro vaši webovou aplikaci.

Než začnete, je důležité se seznámit s následujícími články:

Použití vlastní domény

Pomocí vlastní domény můžete plně označit adresu URL ověřování. Z pohledu uživatele zůstanou uživatelé ve vaší doméně během procesu ověřování místo přesměrování na název domény Azure AD B2C b2clogin.com.

Pokud chcete odebrat všechny odkazy na "b2c" v adrese URL, můžete také nahradit název tenanta B2C, contoso.onmicrosoft.com, v adrese URL žádosti o ověření identifikátorem GUID vašeho tenanta. Můžete například změnit https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ na https://account.contosobank.co.uk/<tenant ID GUID>/.

Pokud chcete v adrese URL ověřování použít vlastní doménu a ID tenanta, postupujte podle pokynů v tématu Povolení vlastních domén. V kořenové složce projektu otevřete soubor appsettings.json . Tento soubor obsahuje informace o vašem zprostředkovateli identity Azure AD B2C.

V souboru appsettings.json postupujte takto:

  • Instance Aktualizujte položku vlastní doménou.
  • Domain Aktualizujte položku pomocí ID tenanta. Další informace najdete v tématu Použití ID tenanta.

Následující JSON ukazuje nastavení aplikace před změnou:

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

Následující JSON ukazuje nastavení aplikace po změně:

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

Podpora pokročilých scénářů

Metoda AddMicrosoftIdentityWebAppAuthentication v rozhraní API platformy Microsoft Identity Platform umožňuje vývojářům přidat kód pro pokročilé scénáře ověřování nebo se přihlásit k odběru událostí OpenIdConnect. Můžete se například přihlásit k odběru OnRedirectToIdentityProvider, což umožňuje přizpůsobit žádost o ověření, kterou vaše aplikace odešle do Azure AD B2C.

Pokud chcete podporovat pokročilé scénáře, otevřete soubor Startup.cs a ve ConfigureServices funkci nahraďte AddMicrosoftIdentityWebAppAuthentication následujícím fragmentem kódu:

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

Předchozí kód přidá OnRedirectToIdentityProvider událost s odkazem na metodu OnRedirectToIdentityProviderFunc . Do třídy přidejte následující fragment Startup.cs kódu.

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

Parametry můžete předat mezi kontrolerem a OnRedirectToIdentityProvider funkcí pomocí kontextových parametrů.

Předem vyplníte přihlašovací jméno.

Během cesty uživatele přihlašování může vaše aplikace cílit na konkrétního uživatele. Když aplikace cílí na uživatele, může v žádosti o login_hint autorizaci zadat parametr dotazu s přihlašovacím jménem uživatele. Azure AD B2C automaticky vyplní přihlašovací jméno a uživatel musí zadat jenom heslo.

Chcete-li předvyplnit přihlašovací jméno, postupujte takto:

  1. Pokud používáte vlastní zásadu, přidejte požadovanou vstupní deklaraci, jak je popsáno v Nastavte přímé přihlášení.

  2. Dokončete postup pokročilého scénáře podpory .

  3. Do funkce přidejte následující řádek kódu OnRedirectToIdentityProvider :

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

Předem vyberte zprostředkovatele identity

Pokud jste nakonfigurovali cestu přihlášení pro aplikaci tak, aby zahrnovala sociální účty, jako je Facebook, LinkedIn nebo Google, můžete zadat domain_hint parametr. Tento parametr dotazu poskytuje nápovědu pro Azure AD B2C o zprostředkovateli sociálních identit, který by se měl použít pro přihlášení. Pokud například aplikace určí domain_hint=facebook.com, tok přihlášení přejde přímo na přihlašovací stránku Facebooku.

Pokud chcete uživatele přesměrovat na externího zprostředkovatele identity, postupujte takto:

  1. Zkontrolujte název domény vašeho externího zprostředkovatele identity. Další informace najdete v tématu Přesměrování přihlášení k poskytovateli sociálních sítí.

  2. Dokončete postup pokročilého scénáře podpory .

  3. OnRedirectToIdentityProviderFunc Do funkce přidejte následující řádek kóduOnRedirectToIdentityProvider:

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

Určení jazyka uživatelského rozhraní

Přizpůsobení jazyka v Azure AD B2C umožňuje toku uživatelů přizpůsobit různé jazyky podle potřeb vašich zákazníků. Další informace naleznete v tématu Přizpůsobení jazyka.

Pokud chcete nastavit upřednostňovaný jazyk, postupujte takto:

  1. Nakonfigurujte přizpůsobení jazyka.

  2. Dokončete postup pokročilého scénáře podpory .

  3. Do funkce přidejte následující řádek kódu OnRedirectToIdentityProvider :

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

Předání vlastního parametru řetězce dotazu

Pomocí vlastních zásad můžete předat vlastní parametr řetězce dotazu. Dobrým příkladem použití je, když chcete dynamicky změnit obsah stránky.

Pokud chcete předat vlastní parametr řetězce dotazu, postupujte takto:

  1. Nakonfigurujte element ContentDefinitionParameters .

  2. Dokončete postup pokročilého scénáře podpory .

  3. Do funkce přidejte následující řádek kódu OnRedirectToIdentityProvider :

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

Nápověda k předání tokenu ID

Aplikace předávající strany může jako součást žádosti o autorizaci OAuth2 odeslat příchozí webový token JSON (JWT). Příchozí token je indikátorem o uživateli nebo žádosti o autorizaci. Azure AD B2C ověří token a pak extrahuje deklaraci identity.

Pokud chcete do žádosti o ověření zahrnout nápovědu tokenu ID, postupujte takto:

  1. Dokončete postup pokročilého scénáře podpory .

  2. Ve vlastní zásadě definujte technický profil nápovědy ID tokenu.

  3. Do funkce přidejte následující řádek kódu 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);
    }
    

Kontroler účtu

Pokud chcete přizpůsobit akce SignIn, SignUp nebo SignOut , doporučujeme vám vytvořit vlastní kontroler. Mít vlastní kontroler umožňuje předávat parametry mezi kontrolerem a knihovnou ověřování. AccountController je součástí Microsoft.Identity.Web.UI balíčku NuGet, který zpracovává akce přihlášení a odhlášení. Její implementaci najdete ve webové knihovně Microsoft Identity.

Přidání kontroleru účtu

V projektu sady Visual Studio klikněte pravým tlačítkem myši na složku Kontrolery a přidejte nový kontroler. Vyberte MVC – Prázdný kontroler a zadejte název MyAccountController.cs.

Následující fragment kódu ukazuje vlastní MyAccountController akci 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);
        }

    }
}

V zobrazení _LoginPartial.cshtml změňte přihlašovací odkaz na kontroler.

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

Předání ID zásad Azure AD B2C

Následující fragment kódu ukazuje vlastní MyAccountController akci SignIn a SignUp . Akce předá parametr pojmenovaný policy do knihovny ověřování. To vám umožní zadat správné ID zásad Azure AD B2C pro konkrétní akci.

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

V zobrazení _LoginPartial.cshtml změňte asp-controller hodnotu na MyAccountController všechny ostatní ověřovací odkazy, jako je registrace nebo úprava profilu.

Předání vlastních parametrů

Následující fragment kódu ukazuje vlastní MyAccountController akci SignIn . Akce předá parametr pojmenovaný campaign_id do knihovny ověřování.

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

Dokončete postup pokročilé scénáře podpory a pak v OnRedirectToIdentityProvider metodě přečtěte vlastní parametr:

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

Zabezpečte přesměrování při odhlášení

Po odhlášení se uživatel přesměruje na identifikátor URI zadaný v parametru post_logout_redirect_uri bez ohledu na adresy URL odpovědí zadané pro aplikaci. Pokud je však předán platný id_token_hinttoken ID v žádostech o odhlášení , Azure AD B2C před provedením přesměrování ověří, že hodnota post_logout_redirect_uri odpovídá některému z nakonfigurovaných identifikátorů URI přesměrování aplikace. Pokud pro aplikaci nebyla nakonfigurovaná žádná odpovídající adresa URL odpovědi, zobrazí se chybová zpráva a uživatel nebude přesměrován.

Pokud chcete podporovat zabezpečené přesměrování odhlášení ve vaší aplikaci, nejprve postupujte podle kroků v částech Kontroler účtů a Podpora pokročilých scénářů . Pak postupujte podle následujících kroků:

  1. V MyAccountController.cs kontroleru přidejte akci SignOut pomocí následujícího fragmentu kódu:

    [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. Ve třídě Startup.cs parsujte id_token_hint hodnotu a připojte ji k žádosti o ověření. Následující fragment kódu ukazuje, jak předat id_token_hint hodnotu do žádosti o ověření:

    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 Ve funkci přidejte SaveTokens možnost kontrolerů, která má přístup k hodnotěid_token:

    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(options =>
        {
            Configuration.Bind("AzureAdB2C", options);
            options.Events ??= new OpenIdConnectEvents();        
            options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc;
            options.SaveTokens = true;
        });
    
  4. Do konfiguračního souboru appsettings.json přidejte cestu identifikátoru URI pro přesměrování odhlášení ke SignedOutCallbackPath klíči.

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

V předchozím příkladu bude post_logout_redirect_uri předán do žádosti o odhlášení ve formátu: https://your-app.com/signout/<your-sign-up-in-policy>. Tuto adresu URL je nutné přidat do adresy URL odpovědi registrace aplikace.

Řízení přístupu na základě role

S autorizací v ASP.NET Core můžete zkontrolovat, jestli mají uživatelé oprávnění přistupovat k chráněnému prostředku pomocí jedné z následujících metod:

ConfigureServices V metodě přidejte metoduAddAuthorization, která přidá autorizační model. Následující příklad vytvoří zásadu s názvem EmployeeOnly. Zásady zkontrolují, jestli deklarace identity EmployeeNumber existuje. Hodnota deklarace identity musí být jedna z následujících ID: 1, 2, 3, 4 nebo 5.

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

Autorizaci v ASP.NET Core řídíte pomocí AuthorizeAttribute a jejích různých parametrů. Ve své nejzákladnější podobě použití atributu Authorize u kontroleru, akce nebo stránky Razor Page omezuje přístup k ověřeným uživatelům dané komponenty.

Zásady použijete na kontrolery pomocí atributu Authorize s názvem zásady. Následující kód omezuje přístup k Claims akci uživatelům, kteří jsou autorizováni zásadou EmployeeOnly :

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

Další kroky