Udostępnij za pośrednictwem


Samouczek: konfigurowanie aplikacji internetowej platformy ASP.NET Core na potrzeby autoryzacji i uwierzytelniania

Dotyczy: Zielony okrąg z białym symbolem zaznaczenia. Dzierżawcy zasobów ludzkich Zielony okrąg z białym symbolem zaznaczenia. Zewnętrzni dzierżawcy (dowiedzieć się więcej)

W tym samouczku dodasz elementy uwierzytelniania i autoryzacji do aplikacji internetowej ASP.NET Core. W poprzednim samouczku utworzono projekt ASP.NET Core i skonfigurowano go do uwierzytelniania.

W tym samouczku nauczysz się następujących rzeczy:

  • Dodawanie elementów autoryzacji i uwierzytelniania do kodu
  • Włącz wyświetlanie oświadczeń w tokenie identyfikatora
  • Dodaj doświadczenia logowania i wylogowywania

Warunki wstępne

Dodawanie elementów uwierzytelniania i autoryzacji

Aby dodać elementy uwierzytelniania i autoryzacji do aplikacji internetowej ASP.NET Core, należy zmodyfikować pliki HomeController.cs i Program.cs. Obejmuje to zarządzanie stroną główną, dodawanie poprawnych przestrzeni nazw i konfigurowanie logowania.

Dodawanie autoryzacji do HomeController.cs

Strona główna aplikacji musi mieć możliwość autoryzowania użytkownika. Przestrzeń nazw Microsoft.AspNetCore.Authorization udostępnia klasy i interfejsy do implementowania autoryzacji w aplikacji internetowej. Atrybut [Authorize] służy do określania, że tylko uwierzytelnieni użytkownicy mogą używać aplikacji internetowej.

  1. W aplikacji internetowej otwórz Controllers/HomeController.csi dodaj następujący fragment kodu w górnej części pliku:

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  2. Dodaj atrybut [Authorize] powyżej definicji klasy HomeController, jak pokazano w poniższym fragmencie kodu:

    [Authorize]
    public class HomeController : Controller
    {
    ...
    

Dodawanie elementów uwierzytelniania i autoryzacji do Program.cs

Plik Program.cs jest punktem wejścia aplikacji i musi zostać zmodyfikowany w celu dodania uwierzytelniania i autoryzacji do aplikacji internetowej. Usługi należy dodać, aby umożliwić aplikacji używanie ustawień zdefiniowanych w appsettings.json na potrzeby uwierzytelniania.

  1. Dodaj następujące przestrzenie nazw 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ługę uwierzytelniania aplikacji internetowej Microsoft Identity, która konfiguruje aplikację tak, aby korzystała z tożsamości microsoft na potrzeby uwierzytelniania.

    // 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.
    // 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();
    
    
  3. Następnie należy skonfigurować oprogramowanie pośredniczące w celu włączenia możliwości uwierzytelniania. Zastąp pozostałą część kodu poniższym fragmentem kodu.

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

Dodaj logowanie i wylogowywanie doświadczenia użytkownika

Interfejs użytkownika musi zostać zaktualizowany, aby zapewnić bardziej przyjazne dla użytkownika doświadczenie podczas logowania i wylogowania. W tej sekcji pokazano, jak utworzyć nowy plik, który wyświetla elementy nawigacyjne na podstawie stanu uwierzytelnienia użytkownika. Kod odczytuje żądania tokenu identyfikatora, aby sprawdzić, czy użytkownik jest uwierzytelniony i używa User.Claims do ekstrakcji żądań tokenu identyfikatora.

  1. Utwórz nowy plik w Views/Shared i nadaj mu nazwę _LoginPartial.cshtml.

  2. Otwórz plik i dodaj następujący kod, aby dodać funkcje logowania i wylogowania.

    @using System.Security.Principal
    
    <ul class="navbar-nav">
    @if (User.Identity is not null && User.Identity.IsAuthenticated)
    {
            <li class="nav-item">
                <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</span>
            </li>
            <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>
    
  3. Otwórz Views/Shared/_Layout.cshtml i dodaj odwołanie do _LoginPartial utworzonego w poprzednim kroku. Umieść to w pobliżu końca klasy navbar-nav, jak pokazano w poniższym fragmencie kodu:

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

Użyj niestandardowej domeny adresu URL (opcjonalnie)

Dotyczy: Biały okrąg z szarym symbolem X. Najemcy Workforce Zielony okrąg z białym znacznikiem wyboru. Zewnętrzni najemcy (dowiedz się więcej)

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 nazwy domeny ciamlogin.com.

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

  1. Wykonaj kroki opisane w "Włączanie niestandardowych domen adresów URL dla aplikacji w dzierżawach zewnętrznych", w celu włączenia niestandardowej domeny adresu URL dla swojej dzierżawy zewnętrznej.

  2. Otwórz plik appsettings.json:

    1. Zaktualizuj parametry Instance i TenantId do właściwości Authority.
    2. Dodaj następujący ciąg do wartości Authority oraz https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Zastąp Enter_the_Custom_Domain_Here domeną niestandardowego adresu URL i Enter_the_Tenant_ID_Here identyfikatorem najemcy. Jeśli nie masz identyfikatora najemcy, dowiedz się, jak możesz sprawdzić szczegóły najemcy .
    3. Dodaj właściwość knownAuthorities z wartością [Enter_the_Custom_Domain_Here].

Po wprowadzeniu zmian w pliku appsettings.json, jeśli niestandardowa domena URL to login.contoso.com, a identyfikator najemcy to aaaabbbb-0000-cccc-1111-dddd2222eeee, 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",
    "ClientCertificates": [
      {
        "SourceType": "StoreWithThumbprint",
        "CertificateStorePath": "CurrentUser/My",
        "CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
      }   
    ],
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-callback-oidc",
    "KnownAuthorities": ["login.contoso.com"]
    ...

Następny krok