App Web che accede agli utenti: Configurazione del codice

Informazioni su come configurare il codice per l'app Web che accede 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 Ottenere
avviata
Consentire l'accesso degli utenti Accedere alle API Web Disponibile a livello generale (GA) o
Anteprimapubblica 1
.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 l'ID o i token di accesso.

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

I frammenti di codice in questo articolo e i seguenti vengono estratti dall'esercitazione incrementale dell'app Web core di ASP.NET, capitolo 1.

Per informazioni dettagliate sull'implementazione, è possibile fare riferimento a questa esercitazione.

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 vuole che l'app venga eseguita in cloud nazionali, ad esempio. Le diverse opzioni includono;
    • https://login.microsoftonline.com/ per il 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 China 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 accedere agli utenti in qualsiasi account aziendale o dell'istituto di istruzione
    • common per accedere agli utenti con qualsiasi account aziendale o dell'istituto di istruzione o account personale Microsoft
    • consumers per accedere agli utenti solo con un account personale Microsoft
  • ID client per l'applicazione, copiato dal portale di Azure

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

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 (proprietà\launch Impostazioni.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/"
    }
  }
}

Nella 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, sono https://localhost:44321/signin-oidc. Il motivo è che applicationUrl è http://localhost:3110, ma sslPort è specificato (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 deve essere impostato sul portale o sull'applicazione per evitare conflitti durante la gestione dell'evento.

Codice di inizializzazione

Le differenze di codice di inizializzazione sono dipendenti dalla piattaforma. Per ASP.NET Core e ASP.NET, l'accesso degli utenti viene delegato al middleware openID Connessione. 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 Authorize attributo 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 era 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 vuole 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 Microsoft.AspNetCore.Authentication.AzureAD.UI pacchetto NuGet, se presente.

  2. Aggiornare il codice in in ConfigureServices in modo che usi i AddMicrosoftIdentityWebApp metodi 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. Configure Nel metodo in Startup.cs abilitare 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 AddMicrosoftIdentityWebApp metodo di estensione è definito in Microsoft.Identity.Web, che;

    • Configura le opzioni per leggere il file di configurazione (qui dalla sezione "Microsoft Entra ID")
    • Configura le opzioni di Connessione OpenID 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. Per impostazione predefinita, è AzureAd.

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

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

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

Passaggi successivi

Nell'articolo successivo si apprenderà come attivare l'accesso e la disconnessità.

Passare all'articolo successivo in questo scenario, Accedere e disconnettersi.