Megosztás a következőn keresztül:


Hitelesítési beállítások engedélyezése webalkalmazásokban az Azure AD B2C használatával

Fontos

2025. május 1-jére az Azure AD B2C már nem lesz elérhető az új ügyfelek számára. További információ a GYIK-ben.

Ez a cikk azt ismerteti, hogyan engedélyezheti, szabhatja testre és fejlesztheti az Azure Active Directory B2C (Azure AD B2C) hitelesítési felületét a webalkalmazáshoz.

Mielőtt hozzákezd, fontos megismerkednie a következő cikkekkel:

Egyéni tartomány használata

Egyéni domain használatával teljesen testre szabhatja a hitelesítési URL-t. Felhasználói szempontból a felhasználók a hitelesítési folyamat során a tartományon maradnak, ahelyett, hogy az Azure AD B2C b2clogin.com tartománynévre irányítanák át őket.

Ha az URL-címben el szeretné távolítani a "b2c" kifejezésre mutató összes hivatkozást, a B2C-bérlő nevét is lecserélheti contoso.onmicrosoft.com a hitelesítési kérelem URL-címében a bérlőazonosító GUID azonosítójával. Például átválthatja a https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ elemet a https://account.contosobank.co.uk/<tenant ID GUID>/ elemre.

Ha egyéni tartományt és bérlőazonosítót szeretne használni a hitelesítési URL-címben, kövesse az Egyéni tartományok engedélyezése című útmutatót. A projekt gyökérmappájában nyissa meg a appsettings.json fájlt. Ez a fájl az Azure AD B2C identitásszolgáltatójáról tartalmaz információkat.

A appsettings.json fájlban tegye a következőket:

Az alábbi JSON a módosítás előtt megjeleníti az alkalmazás beállításait:

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

Az alábbi JSON a módosítás után megjeleníti az alkalmazás beállításait:

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

Speciális forgatókönyvek támogatása

A AddMicrosoftIdentityWebAppAuthentication Microsoft Identity Platform API metódusa lehetővé teszi, hogy a fejlesztők speciális hitelesítési forgatókönyvekhez kódot adjanak hozzá, vagy feliratkozzanak az OpenIdConnect-eseményekre. Előfizethet például az OnRedirectToIdentityProviderre, amely lehetővé teszi az alkalmazás által az Azure AD B2C-nek küldött hitelesítési kérés testreszabását.

A speciális forgatókönyvek támogatásához nyissa meg a Startup.cs fájlt, és a ConfigureServices függvényben cserélje le AddMicrosoftIdentityWebAppAuthentication a következő kódrészletre:

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

Az előző kód hozzáadja az OnRedirectToIdentityProvider eseményt a OnRedirectToIdentityProviderFunc metódusra való hivatkozással. Adja hozzá a következő kódrészletet az Startup.cs osztályhoz.

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

Környezeti paraméterek használatával paramétereket adhat át a vezérlő és a OnRedirectToIdentityProvider függvény között.

A bejelentkezési név előzetes feltöltése

A bejelentkezési felhasználói folyamat során előfordulhat, hogy az alkalmazás egy adott felhasználót céloz meg. Amikor egy alkalmazás egy felhasználót céloz meg, az engedélyezési kérelemben megadhatja a login_hint lekérdezési paramétert a felhasználó bejelentkezési nevével. Az Azure AD B2C automatikusan kitölti a bejelentkezési nevet, és a felhasználónak csak a jelszót kell megadnia.

A bejelentkezési név előzetes feltöltéséhez tegye a következőket:

  1. Ha egyéni szabályzatot használ, adja hozzá a szükséges bemeneti jogcímet a közvetlen bejelentkezés beállítása című cikkben leírtak szerint.

  2. Végezze el a Támogatási speciális forgatókönyvek eljárást.

  3. Adja hozzá a következő kódsort a OnRedirectToIdentityProvider függvényhez:

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

Identitásszolgáltató előzetes kijelölése

Ha úgy konfigurálta az alkalmazás bejelentkezési útját, hogy közösségi fiókokat , például Facebookot, LinkedIn-t vagy Google-t is tartalmazzon, megadhatja a paramétert domain_hint . Ez a lekérdezési paraméter az Azure AD B2C-nek a bejelentkezéshez használandó közösségi identitásszolgáltatóra vonatkozó tippet nyújt. Ha például az alkalmazás megadja domain_hint=facebook.com, a bejelentkezési folyamat közvetlenül a Facebook bejelentkezési oldalára kerül.

A felhasználók külső identitásszolgáltatóhoz való átirányításához tegye a következőket:

  1. Ellenőrizze a külső identitásszolgáltató tartománynevét. További információ: Bejelentkezés átirányítása közösségi szolgáltatóhoz.

  2. Végezze el a Támogatási speciális forgatókönyvek eljárást.

  3. A függvényben OnRedirectToIdentityProviderFunc adja hozzá a következő kódsort a OnRedirectToIdentityProvider függvényhez:

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

A felhasználói felület nyelvének megadása

Az Azure AD B2C nyelvi testreszabása lehetővé teszi a felhasználói folyamat számára, hogy az ügyfelek igényeinek megfelelően különféle nyelveket fogadjon el. További információ: Nyelvi testreszabás.

Az előnyben részesített nyelv beállításához tegye a következőket:

  1. Nyelvi testreszabás konfigurálása.

  2. Végezze el a Támogatási speciális forgatókönyvek eljárást.

  3. Adja hozzá a következő kódsort a OnRedirectToIdentityProvider függvényhez:

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

Egyéni lekérdezési sztringparaméter átadása

Egyéni szabályzatokkal egyéni lekérdezési sztringparamétert adhat át. Jó példa erre, ha dinamikusan szeretné módosítani a lap tartalmát.

Egyéni lekérdezési sztringparaméter átadásához tegye a következőket:

  1. Konfigurálja a ContentDefinitionParameters elemet.

  2. Végezze el a Támogatási speciális forgatókönyvek eljárást.

  3. Adja hozzá a következő kódsort a OnRedirectToIdentityProvider függvényhez:

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

Azonosító token javaslat átadása

A függő entitásalkalmazások az OAuth2 engedélyezési kérelem részeként küldhetnek bejövő JSON-webjogkivonatot (JWT). A bejövő jogkivonat egy jelzés a felhasználóra vagy az engedélyezési kérelemre vonatkozóan. Az Azure AD B2C ellenőrzi a jogkivonatot, majd kinyeri a jogcímet.

Azonosító token javaslat hozzáadásához a hitelesítési kéréshez, tegye a következőket:

  1. Végezze el a Támogatási speciális forgatókönyvek eljárást.

  2. Az egyéni szabályzatban definiáljon egy ID token hint technikai profil definíciót.

  3. Adja hozzá a következő kódsort a OnRedirectToIdentityProvider függvényhez:

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

Fiókvezérlő

Ha testre szeretné szabni a Bejelentkezési, Regisztrációs vagy Kijelentkezési műveleteket, javasoljuk, hogy hozzon létre saját vezérlőt. A saját vezérlővel paramétereket adhat át a vezérlő és a hitelesítési kódtár között. AccountController a NuGet-csomag része Microsoft.Identity.Web.UI , amely kezeli a bejelentkezési és kijelentkezési műveleteket. A megvalósítást a Microsoft Identity webtárban találja.

Fiókvezérlő hozzáadása

A Visual Studio-projektben kattintson a jobb gombbal a Vezérlők mappára, majd vegyen fel egy új vezérlőt. Válassza az MVC – Üres vezérlő lehetőséget, majd adja meg a MyAccountController.cs nevet.

Az alábbi kódrészlet bemutatja az egyéni MyAccountController adatokat a SignIn művelettel.

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

    }
}

A _LoginPartial.cshtml nézetben módosítsa a vezérlő bejelentkezési hivatkozását.

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

Az Azure AD B2C szabályzatazonosítójának átadása

Az alábbi kódrészlet bemutatja az egyéni MyAccountController adatokat a SignIn és a SignUp művelettel. A művelet átad egy hitelesítési kódtárnak elnevezett policy paramétert. Ez lehetővé teszi a megfelelő Azure AD B2C-szabályzatazonosító megadását az adott művelethez.

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

A _LoginPartial.cshtml nézetben módosítsa az értéket asp-controller bármely más hitelesítési hivatkozásra, például a regisztrációra vagy a MyAccountController profil szerkesztésére.

Egyéni paraméterek átadása

Az alábbi kódrészlet bemutatja az egyéni MyAccountController adatokat a SignIn művelettel. A művelet átad egy hitelesítési kódtárnak elnevezett campaign_id paramétert.

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

Végezze el a Támogatási speciális forgatókönyvek eljárást, majd a OnRedirectToIdentityProvider metódusban olvassa el az egyéni paramétert:

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

A kijelentkezés átirányításának védelme

A kijelentkezés után a rendszer átirányítja a felhasználót a post_logout_redirect_uri paraméterben megadott URI-ra, függetlenül az alkalmazáshoz megadott válasz URL-címektől. Ha azonban érvényes id_token_hint értéket ad meg, és a kijelentkezési kérelmekben engedélyezve van az azonosító jogkivonat, az Azure AD B2C ellenőrzi, hogy a post_logout_redirect_uri érték megegyezik-e az alkalmazás egyik konfigurált átirányítási URI-jával az átirányítás végrehajtása előtt. Ha nem lett konfigurálva egyező válasz URL-cím az alkalmazáshoz, hibaüzenet jelenik meg, és a felhasználó nem lesz átirányítva.

Ha támogatni szeretné a biztonságos kijelentkezési átirányítást az alkalmazásban, először kövesse a Fiókvezérlő és a Speciális forgatókönyvek támogatása szakasz lépéseit . Ezután kövesse az alábbi lépéseket:

  1. A vezérlőben MyAccountController.cs adjon hozzá egy SignOut-műveletet a következő kódrészlet használatával:

    [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. Az Startup.cs osztályban elemezze az id_token_hint értéket, és fűzze hozzá az értéket a hitelesítési kérelemhez. Az alábbi kódrészlet bemutatja, hogyan adhatja át az értéket a id_token_hint hitelesítési kérelemnek:

    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. A függvényben ConfigureServices adja hozzá a SaveTokensvezérlők számára elérhető beállítást az id_token értékhez:

    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(options =>
        {
            Configuration.Bind("AzureAdB2C", options);
            options.Events ??= new OpenIdConnectEvents();        
            options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc;
            options.SaveTokens = true;
        });
    
  4. A appsettings.json konfigurációs fájlban adja hozzá a bejelentkezési átirányítási URI elérési útját a kulcshoz SignedOutCallbackPath .

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

A fenti példában a bejelentkezési kérelembe átadott post_logout_redirect_uri formátuma a következő lesz: https://your-app.com/signout/<your-sign-up-in-policy>. Ezt az URL-címet hozzá kell adni az alkalmazásregisztráció válasz URL-címéhez.

Szerepköralapú hozzáférés-vezérlés

A ASP.NET Core-ban történő engedélyezéssel ellenőrizheti, hogy a felhasználók jogosultak-e hozzáférni egy védett erőforráshoz az alábbi módszerek egyikével:

A metódusban ConfigureServices adja hozzá a AddAuthorization metódust, amely hozzáadja az engedélyezési modellt. Az alábbi példa létrehoz egy szabályzatot .EmployeeOnly A szabályzat ellenőrzi, hogy létezik-e jogcím EmployeeNumber . A jogcím értékének az alábbi azonosítók egyikének kell lennie: 1, 2, 3, 4 vagy 5.

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

Az engedélyezést a ASP.NET Core-ban az AuthorizationAttribute és annak különböző paraméterei használatával szabályozhatja. A legalapvetőbb formában az Authorize attribútum vezérlőre, műveletre vagy Razor-lapra való alkalmazása korlátozza az összetevő hitelesített felhasználóihoz való hozzáférést.

A szabályzatokat a szabályzat nevével ellátott attribútummal Authorize alkalmazhatja a vezérlőkre. Az alábbi kód korlátozza a művelethez való hozzáférést a Claims szabályzat által EmployeeOnly engedélyezett felhasználók számára:

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

Következő lépések