Autenticazione e autorizzazione nel servizio app di AzureAuthentication and authorization in Azure App Service

Servizio app di Azure fornisce supporto integrato per l'autenticazione e l'autorizzazione ed è quindi possibile consentire l'accesso degli utenti e l'accesso ai dati senza scrivere codice, o con una minima quantità di codice, nell'app Web, nell'API, nel back-end mobile e anche in Funzioni di Azure.Azure App Service provides built-in authentication and authorization support, so you can sign in users and access data by writing minimal or no code in your web app, API, and mobile back end, and also Azure Functions. Questo articolo descrive in che modo il servizio app aiuta a semplificare l'autenticazione e l'autorizzazione per l'app.This article describes how App Service helps simplify authentication and authorization for your app.

Per consentire processi sicuri di autenticazione e autorizzazione, è necessario conoscere a fondo i concetti correlati alla sicurezza, tra cui federazione, crittografia, gestione dei token JSON Web (JWT), tipi di concessione e così via.Secure authentication and authorization requires deep understanding of security, including federation, encryption, JSON web tokens (JWT) management, grant types, and so on. Il servizio app fornisce queste utilità che consentono agli sviluppatori di dedicare più tempo e lavoro alla creazione di valore aziendale per il cliente.App Service provides these utilities so that you can spend more time and energy on providing business value to your customer.

Nota

L'uso delle funzionalità di autenticazione e autorizzazione del servizio app non è obbligatorio.You're not required to use App Service for authentication and authorization. Molti framework Web offrono funzionalità di sicurezza integrate che è possibile usare, se lo si preferisce.Many web frameworks are bundled with security features, and you can use them if you like. Se è necessaria più flessibilità di quella offerta dal servizio app, è anche possibile scrivere utilità personalizzate.If you need more flexibility than App Service provides, you can also write your own utilities.

Per informazioni specifiche per le app per dispositivi mobili native, vedere Autenticazione e autorizzazione per le app per dispositivi mobili in Servizio app di Azure.For information specific to native mobile apps, see User authentication and authorization for mobile apps with Azure App Service.

FunzionamentoHow it works

Il modulo di autenticazione e autorizzazione viene eseguito nello stesso ambiente sandbox del codice dell'applicazione.The authentication and authorization module runs in the same sandbox as your application code. Quando è abilitato, ogni richiesta HTTP in ingresso passa attraverso tale modulo prima di essere gestita dal codice dell'applicazione.When it's enabled, every incoming HTTP request passes through it before being handled by your application code.

Il modulo gestisce diversi aspetti dell'app:This module handles several things for your app:

  • Autentica gli utenti con il provider specificatoAuthenticates users with the specified provider
  • Convalida, archivia e aggiorna i tokenValidates, stores, and refreshes tokens
  • Gestisce la sessione autenticataManages the authenticated session
  • Inserisce le informazioni relative all'identità nelle intestazioni delle richiesteInjects identity information into request headers

Il modulo viene eseguito separatamente dal codice dell'applicazione e viene configurato usando le impostazioni dell'app.The module runs separately from your application code and is configured using app settings. Non sono necessari SDK, linguaggi specifici o modifiche al codice dell'applicazione.No SDKs, specific languages, or changes to your application code are required.

Attestazioni utenteUser claims

Per tutti i framework di linguaggio, il servizio app rende disponibili le attestazioni utente nel codice inserendole nelle intestazioni delle richieste.For all language frameworks, App Service makes the user's claims available to your code by injecting them into the request headers. Per le app ASP.NET 4.6, il servizio app popola ClaimsPrincipal.Current con le attestazioni dell'utente autenticato, quindi è possibile seguire il modello di codice .NET standard, incluso l'attributo [Authorize].For ASP.NET 4.6 apps, App Service populates ClaimsPrincipal.Current with the authenticated user's claims, so you can follow the standard .NET code pattern, including the [Authorize] attribute. Analogamente, per le app PHP, il servizio app popola la variabile _SERVER['REMOTE_USER'].Similarly, for PHP apps, App Service populates the _SERVER['REMOTE_USER'] variable.

Per Funzioni di Azure, ClaimsPrincipal.Current non è idratato per il codice .NET, ma è comunque possibile trovare le attestazioni utente nelle intestazioni delle richieste.For Azure Functions, ClaimsPrincipal.Current is not hydrated for .NET code, but you can still find the user claims in the request headers.

Per altre informazioni, vedere Accedere alle attestazioni utente.For more information, see Access user claims.

Archivio di tokenToken store

Il servizio app fornisce un archivio di token predefinito, ovvero un repository di token associati agli utenti delle app Web, delle API o delle app per dispositivi mobili native.App Service provides a built-in token store, which is a repository of tokens that are associated with the users of your web apps, APIs, or native mobile apps. Quando si abilita l'autenticazione con qualsiasi provider, questo archivio di token diventa immediatamente disponibile per l'app.When you enable authentication with any provider, this token store is immediately available to your app. Se il codice dell'applicazione deve accedere ai dati di questi provider per conto dell'utente, ad esempio:If your application code needs to access data from these providers on the user's behalf, such as:

  • pubblicare sul diario di Facebook dell'utente autenticatopost to the authenticated user's Facebook timeline
  • leggere i dati aziendali dell'utente dall'API Graph di Azure Active Directory o anche da Microsoft Graphread the user's corporate data from the Azure Active Directory Graph API or even the Microsoft Graph

I token ID, i token di accesso e i token di aggiornamento vengono memorizzati nella cache per la sessione autenticata e sono accessibili solo da parte degli utenti associati.The id tokens, access tokens, and refresh tokens cached for the authenticated session, and they're accessible only by the associated user.

In genere è necessario scrivere codice per raccogliere, archiviare e aggiornare questi token nell'applicazione.You typically must write code to collect, store, and refresh these tokens in your application. Con l'archivio di token, è sufficiente recuperare i token quando sono necessari e fare in modo che il servizio app li aggiorni quando non sono più validi.With the token store, you just retrieve the tokens when you need them and tell App Service to refresh them when they become invalid.

Se non è necessario usare i token nell'app, è possibile disabilitare l'archivio di token.If you don't need to work with tokens in your app, you can disable the token store.

Registrazione e tracciaLogging and tracing

Se si abilita la registrazione delle applicazioni, le tracce di autenticazione e autorizzazione possono essere visualizzate direttamente nei file di log.If you enable application logging, you will see authentication and authorization traces directly in your log files. Se viene visualizzato un errore di autenticazione non previsto, è possibile trovarne facilmente tutti i dettagli esaminando i log dell'applicazione esistenti.If you see an authentication error that you didn’t expect, you can conveniently find all the details by looking in your existing application logs. Se si abilita la traccia delle richieste non riuscite, è possibile vedere esattamente il ruolo che il modulo di autenticazione e autorizzazione ha avuto nella mancata riuscita della richiesta.If you enable failed request tracing, you can see exactly what role the authentication and authorization module may have played in a failed request. Nei log di traccia cercare i riferimenti a un modulo denominato EasyAuthModule_32/64.In the trace logs, look for references to a module named EasyAuthModule_32/64.

Provider di identitàIdentity providers

Il servizio app usa l'identità federata, in cui un provider di identità di terze parti gestisce le identità utente e il flusso di autenticazione.App Service uses federated identity, in which a third-party identity provider manages the user identities and authentication flow for you. Per impostazione predefinita sono disponibili cinque provider di identità:Five identity providers are available by default:

ProviderProvider Endpoint di accessoSign-in endpoint
Azure Active DirectoryAzure Active Directory /.auth/login/aad
Account MicrosoftMicrosoft Account /.auth/login/microsoftaccount
FacebookFacebook /.auth/login/facebook
GoogleGoogle /.auth/login/google
TwitterTwitter /.auth/login/twitter

Quando si abilitano l'autenticazione e l'autorizzazione con uno di questi provider, il relativo endpoint di accesso è disponibile per l'autenticazione utente e per la convalida dei token di autenticazione del provider.When you enable authentication and authorization with one of these providers, its sign-in endpoint is available for user authentication and for validation of authentication tokens from the provider. È possibile offrire facilmente agli utenti tutte le opzioni di accesso desiderate.You can provide your users with any number of these sign-in options with ease. È anche possibile integrare un altro provider di identità o una soluzione di gestione delle identità personalizzata.You can also integrate another identity provider or your own custom identity solution.

Flusso di autenticazioneAuthentication flow

Il flusso di autenticazione è uguale per tutti i provider, ma varia a in base al fatto che si desideri o meno accedere con l'SDK del provider:The authentication flow is the same for all providers, but differs depending on whether you want to log in with the provider's SDK:

  • Senza SDK del provider: l'applicazione delega l'accesso federato al servizio app.Without provider SDK: The application delegates federated sign-in to App Service. Ciò avviene, in genere, con le app basate su browser, che possono presentare all'utente la pagina di accesso del provider.This is typically the case with browser apps, which can present the provider's login page to the user. Il codice server gestisce il processo di accesso, quindi si parla anche di flusso diretto dal server oppure flusso server.The server code manages the sign-in process, so it is also called server-directed flow or server flow. Questo caso si applica alle app Web.This case applies to web apps. Si applica anche alle app native che consentono l'accesso agli utenti con l'SDK client di App per dispositivi mobili, perché l'SDK consente di aprire una visualizzazione Web per l'accesso degli utenti con l'autenticazione del servizio app.It also applies to native apps that sign users in using the Mobile Apps client SDK because the SDK opens a web view to sign users in with App Service authentication.
  • Con l'SDK del provider: l'applicazione consente l'accesso manuale dell'utente e quindi invia il token di autenticazione al servizio app per la convalida.With provider SDK: The application signs user in manually and then submits the authentication token to App Service for validation. Ciò avviene, in genere, con le app senza browser, che non possono presentare all'utente la pagina di accesso del provider.This is typically the case with browser-less apps, which can't present the provider's sign-in page to the user. Il codice dell'applicazione gestisce il processo di accesso, quindi si parla anche di flusso diretto dal client oppure flusso client.The application code manages the sign-in process, so it is also called client-directed flow or client flow. Questo caso si applica alle API REST, a Funzioni di Azure e ai client browser JavaScript, oltre che alle app Web che richiedono una maggiore flessibilità nel processo di accesso.This case applies to REST APIs, Azure Functions, and JavaScript browser clients, as well as web apps that need more flexibility in the sign-in process. Si applica anche alle app per dispositivi mobili native che consentono l'accesso degli utenti con l'SDK del provider.It also applies to native mobile apps that sign users in using the provider's SDK.

Nota

Le chiamate da un'app browser attendibile nel servizio app e le chiamate da un'altra API REST nel servizio app o in Funzioni di Azure possono essere autenticate tramite il flusso diretto dal server.Calls from a trusted browser app in App Service calls another REST API in App Service or Azure Functions can be authenticated using the server-directed flow. Per altre informazioni, vedere Autenticare gli utenti con Servizio app di Azure.For more information, see Authenticate users with Azure App Service.

La tabella seguente illustra i passaggi del flusso di autenticazione.The table below shows the steps of the authentication flow.

PassaggioStep Senza SDK del providerWithout provider SDK Con SDK del providerWith provider SDK
1. Consentire l'accesso utente1. Sign user in Reindirizza il client a /.auth/login/<provider>.Redirects client to /.auth/login/<provider>. Il codice client consente l'accesso utente direttamente con l'SDK del provider e riceve un token di autenticazione.Client code signs user in directly with provider's SDK and receives an authentication token. Per informazioni, vedere la documentazione del provider.For information, see the provider's documentation.
2. Eseguire le operazioni successive all'autenticazione2. Post-authentication Il provider reindirizza il client a /.auth/login/<provider>/callback.Provider redirects client to /.auth/login/<provider>/callback. Il codice client inserisce il token del provider in /.auth/login/<provider> per la convalida.Client code posts token from provider to /.auth/login/<provider> for validation.
3. Stabilire la sessione autenticata3. Establish authenticated session Il servizio app aggiunge il cookie autenticato alla risposta.App Service adds authenticated cookie to response. Il servizio app restituisce il proprio token di autenticazione al codice client.App Service returns its own authentication token to client code.
4. Fornire contenuto autenticato4. Serve authenticated content Il client include il cookie di autenticazione nelle richieste successive (gestite automaticamente dal browser).Client includes authentication cookie in subsequent requests (automatically handled by browser). Il codice client presenta il token di autenticazione nell'intestazione X-ZUMO-AUTH (gestita automaticamente dagli SDK client per app per dispositivi mobili).Client code presents authentication token in X-ZUMO-AUTH header (automatically handled by Mobile Apps client SDKs).

Per i browser client, il servizio app può indirizzare automaticamente tutti gli utenti non autenticati a /.auth/login/<provider>.For client browsers, App Service can automatically direct all unauthenticated users to /.auth/login/<provider>. È anche possibile presentare agli utenti uno o più collegamenti a /.auth/login/<provider> per consentire di accedere all'app con il provider desiderato.You can also present users with one or more /.auth/login/<provider> links to sign in to your app using their provider of choice.

Comportamento di autorizzazioneAuthorization behavior

Nel portale di Azure è possibile configurare diversi comportamenti per l'autorizzazione del servizio app.In the Azure portal, you can configure App Service authorization with a number of behaviors.

I titoli seguenti descrivono le opzioni.The following headings describe the options.

Consentire tutte le richieste (impostazione predefinita)Allow all requests (default)

L'autenticazione e l'autorizzazione non sono gestite dal servizio app (disattivate).Authentication and authorization is not managed by App Service (turned off).

Scegliere questa opzione se non sono necessarie l'autenticazione e l'autorizzazione oppure se si vuole scrivere codice di autenticazione e autorizzazione personalizzato.Choose this option if you don't need authentication and authorization, or if you want to write your own authentication and authorization code.

Consentire solo le richieste autenticateAllow only authenticated requests

L'opzione è Accedi con <provider>.The option is Log in with <provider>. Il servizio app reindirizza tutte le richieste anonime a /.auth/login/<provider> per il provider scelto.App Service redirects all anonymous requests to /.auth/login/<provider> for the provider you choose. Se la richiesta anonima proviene da un'app per dispositivi mobili nativa, verrà restituita la risposta HTTP 401 Unauthorized.If the anonymous request comes from a native mobile app, the returned response is an HTTP 401 Unauthorized.

Con questa opzione non è necessario scrivere codice di autenticazione nell'app.With this option, you don't need to write any authentication code in your app. È possibile gestire un livello di autorizzazione più specifico, ad esempio l'autorizzazione specifica dei ruoli, esaminando le attestazioni utente (vedere Accedere alle attestazioni utente).Finer authorization, such as role-specific authorization, can be handled by inspecting the user's claims (see Access user claims).

Consentire tutte le richieste, ma convalidare le richieste autenticateAllow all requests, but validate authenticated requests

L'opzione è Consenti richieste anonime.The option is Allow Anonymous requests. Questa opzione attiva l'autenticazione e l'autorizzazione nel servizio app, ma rimanda le decisioni riguardanti l'autorizzazione al codice dell'applicazione.This option turns on authentication and authorization in App Service, but defers authorization decisions to your application code. Per le richieste autenticate, il servizio app passa anche le informazioni di autenticazione nelle intestazioni HTTP.For authenticated requests, App Service also passes along authentication information in the HTTP headers.

Questa opzione offre maggiore flessibilità nella gestione delle richieste anonime.This option provides more flexibility in handling anonymous requests. È ad esempio possibile offrire diverse opzioni di accesso agli utenti.For example, it lets you present multiple sign-in options to your users. È tuttavia necessario scrivere codice.However, you have to write code.

Altre risorseMore resources

Esercitazione: Autenticare e autorizzare gli utenti end-to-end nel servizio app di Azure (Windows)Tutorial: Authenticate and authorize users end-to-end in Azure App Service (Windows)
Esercitazione: Autenticare e autorizzare gli utenti end-to-end nel servizio app di Azure per LinuxTutorial: Authenticate and authorize users end-to-end in Azure App Service for Linux
Personalizzare l'autenticazione e l'autorizzazione nel servizio appCustomize authentication and authorization in App Service

Guide alle procedure specifiche del provider:Provider-specific how-to guides: