Sdílet prostřednictvím


Kurz: Konfigurace webové aplikace ASP.NET Core pro autorizaci a ověřování

Platí pro: Zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro tenanty pracovních sil. Tenanti pracovních sil zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro externí tenanty. Externí tenanti (další informace)

V tomto kurzu přidáte ověřovací a autorizační prvky do webové aplikace ASP.NET Core. V předchozím kurzujste vytvořili projekt ASP.NET Core a nakonfigurovali ho pro ověřování.

V tomto kurzu se naučíte:

  • Přidání autorizačních a ověřovacích prvků do kódu
  • Povolení zobrazení deklarací identity v tokenu ID
  • Přidání zkušeností s přihlášením a odhlášením

Požadavky

Přidání ověřovacích a autorizačních prvků

Soubory HomeController.cs a Program.cs je potřeba upravit, aby se do webové aplikace ASP.NET Core přidaly ověřovací a autorizační prvky. To zahrnuje správu domovské stránky, přidání správných oborů názvů a konfiguraci přihlášení.

Přidání autorizace do HomeController.cs

Domovská stránka aplikace musí mít možnost autorizovat uživatele. Obor názvů Microsoft.AspNetCore.Authorization poskytuje třídy a rozhraní pro implementaci autorizace pro webovou aplikaci. Atribut [Authorize] slouží k určení, že webovou aplikaci můžou používat jenom ověření uživatelé.

  1. Ve webové aplikaci otevřete Controllers/HomeController.csa do horní části souboru přidejte následující fragment kódu:

    using System.Diagnostics;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc;
    using dotnetcore_webapp.Models;
    
  2. Přidejte atribut [Authorize] nad definici třídy HomeController, jak je znázorněno v následujícím fragmentu kódu:

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

Přidání ověřovacích a autorizačních prvků do Program.cs

Soubor Program.cs je vstupním bodem aplikace a je potřeba ho upravit, aby se do webové aplikace přidalo ověřování a autorizace. Služby je potřeba přidat, aby aplikace mohla používat nastavení definovaná v appsettings.json pro ověřování.

  1. Na začátek souboru umístěte následující obory názvů.

    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. Dále přidejte ověřovací službu webové aplikace Microsoft Identity, která aplikaci nakonfiguruje tak, aby k ověřování používala identitu Microsoftu.

    // 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. Dále je potřeba nakonfigurovat middleware tak, aby povoloval možnosti ověřování. Zbytek kódu nahraďte následujícím fragmentem kódu.

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

Přidejte zážitek z přihlašování a odhlašování

Uživatelské rozhraní musí být aktualizováno, aby poskytovalo uživatelsky přívětivější prostředí pro přihlášení a odhlášení. Tato část ukazuje, jak vytvořit nový soubor, který zobrazuje navigační položky na základě stavu ověřování uživatele. Kód načte deklarace identity tokenu ID a zkontroluje, jestli je uživatel ověřený a používá User.Claims k extrakci deklarací identity tokenu ID.

  1. V zobrazeních nebo sdíleném vytvořte nový soubor a pojmenujte ho _LoginPartial.cshtml.

  2. Otevřete soubor a přidejte následující kód pro přidání přihlášení a odhlášení:

    @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. Otevřete Views/Shared/_Layout.cshtml a přidejte odkaz na _LoginPartial vytvořený v předchozím kroku. Umístěte ho na konec třídy navbar-nav, jak je znázorněno v následujícím fragmentu kódu:

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

Použití vlastní domény URL (volitelné)

Platí pro: Zelený kruh s bílým symbolem zaškrtnutí, který označuje, že následující obsah platí pro externí nájemce. Externí nájemci (další informace)

Pomocí vlastní domény plně označte adresu URL ověřování. Z pohledu uživatele zůstanou uživatelé ve vaší doméně během procesu ověřování místo přesměrování na název domény ciamlogin.com.

Pokud chcete použít vlastní doménu, postupujte takto:

  1. Použijte kroky v Povolení vlastních domén URL pro aplikace v externích tenantech k povolení vlastní domény URL pro váš externí tenant.

  2. Otevřete soubor appsettings.json:

    1. Aktualizujte parametry Instance a TenantId na vlastnost Authority.
    2. Přidejte následující řetězec k hodnotě Authority na https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here. Nahraďte Enter_the_Custom_Domain_Here vlastní doménou URL a Enter_the_Tenant_ID_Here ID tenanta. Pokud nemáte ID tenanta, zjistěte, jak získat podrobnosti o tenantovi.
    3. Přidejte vlastnost knownAuthorities s hodnotou [Enter_the_Custom_Domain_Here].

Po provedení změn v souboru appsettings.json, pokud je vaše vlastní doména URL login.contoso.coma ID vašeho tenanta je aaaabbbb-0000-cccc-1111-dddd2222eeeeee, měl by váš soubor vypadat podobně jako následující fragment kódu:

{
  "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"]
    ...

Další krok