Udostępnij za pośrednictwem


Uwierzytelnianie w chmurze za pomocą usługi Azure Active Directory B2C w usłudze ASP.NET Core

Autor: Damien Bod

Usługa Azure Active Directory B2C (Azure AD B2C ) to rozwiązanie do zarządzania chmurą identity dla aplikacji internetowych i mobilnych. Usługa zapewnia uwierzytelnianie aplikacji hostowanych w chmurze i lokalnie. Typy uwierzytelniania obejmują indywidualne konta, konta sieci społecznościowe i federacyjne konta przedsiębiorstwa. Ponadto usługa Azure AD B2C może zapewnić uwierzytelnianie wieloskładnikowe z minimalną konfiguracją.

Napiwek

Microsoft Entra ID, Tożsamość zewnętrzna Microsoft Entra i Azure AD B2C to oddzielne oferty produktów. Dzierżawa entra ID zazwyczaj reprezentuje organizację, podczas gdy dzierżawa usługi Azure AD B2C lub dzierżawa Tożsamość zewnętrzna Microsoft Entra może reprezentować kolekcję tożsamości do użycia z aplikacjami jednostki uzależnionej. Aby dowiedzieć się więcej, zobacz Azure AD B2C: często zadawane pytania.

Napiwek

Tożsamość zewnętrzna Microsoft Entra dla klientów to nowe rozwiązanie firmy Microsoft do zarządzania dostępem identity i klientami (CIAM).

Z tego samouczka dowiesz się, jak skonfigurować aplikację ASP.NET Core na potrzeby uwierzytelniania za pomocą usługi Azure AD B2C.

Wymagania wstępne

Przygotowywanie

  1. Utwórz dzierżawę usługi Azure Active Directory B2C.

  2. Utwórz nową aplikację ASP.NET Core Razor pages:

    dotnet new razor -o azure-ad-b2c
    

    Poprzednie polecenie tworzy aplikację Razor pages w katalogu o nazwie azure-ad-b2c.

    Napiwek

    Możesz użyć programu Visual Studio do utworzenia aplikacji.

  3. Utwórz rejestrację aplikacji internetowej w dzierżawie. W przypadku identyfikatora URI przekierowania użyj polecenia https://localhost:5001/signin-oidc. Zastąp 5001 element portem używanym przez aplikację podczas korzystania z portów wygenerowanych przez program Visual Studio.

Modyfikowanie aplikacji

  1. Dodaj pakiety Microsoft.Identity.Web i Microsoft.Identity.Web.UI do projektu. Jeśli używasz programu Visual Studio, możesz użyć Menedżer pakietów NuGet.

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

    W poprzednim:

    • Microsoft.Identity.Web zawiera podstawowy zestaw zależności do uwierzytelniania za pomocą platformy Microsoft identity .
    • Microsoft.Identity.Web.UI zawiera funkcje interfejsu użytkownika hermetyzowane w obszarze o nazwie MicrosoftIdentity.
  2. AzureADB2C Dodaj obiekt do appsettings.jsonobiektu .

    Uwaga

    W przypadku korzystania z przepływów użytkownika usługi Azure B2C należy ustawić wystąpienie i identyfikator PolicyId typu przepływu.

    {
      "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": "*"
    }
    
    • W przypadku domeny użyj domeny dzierżawy usługi Azure AD B2C.
    • W polu ClientId użyj identyfikatora aplikacji (klienta) z rejestracji aplikacji utworzonej w dzierżawie.
    • Na przykład użyj domeny dzierżawy usługi Azure AD B2C.
    • W przypadku identyfikatora SignUpSignInPolicyId użyj zasad przepływu użytkownika zdefiniowanych w dzierżawie usługi Azure B2C
    • Użyj konfiguracji ClientSecret lub ClientCertificates. Zalecane są certyfikaty klienta.
    • Pozostaw wszystkie inne wartości w niezmienionej formie.
  3. W obszarze Strony/Udostępnione utwórz plik o nazwie _LoginPartial.cshtml. Dołącz następujący 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>
    

    Powyższy kod ma następujące działanie:

    • Sprawdza, czy użytkownik jest uwierzytelniony.
    • Renderuje link Wyloguj się lub Zaloguj odpowiednio.
      • Link wskazuje metodę akcji na Account kontrolerze MicrosoftIdentity w obszarze.
  4. W pliku Pages/Shared/_Layout.cshtml dodaj wyróżniony wiersz w elemecie <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>
    

    Dodanie <partial name="_LoginPartial" /> powoduje renderowanie _LoginPartial.cshtml widoku częściowego w każdym żądaniu strony, które używa tego układu.

  5. W Program.cs wprowadź następujące zmiany:

    1. Dodaj następujące using dyrektywy:

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

      Powyższy kod rozwiązuje odwołania używane w następnych krokach.

    2. Zaktualizuj wiersze builder.Services przy użyciu następującego kodu:

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

      Powyższy kod:

      • Wywołania metod AddAuthentication i AddMicrosoftIdentityWebApp konfigurują aplikację tak, aby korzystała z programu Open ID Connect, specjalnie skonfigurowanego dla platformy Microsoft identity .
      • AddAuthorization inicjuje autoryzację ASP.NET Core.
      • Wywołanie AddRazorPages konfiguruje aplikację, aby przeglądarki anonimowe mogły wyświetlać stronę Indeks. Wszystkie inne żądania wymagają uwierzytelnienia.
      • AddMvcOptions i AddMicrosoftIdentityUI dodaj wymagane składniki interfejsu użytkownika do przekierowania do/z usługi Azure AD B2C.
    3. Zaktualizuj wyróżniony wiersz do Configure metody :

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

      Powyższy kod umożliwia uwierzytelnianie w programie ASP.NET Core.

Uruchom aplikację

Uwaga

Użyj profilu zgodnego z identyfikatorami URI przekierowania rejestracji aplikacja systemu Azure

  1. Uruchom aplikację.

    dotnet run --launch-profile https
    
  2. Przejdź do bezpiecznego punktu końcowego aplikacji, na przykład https://localhost:5001/.

    • Strona Indeks jest renderowana bez konieczności uwierzytelniania.
    • Nagłówek zawiera link Zaloguj, ponieważ nie jest uwierzytelniony.
  3. Wybierz link Privacy.

    • Przeglądarka jest przekierowywana do skonfigurowanej metody uwierzytelniania dzierżawy.
    • Po zalogowaniu nagłówek wyświetla komunikat powitalny i link Wyloguj.

Następne kroki

W tym samouczku przedstawiono sposób konfigurowania aplikacji ASP.NET Core na potrzeby uwierzytelniania za pomocą usługi Azure AD B2C.

Teraz, gdy aplikacja ASP.NET Core jest skonfigurowana do używania usługi Azure AD B2C do uwierzytelniania, atrybut Authorize może służyć do zabezpieczania aplikacji. Kontynuuj opracowywanie aplikacji, ucząc się: