Sdílet prostřednictvím


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

Platí pro: Zelený kruh s bílým symbolem zaškrtnutí Tenanti pracovních sil – externí tenanti Zelený kruh s bílým symbolem zaškrtnutí (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:

  • 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 přidejte 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: bílý kruh s šedým X symbolem. pracovní nájemníci zelený kruh s bílou značkou zaškrtnutí. externí nájemníci (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