Dela via


Molnautentisering med Azure Active Directory B2C i ASP.NET Core

Av Damien Bod

Azure Active Directory B2C (Azure AD B2C) är en lösning för molnidentitetshantering för webb- och mobilappar. Tjänsten tillhandahåller autentisering för appar som finns i molnet och lokalt. Autentiseringstyper inkluderar enskilda konton, konton för sociala nätverk och federerade företagskonton. Dessutom kan Azure AD B2C tillhandahålla multifaktorautentisering med minimal konfiguration.

Tips/Råd

Microsoft Entra ID, Microsoft Entra External ID och Azure AD B2C är separata produkterbjudanden. En Entra ID-klientorganisation representerar vanligtvis en organisation, medan en Azure AD B2C-klientorganisation eller en extern Microsoft Entra-ID-klientorganisation kan representera en samling identiteter som ska användas med förlitande partprogram. Mer information finns i Azure AD B2C: Vanliga frågor och svar.

Tips/Råd

Microsoft Entra Externt ID för kunder är Microsofts nya lösning för kundidentitets- och åtkomsthantering (CIAM).

I den här självstudien får du lära dig hur du konfigurerar en ASP.NET Core-app för autentisering med Azure AD B2C.

Förutsättningar

Förberedelse

  1. Skapa en Azure Active Directory B2C-klientorganisation.

  2. Skapa en ny ASP.NET Core Razor Pages-app:

    dotnet new razor -o azure-ad-b2c
    

    Föregående kommando skapar en Razor Pages-app i en katalog med namnet azure-ad-b2c.

    Tips/Råd

    Du kanske föredrar att använda Visual Studio för att skapa din app.

  3. Skapa en webbappregistrering i tenanten. För omdirigerings-URI använder du https://localhost:5001/signin-oidc. Ersätt 5001 med den port som används av din app när du använder Visual Studio-genererade portar.

Ändra appen

  1. Lägg till paketen Microsoft.Identity.Web och Microsoft.Identity.Web.UI i projektet. Om du använder Visual Studio kan du använda NuGet Package Manager.

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

    I det föregående:

    • Microsoft.Identity.Web innehåller den grundläggande uppsättningen beroenden för autentisering med Microsofts identitetsplattform.
    • Microsoft.Identity.Web.UI innehåller UI-funktioner inkapslade i ett område med namnet MicrosoftIdentity.
  2. Lägg till ett AzureADB2C objekt i appsettings.json.

    Anmärkning

    När du använder Azure B2C-användarflöden måste du ange instansen och PolicyId för typen av flöde.

    {
      "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": "*"
    }
    
    • För Domän använder du domänen för din Azure AD B2C-klientorganisation.
    • För ClientId använder du Program (klient) ID från appregistreringen som du skapade i din klient.
    • Använd till exempel domänen för din Azure AD B2C-klientorganisation.
    • För SignUpSignInPolicyId använder du användarflödesprincipen som definierats i Azure B2C-klientorganisationen
    • Använd antingen ClientSecret - eller ClientCertificates-konfigurationen . Klientcertifikat rekommenderas.
    • Lämna alla andra värden som de är.
  3. Skapa en fil med namnet _LoginPartial.cshtmli Sidor/Delad. Inkludera följande kod:

    @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>
    

    Föregående kod:

    • Kontrollerar om användaren är autentiserad.
    • Visar en utloggningslänk eller inloggningslänk efter behov.
      • Länken pekar på en åtgärdsmetod på kontrollanten Account i området MicrosoftIdentity .
  4. Lägg till den markerade raden i elementet <header> i Pages/Shared/_Layout.cshtml:

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

    Om du lägger till <partial name="_LoginPartial" /> återges den _LoginPartial.cshtml partiella vyn i varje sidbegäran som använder den här layouten.

  5. I Program.cs gör du följande ändringar:

    1. Lägg till följande using direktiv:

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

      Koden ovan matchar referenser som används i nästa steg.

    2. Uppdatera raderna builder.Services med följande kod:

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

      I koden ovan:

      • Anrop till AddAuthentication metoderna och AddMicrosoftIdentityWebApp konfigurerar appen för att använda Open ID Connect, som är specifikt konfigurerat för Microsofts identitetsplattform.
      • AddAuthorization initierar ASP.NET Core-auktorisering.
      • Anropet AddRazorPages konfigurerar appen så att anonyma webbläsare kan visa sidan Index. Alla andra begäranden kräver autentisering.
      • AddMvcOptions och AddMicrosoftIdentityUI lägg till nödvändiga gränssnittskomponenter för omdirigering till/från Azure AD B2C.
    3. Uppdatera den markerade raden till Configure metoden:

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

      Föregående kod aktiverar autentisering i ASP.NET Core.

Kör appen

Anmärkning

Använd profilen som matchar Omdirigerings-URI:er för Azure-appregistrering

  1. Kör appen.

    dotnet run --launch-profile https
    
  2. Bläddra till appens säkra slutpunkt, https://localhost:5001/till exempel .

    • Sidan Index renderas utan autentiseringsutmaning.
    • Rubriken innehåller en inloggningslänk eftersom du inte är autentiserad.
  3. Välj länken Privacy .

    • Webbläsaren omdirigeras till klientens konfigurerade autentiseringsmetod.
    • När du har loggat in visar rubriken ett välkomstmeddelande och en utloggningslänk .

Nästa steg

I den här självstudien har du lärt dig hur du konfigurerar en ASP.NET Core-app för autentisering med Azure AD B2C.

Nu när ASP.NET Core-appen har konfigurerats för att använda Azure AD B2C för autentisering kan attributet Auktorisera användas för att skydda din app. Fortsätt att utveckla din app genom att lära dig att: