Esercitazione: Configurare un'app Web ASP.NET Core per l'autorizzazione e l'autenticazione
Si applica a: Tenant del personale
Tenant esterni (altre informazioni)
In questa esercitazione si aggiungono gli elementi di autenticazione e autorizzazione a un'app Web ASP.NET Core. Nell'esercitazione precedente è stato creato un progetto ASP.NET Core e configurato per l'autenticazione.
In questa esercitazione:
- Aggiungere elementi di autorizzazione e autenticazione al codice
- Abilitare la visualizzazione delle attestazioni in un token ID
- Aggiungere le esperienze di accesso e disconnessione
Prerequisiti
- Completamento dei prerequisiti e dei passaggi descritti in Esercitazione: Configurare un'app Web ASP.NET Core che autentica gli utenti.
Aggiungere elementi di autenticazione e autorizzazione
I file HomeController.cs e Program.cs devono essere modificati per aggiungere gli elementi di autenticazione e autorizzazione all'app Web ASP.NET Core. Ciò include la gestione della home page, l'aggiunta di namespace corretti e la configurazione dell'accesso.
Aggiungere l'autorizzazione a HomeController.cs
La home page dell'applicazione deve avere la possibilità di autorizzare l'utente. Lo spazio dei nomi Microsoft.AspNetCore.Authorization
fornisce le classi e le interfacce per implementare l'autorizzazione per l'app Web. L'attributo [Authorize]
viene usato per specificare che solo gli utenti autenticati possono usare l'app Web.
Nell'app Web aprire Controllers/HomeController.cse aggiungere il frammento di codice seguente all'inizio del file:
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
Aggiungere l'attributo
[Authorize]
sopra la definizione della classeHomeController
, come illustrato nel frammento di codice seguente:[Authorize] public class HomeController : Controller { ...
Aggiungere elementi di autenticazione e autorizzazione a Program.cs
Il file Program.cs è il punto di ingresso dell'applicazione e deve essere modificato per aggiungere l'autenticazione e l'autorizzazione all'app Web. I servizi devono essere aggiunti per consentire all'app di usare le impostazioni definite in appsettings.json per l'autenticazione.
Aggiungi i namespace seguenti all'inizio del file.
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;
Aggiungere quindi il servizio di autenticazione dell'app Web di Microsoft Identity, che configura l'app per l'uso di Microsoft Identity per l'autenticazione.
// 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();
Successivamente, il middleware deve essere configurato per abilitare le funzionalità di autenticazione. Sostituire il resto del codice con il frammento di codice seguente.
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();
Aggiungere l'esperienza di accesso e disconnessione
L'interfaccia utente deve ricevere aggiornamenti per fornire una più user-friendly esperienza per l'accesso e la disconnessione. Questa sezione illustra come creare un nuovo file che visualizza gli elementi di navigazione in base allo stato di autenticazione dell'utente. Il codice legge le attestazioni del token ID per verificare che l'utente sia autenticato e usa User.Claims
per estrarre le attestazioni del token ID.
Creare un nuovo file in Views/Shared e assegnargli il nome _LoginPartial.cshtml.
Aprire il file e aggiungere il codice seguente per implementare l'accesso e la disconnessione.
@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>
Aprire Views/Shared/_Layout.cshtml e aggiungere un riferimento a
_LoginPartial
creato nel passaggio precedente. Posizionare questa classe vicino alla fine della classenavbar-nav
, come illustrato nel frammento di codice seguente:<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>
Usare un dominio URL personalizzato (facoltativo)
Si applica a: cerchio bianco tenant dei lavoratori
tenant esterni (ulteriori informazioni)
Usare un dominio personalizzato per personalizzare completamente l'URL di autenticazione. Dal punto di vista dell'utente, gli utenti rimangono nel dominio durante il processo di autenticazione, anziché essere reindirizzati al nome di dominio ciamlogin.com.
Seguire questa procedura per usare un dominio personalizzato:
Usare la procedura descritta in Abilitare domini URL personalizzati per le app nei tenant esterni per abilitare il dominio URL personalizzato per il tenant esterno.
Apri il file appsettings.json
- Aggiornare i parametri
Instance
eTenantId
a una proprietàAuthority
. - Aggiungere la stringa seguente al valore
Authority
fino ahttps://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
. SostituireEnter_the_Custom_Domain_Here
con il dominio URL personalizzato eEnter_the_Tenant_ID_Here
con l'ID tenant. Se non hai l'ID del tenant, scopri come leggere i dettagli del tenant. - Aggiungere una proprietà
knownAuthorities
con il valore [Enter_the_Custom_Domain_Here].
- Aggiornare i parametri
Dopo aver apportato le modifiche al file di appsettings.json, se il dominio URL personalizzato è login.contoso.come l'ID tenant è aaaabbbbbb-0000-cccc-1111-dddd2222eeeee, il file dovrebbe essere simile al frammento di codice seguente:
{
"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"]
...