Udostępnij za pośrednictwem


Samouczek: przygotowywanie aplikacji internetowej ASP.NET Core do uwierzytelniania w dzierżawie zewnętrznej

Ten samouczek jest częścią 2 serii, która pokazuje, jak utworzyć aplikację internetową ASP.NET Core i przygotować ją do uwierzytelniania przy użyciu centrum administracyjnego firmy Microsoft Entra. W części 1 tej serii zarejestrowano aplikację i skonfigurowano przepływy użytkowników w dzierżawie zewnętrznej. W tym samouczku pokazano, jak utworzyć aplikację internetową platformy ASP.NET Core i skonfigurować ją do uwierzytelniania.

W tym samouczku wykonasz następujące instrukcje:

  • Tworzenie projektu ASP.NET Core w programie Visual Studio Code
  • Dodawanie wymaganych pakietów NuGet
  • Konfigurowanie ustawień aplikacji
  • Dodawanie kodu w celu zaimplementowania uwierzytelniania

Wymagania wstępne

Tworzenie projektu platformy ASP.NET Core

  1. Otwórz program Visual Studio Code, wybierz pozycję Plik>Otwórz folder.... Przejdź do i wybierz lokalizację, w której chcesz utworzyć projekt.

  2. Otwórz nowy terminal, wybierając pozycję Terminal>Nowy terminal.

  3. Wprowadź następujące polecenie, aby utworzyć projekt MVC (Model View Controller) ASP.NET Core.

    dotnet new mvc -n dotnetcore_webapp
    

Instalowanie pakietów tożsamości

Pakiety NuGet powiązane z tożsamościami muszą być zainstalowane w projekcie, aby uwierzytelnić użytkowników.

  1. Wprowadź następujące polecenia, aby przejść do folderu dotnetcore_webapp i zainstalować odpowiedni pakiet NuGet:

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

Konfigurowanie aplikacji pod kątem uwierzytelniania

  1. Otwórz plik appsettings.json i zastąp istniejący kod poniższym fragmentem kodu.

    {
      "AzureAd": {
        "Authority": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/",
        "ClientId": "Enter_the_Application_Id_Here",
        "ClientCredentials": [
          {
            "SourceType": "ClientSecret",
            "ClientSecret": "Enter_the_Client_Secret_Here"
          }
        ],
        "CallbackPath": "/signin-oidc",
        "SignedOutCallbackPath": "/signout-callback-oidc"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }
    
    • Authority — Wystąpienie dostawcy tożsamości i odbiorcy logowania dla aplikacji. Zastąp Enter_the_Tenant_Subdomain_Here ciąg poddomeną dzierżawy zewnętrznej. Aby to znaleźć, wybierz pozycję Przegląd w menu paska bocznego, a następnie przejdź do karty Przegląd. Znajdź domenę podstawową w formularzu caseyjensen.onmicrosoft.com. Poddomena jest caseyjensen.
    • ClientId — Identyfikator aplikacji, nazywany również klientem. Zastąp tekst w cudzysłowach wartością identyfikatora aplikacji (klienta), która została zarejestrowana wcześniej na stronie przeglądu zarejestrowanej aplikacji.
    • ClientSecret — wartość wpisu tajnego klienta utworzonego w sekcji Przygotowywanie dzierżawy. Zastąp tekst w cudzysłowach wartością wpisu tajnego klienta w centrum administracyjnym firmy Microsoft Entra.
    • CallbackPath — Jest identyfikatorem, który pomaga serwerowi przekierować odpowiedź do odpowiedniej aplikacji.
  2. Zapisz zmiany w pliku.

  3. Otwórz plik Właściwości/launchSettings.json.

  4. https W sekcji programu profileszmień https adres URL w applicationUrl pliku , tak aby odczytał https://localhost:7274wartość . Ten adres URL został użyty do zdefiniowania identyfikatora URI przekierowania.

  5. Zapisz zmiany w pliku.

Użyj niestandardowej domeny adresu URL (opcjonalnie)

Użyj domeny niestandardowej, aby w pełni oznaczyć adres URL uwierzytelniania. Z perspektywy użytkownika użytkownicy pozostają w domenie podczas procesu uwierzytelniania, a nie przekierowywani do ciamlogin.com nazwy domeny.

Wykonaj następujące kroki, aby użyć domeny niestandardowej:

  1. Wykonaj kroki opisane w temacie Włączanie niestandardowych domen url dla aplikacji w dzierżawach zewnętrznych, aby włączyć niestandardową domenę adresu URL dla dzierżawy zewnętrznej.

  2. Otwórz plik appsettings.json :

    1. Zaktualizuj wartość Authority właściwości na https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Zastąp Enter_the_Custom_Domain_Here ciąg domeną niestandardowego adresu URL i Enter_the_Tenant_ID_Here identyfikatorem dzierżawy. Jeśli nie masz identyfikatora dzierżawy, dowiedz się, jak odczytywać szczegóły dzierżawy.
    2. Dodaj knownAuthorities właściwość o wartości [Enter_the_Custom_Domain_Here].

Po wprowadzeniu zmian w pliku appsettings.json , jeśli domena niestandardowego adresu URL jest login.contoso.com, a identyfikator dzierżawy to aaaabbbb-0000-cccc-1111-dddd2222eeeee, plik powinien wyglądać podobnie do następującego fragmentu kodu:

{
  "AzureAd": {
    "Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "ClientId": "Enter_the_Application_Id_Here",
    "ClientCredentials": [
      {
        "SourceType": "ClientSecret",
        "ClientSecret": "Enter_the_Client_Secret_Here"
      }
    ],
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-callback-oidc",
    "KnownAuthorities": ["login.contoso.com"]
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Dodawanie autoryzacji do HomeController.cs

Plik HomeController.cs zawiera kod strony głównej aplikacji i musi mieć możliwość autoryzowania użytkownika. Microsoft.AspNetCore.Authorization Przestrzeń nazw udostępnia klasy i interfejsy do implementowania autoryzacji w aplikacji internetowej, a [Authorize] atrybut służy do określania, że tylko uwierzytelnieni użytkownicy mogą używać aplikacji internetowej.

  1. W edytorze kodu otwórz plik Controllers\HomeController.cs .

  2. Do kontrolera należy dodać autoryzację, Microsoft.AspNetCore.Authorization aby górna część pliku jest identyczna z następującym fragmentem kodu:

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  3. Ponadto dodaj [Authorize] atrybut bezpośrednio nad definicją HomeController klasy.

    [Authorize]
    

Dodawanie uwierzytelniania i autoryzacji do Program.cs

Należy zmodyfikować Program.cs , aby dodać uwierzytelnianie i autoryzację do aplikacji internetowej. Obejmuje to dodawanie przestrzeni nazw na potrzeby uwierzytelniania i autoryzacji oraz możliwość logowania użytkowników przy użyciu Platforma tożsamości Microsoft.

  1. Aby dodać wymagane przestrzenie nazw, otwórz Program.cs i dodaj następujący fragment kodu na początku pliku:

    using Microsoft.AspNetCore.Authentication.OpenIdConnect;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc.Authorization;
    using Microsoft.Identity.Web;
    using Microsoft.Identity.Web.UI;
    using System.IdentityModel.Tokens.Jwt;
    
  2. Następnie dodaj usługi uwierzytelniania do aplikacji, która umożliwi aplikacji internetowej logowanie użytkowników przy użyciu Platforma tożsamości Microsoft. Resztę kodu możesz zastąpić w Program.cs następującym fragmentem kodu:

    var builder = WebApplication.CreateBuilder(args);
    
    // Add services to the container.
    builder.Services.AddControllersWithViews();
    
    // This is required to be instantiated before the OpenIdConnectOptions starts getting configured.
    // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications.
    // For instance, 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role' instead of 'roles' claim.
    // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token
    JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
    
    // Sign-in users with the Microsoft identity platform
    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration)
        .EnableTokenAcquisitionToCallDownstreamApi()
        .AddInMemoryTokenCaches();
    
    builder.Services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    }).AddMicrosoftIdentityUI();
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Home/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    app.UseAuthorization();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    app.Run();
    
    

Następny krok