App Web che effettua l’accesso degli utenti: configurazione del codice

Questo articolo descrive come configurare il codice per un'app Web che consente di accedere agli utenti.

Librerie Microsoft che supportano le app Web

Le librerie Microsoft seguenti vengono usate per proteggere un'app Web (e un'API Web):

Linguaggio/framework Progetto in
GitHub
Pacchetto Recupero
avviata
Consentire l'accesso degli utenti Accedere alle API Web Disponibile a livello generale (GA) o
Anteprima pubblica1
.NET MSAL.NET Microsoft.Identity.Client La libreria non può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
.NET Microsoft.IdentityModel Microsoft.IdentityModel La libreria non può richiedere token ID per l'accesso utente.2 La libreria non può richiedere token di accesso per le API Web protette.2 Disponibilità generale
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Guida introduttiva La libreria può richiedere token ID per l'accesso utente. La libreria non può richiedere token di accesso per le API Web protette. Disponibilità generale
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Guida introduttiva La libreria può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
Java MSAL4J msal4j Guida introduttiva La libreria può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Esercitazione La libreria può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
Node.js MSAL Node msal-node Guida introduttiva La libreria può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
Python MSAL Python msal La libreria può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. Disponibilità generale
Python identity identity Guida introduttiva La libreria può richiedere token ID per l'accesso utente. La libreria può richiedere token di accesso per le API Web protette. --

(1) Le condizioni di licenza universali per i servizi online si applicano alle librerie in anteprima pubblica.

(2) La libreria Microsoft.IdentityModel convalida solo i token. Non può richiedere token ID o di accesso.

Selezionare la scheda corrispondente alla piattaforma a cui si è interessati:

I frammenti di codice di questo articolo e dei successivi sono tratti dal capitolo 1 dell’esercitazione incrementale di app Web ASP.NET Core.

È possibile fare riferimento all'esercitazione per i dettagli di implementazione completi.

File di configurazione

Le applicazioni Web che consentono l'accesso degli utenti tramite Microsoft Identity Platform vengono configurate tramite file di configurazione. Tali file devono specificare i valori seguenti:

  • L'istanza cloud se si desidera che l'app venga eseguita in cloud nazionali, per esempio. Le diverse opzioni includono;
    • https://login.microsoftonline.com/ per cloud pubblico di Azure
    • https://login.microsoftonline.us/ per Azure US Government
    • https://login.microsoftonline.de/ per Microsoft Entra Germania
    • https://login.partner.microsoftonline.cn/common per Microsoft Entra Cina gestito da 21Vianet
  • Gruppo di destinatari nell'ID tenant. Le opzioni variano a seconda che l'app sia a tenant singolo o multi-tenant.
    • GUID del tenant ottenuto dal portale di Azure per consentire agli utenti dell'organizzazione di accedere. È anche possibile usare un nome di dominio.
    • organizations per consentire agli utenti di accedere a qualsiasi account aziendale o dell'istituto di istruzione
    • common per consentire agli utenti di accedere con qualsiasi account aziendale o dell'istituto di istruzione o account personale Microsoft
    • consumers per consentire agli utenti di accedere solo con un account personale Microsoft
  • L’ID client dell'applicazione copiato dal portale di Azure

È anche possibile visualizzare riferimenti all'autorità, una concatenazione dei valori instance e tenant ID.

In ASP.NET Core queste impostazioni si trovano nel file appsettings.json, nella sezione "Microsoft Entra ID".

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id here]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

In ASP.NET Core, un altro file (properties\launchSettings.json) contiene l'URL (applicationUrl) e la porta TLS/SSL (sslPort) per l'applicazione e i vari profili.

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

Nel portale di Azure gli URI di reindirizzamento registrati nella pagina Autenticazione per l'applicazione devono corrispondere a questi URL. Per i due file di configurazione precedenti, sarebbero https://localhost:44321/signin-oidc. Il motivo è che applicationUrl è http://localhost:3110, ma è specificato sslPort (44321). CallbackPath è /signin-oidc, come definito in appsettings.json.

Allo stesso modo, l'URI di disconnessione verrebbe impostato su https://localhost:44321/signout-oidc.

Nota

SignedOutCallbackPath dovrebbe essere impostato sul portale o sull'applicazione per evitare conflitti durante la gestione dell'evento.

Codice di inizializzazione

Le differenze di codice di inizializzazione dipendono dalla piattaforma. Per ASP.NET Core e ASP.NET, l'accesso degli utenti viene delegato al middleware OpenID Connect. Il modello ASP.NET o ASP.NET Core genera applicazioni Web per l'endpoint di Azure AD v1.0. Alcune configurazioni sono necessarie per adattarle a Microsoft Identity Platform.

In ASP.NET App Web core (e API Web), l'applicazione è protetta perché si dispone di un attributo Authorize nei controller o nelle azioni del controller. Questo attributo verifica che l'utente sia autenticato. Prima del rilascio di .NET 6, l'inizializzazione del codice si trovava nel file Startup.cs. I nuovi progetti ASP.NET Core con .NET 6 non contengono più un file Startup.cs. L'esecuzione del file è il file Program.cs. La parte restante di questa esercitazione riguarda .NET 5 o versione precedente.

Nota

Se si desidera iniziare direttamente con i nuovi modelli di ASP.NET Core per Microsoft Identity Platform, che sfruttano Microsoft.Identity.Web, è possibile scaricare un pacchetto NuGet di anteprima contenente i modelli di progetto per .NET 5.0. Dopo l'installazione, è quindi possibile creare direttamente un'istanza di ASP.NET applicazioni Web Core (MVC o Blazor). Per informazioni dettagliate, vedere Modelli di progetto di app Web Microsoft.Identity.Web. Questo è l'approccio più semplice perché eseguirà tutti i passaggi seguenti.

Se si preferisce avviare il progetto con l'impostazione predefinita corrente ASP.NET progetto Web Core in Visual Studio o usando dotnet new mvc --auth SingleOrg o dotnet new webapp --auth SingleOrg, verrà visualizzato codice simile al seguente:

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

Questo codice usa il pacchetto NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI legacy usato per creare un'applicazione Azure Active Directory v1.0. Questo articolo illustra come creare un'applicazione Microsoft Identity Platform v2.0 che sostituisce tale codice.

  1. Aggiungere i pacchetti NuGet Microsoft.Identity.Web e Microsoft.Identity.Web.UI al progetto. Rimuovere il pacchetto NuGet Microsoft.AspNetCore.Authentication.AzureAD.UI, se presente.

  2. Aggiornare il codice in ConfigureServices in modo che usi i metodi AddMicrosoftIdentityWebApp e AddMicrosoftIdentityUI.

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApp(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. Nel metodo Configure in Startup.csabilitare l'autenticazione con una chiamata a app.UseAuthentication(); e app.MapControllers();.

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

Nel codice:

  • Il metodo di estensione AddMicrosoftIdentityWebApp viene definito in Microsoft.Identity.Web, che;

    • Configura le opzioni per leggere il file di configurazione (qui dalla sezione "Microsoft Entra ID")
    • Configura le opzioni OpenID Connect in modo che l'autorità sia Microsoft Identity Platform.
    • Convalida l'autorità di certificazione del token.
    • Assicura che le attestazioni corrispondenti al nome vengano mappate dall'attestazione preferred_username nel token ID.
  • Oltre all'oggetto di configurazione, è possibile specificare il nome della sezione di configurazione quando si chiama AddMicrosoftIdentityWebApp. L'impostazione predefinita è AzureAd.

  • AddMicrosoftIdentityWebApp include altri parametri per scenari avanzati. Ad esempio, la traccia degli eventi middleware OpenID Connect consente di risolvere i problemi dell'applicazione Web se l'autenticazione non funziona. L'impostazione del parametro facoltativo subscribeToOpenIdConnectMiddlewareDiagnosticsEvents su true mostrerà come vengono elaborate le informazioni dal set di middleware ASP.NET Core man mano che passa dalla risposta HTTP all'identità dell'utente in HttpContext.User.

  • Il metodo di estensione AddMicrosoftIdentityUI viene definito in Microsoft.Identity.Web.UI. Fornisce un controller predefinito per gestire l'accesso e la disconnessione.

Per altre informazioni su come Microsoft.Identity.Web consente di creare app Web, vedere App Web in microsoft-identity-web.

Passaggio successivo