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 | — | Disponibilità generale | ||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | Disponibilità generale |
ASP.NET Core | ASP.NET Core | Microsoft.AspNetCore.Authentication | Guida introduttiva | Disponibilità generale | ||
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | Guida introduttiva | Disponibilità generale | ||
Java | MSAL4J | msal4j | Guida introduttiva | Disponibilità generale | ||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | Esercitazione | Disponibilità generale | ||
Node.js | MSAL Node | msal-node | Guida introduttiva | Disponibilità generale | ||
Python | MSAL Python | msal | Disponibilità generale | |||
Python | identity | identity | Guida introduttiva | -- |
(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 Azurehttps://login.microsoftonline.us/
per Azure US Governmenthttps://login.microsoftonline.de/
per Microsoft Entra Germaniahttps://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 istruzionecommon
per consentire agli utenti di accedere con qualsiasi account aziendale o dell'istituto di istruzione o account personale Microsoftconsumers
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.
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.Aggiornare il codice in
ConfigureServices
in modo che usi i metodiAddMicrosoftIdentityWebApp
eAddMicrosoftIdentityUI
.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();
Nel metodo
Configure
in Startup.csabilitare l'autenticazione con una chiamata aapp.UseAuthentication();
eapp.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 facoltativosubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
sutrue
mostrerà come vengono elaborate le informazioni dal set di middleware ASP.NET Core man mano che passa dalla risposta HTTP all'identità dell'utente inHttpContext.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.