Cloudové ověřování pomocí Azure Active Directory B2C v ASP.NET Core

Od Damien Bod

Azure Active Directory B2C (Azure AD B2C) je řešení pro správu cloudu identity pro webové a mobilní aplikace. Služba poskytuje ověřování pro aplikace hostované v cloudu a v místním prostředí. Typy ověřování zahrnují jednotlivé účty, účty sociálních sítí a federované podnikové účty. Azure AD B2C navíc může poskytovat vícefaktorové ověřování s minimální konfigurací.

Tip

Microsoft Entra ID, Microsoft Entra Externí ID a Azure AD B2C jsou samostatné nabídky produktů. Tenant Entra ID obecně představuje organizaci, zatímco tenant Azure AD B2C nebo Microsoft Entra Externí ID tenant může představovat kolekci identit, které se mají použít s aplikacemi předávající strany. Další informace najdete v tématu Azure AD B2C: Nejčastější dotazy.

Tip

Microsoft Entra Externí ID pro zákazníky je řešení Microsoftu pro správu přístupu a zákazníka identity (CIAM).

V tomto kurzu se dozvíte, jak nakonfigurovat aplikaci ASP.NET Core pro ověřování pomocí Azure AD B2C.

Požadavky

Příprava

  1. Vytvořte tenanta Azure Active Directory B2C.

  2. Vytvořte novou aplikaci ASP.NET core Razor pages:

    dotnet new razor -o azure-ad-b2c
    

    Předchozí příkaz vytvoří Razor aplikaci stránek v adresáři s názvem azure-ad-b2c.

    Tip

    K vytvoření aplikace můžete raději použít Visual Studio.

  3. Vytvořte registraci webové aplikace v tenantovi. Pro identifikátor URI přesměrování použijte https://localhost:5001/signin-oidc. Nahraďte 5001 port používaný vaší aplikací při použití portů generovaných sadou Visual Studio.

Úprava aplikace

  1. Přidejte do Microsoft.Identity.Web projektu balíčky a Microsoft.Identity.Web.UI balíčky. Pokud používáte Visual Studio, můžete použít Správce balíčků NuGet.

    dotnet add package Microsoft.Identity.Web
    dotnet add package Microsoft.Identity.Web.UI
    

    V předchozím příkladu:

    • Microsoft.Identity.Web obsahuje základní sadu závislostí pro ověřování s platformou Microsoftu identity .
    • Microsoft.Identity.Web.UI zahrnuje funkce uživatelského rozhraní zapouzdřené v oblasti s názvem MicrosoftIdentity.
  2. AzureADB2C Přidat objekt do appsettings.json.

    Poznámka:

    Při používání toků uživatelů Azure B2C musíte nastavit instanci a ID zásad typu toku.

    {
      "AzureADB2C": {
        "Instance": "https://--your-domain--.b2clogin.com",
        "Domain": "[Enter the domain of your B2C tenant, e.g. contoso.onmicrosoft.com]",
        "TenantId": "[Enter 'common', or 'organizations' or the Tenant Id (Obtained from the Azure portal. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. da41245a5-11b3-996c-00a8-4d99re19f292]",
        "ClientId": "[Enter the Client Id (Application ID obtained from the Azure portal), e.g. ba74781c2-53c2-442a-97c2-3d60re42f403]",
        // Use either a secret or a certificate. ClientCertificates are recommended.
        "ClientSecret": "[Copy the client secret added to the app from the Azure portal]",
        "ClientCertificates": [
        ],
        // the following is required to handle Continuous Access Evaluation challenges
        "ClientCapabilities": [ "cp1" ],
        "CallbackPath": "/signin-oidc",
        // Add your policy here
        "SignUpSignInPolicyId": "B2C_1_signup_signin",
        "SignedOutCallbackPath": "/signout-callback-oidc"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*"
    }
    
    • Pro doménu použijte doménu vašeho tenanta Azure AD B2C.
    • Pro ClientId použijte ID aplikace (klienta) z registrace aplikace, kterou jste vytvořili ve svém tenantovi.
    • Například použijte doménu vašeho tenanta Azure AD B2C.
    • Pro SignUpSignInPolicyId použijte zásadu toku uživatele definovanou v tenantovi Azure B2C.
    • Použijte konfiguraci ClientSecret nebo ClientCertificates. Doporučuje se certifikáty ClientCertificates.
    • Všechny ostatní hodnoty nechte tak, jak jsou.
  3. Ve složce Pages/Shared vytvořte soubor s názvem _LoginPartial.cshtml. Zahrňte následující kód:

    @using System.Security.Principal
    
    <ul class="navbar-nav">
    @if (User.Identity?.IsAuthenticated == true)
    {
            <span class="navbar-text text-dark">Hello @User.Identity?.Name!</span>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
            </li>
    }
    else
    {
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
            </li>
    }
    </ul>
    

    Předchozí kód:

    • Zkontroluje, jestli je uživatel ověřený.
    • Vykreslí odkaz pro odhlášení nebo přihlášení podle potřeby.
      • Odkaz odkazuje na metodu akce na Account kontroleru v MicrosoftIdentity oblasti.
  4. V souboru Pages/Shared/_Layout.cshtml přidejte zvýrazněný řádek v elementu <header> :

    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">azure_ad_b2c</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    

    Přidání <partial name="_LoginPartial" /> vykreslí _LoginPartial.cshtml částečné zobrazení v každém požadavku na stránku, který toto rozložení používá.

  5. V Program.cs proveďte následující změny:

    1. Přidejte následující using direktivy:

      using Microsoft.Identity.Web;
      using Microsoft.Identity.Web.UI;
      using Microsoft.AspNetCore.Authentication.OpenIdConnect;
      

      Předchozí kód vyřeší odkazy použité v dalších krocích.

    2. builder.Services Aktualizujte řádky následujícím kódem:

      builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
              .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureADB2C"));
      
      builder.Services.AddAuthorization(options =>
      {
          // By default, all incoming requests will be authorized according to 
          // the default policy
          options.FallbackPolicy = options.DefaultPolicy;
      });
      builder.Services.AddRazorPages(options => {
          options.Conventions.AllowAnonymousToPage("/Index");
      })
      .AddMvcOptions(options => { })
      .AddMicrosoftIdentityUI();
      

      V předchozím kódu:

      • AddAuthentication Volání a AddMicrosoftIdentityWebApp metody konfigurují aplikaci tak, aby používala Open ID Connect, konkrétně nakonfigurovanou pro platformu Microsoftuidentity.
      • AddAuthorization inicializuje autorizaci ASP.NET Core.
      • Volání AddRazorPages nakonfiguruje aplikaci tak, aby anonymní prohlížeče mohly zobrazit indexovou stránku. Všechny ostatní požadavky vyžadují ověření.
      • AddMvcOptions a AddMicrosoftIdentityUI přidejte požadované komponenty uživatelského rozhraní pro přesměrování do a z Azure AD B2C.
    3. Aktualizujte zvýrazněnou čáru na metodu Configure :

      app.UseRouting();
      
      app.UseAuthentication();
      app.UseAuthorization();
      
      app.MapRazorPages();
      

      Předchozí kód umožňuje ověřování v ASP.NET Core.

Spustit aplikaci

Poznámka:

Použijte profil, který odpovídá identifikátorům URI pro přesměrování registrace Aplikace Azure.

  1. Spustit aplikaci.

    dotnet run --launch-profile https
    
  2. Přejděte do zabezpečeného koncového bodu aplikace, https://localhost:5001/například .

    • Stránka Index se vykreslí bez výzvy ověřování.
    • Záhlaví obsahuje odkaz pro přihlášení , protože nejste ověřeni.
  3. Vyberte odkaz Privacy.

    • Prohlížeč se přesměruje na nakonfigurovanou metodu ověřování vašeho tenanta.
    • Po přihlášení se v záhlaví zobrazí uvítací zpráva a odkaz Pro odhlášení .

Další kroky

V tomto kurzu jste zjistili, jak nakonfigurovat aplikaci ASP.NET Core pro ověřování pomocí Azure AD B2C.

Teď, když je aplikace ASP.NET Core nakonfigurovaná tak, aby k ověřování používala Azure AD B2C, můžete k zabezpečení aplikace použít atribut Authorize. Pokračujte v vývoji aplikace tím, že se naučíte: