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

App Azure servizio fornisce funzionalità di autenticazione e autorizzazione predefinite (talvolta denominate "Easy auth"), in modo che sia possibile accedere agli utenti e accedere ai dati scrivendo codice minimo o senza codice nell'app Web, API RESTful e back-end per dispositivi mobili e anche funzioni di Azure.Azure App Service provides built-in authentication and authorization capabilities (sometimes referred to as "Easy Auth"), so you can sign in users and access data by writing minimal or no code in your web app, RESTful 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.

Perché usare l'autenticazione predefinita?Why use the built-in authentication?

Non è necessario usare questa funzionalità per l'autenticazione e l'autorizzazione.You're not required to use this feature for authentication and authorization. È possibile usare le funzionalità di sicurezza in bundle nel framework Web preferito oppure è possibile scrivere utilità personalizzate.You can use the bundled security features in your web framework of choice, or you can write your own utilities. Tuttavia, sarà necessario assicurarsi che la soluzione rimanga aggiornata con gli aggiornamenti più recenti relativi a sicurezza, protocollo e browser.However, you will need to ensure that your solution stays up to date with the latest security, protocol, and browser updates.

L'implementazione di una soluzione protetta per l'autenticazione (utenti di accesso) e l'autorizzazione (che fornisce l'accesso ai dati protetti) possono richiedere un notevole sforzo.Implementing a secure solution for authentication (signing-in users) and authorization (providing access to secure data) can take significant effort. È necessario assicurarsi di seguire gli standard e le procedure consigliate per il settore e di aggiornare l'implementazione.You must make sure to follow industry best practices and standards, and keep your implementation up to date. La funzionalità di autenticazione predefinita per il servizio app e funzioni di Azure consente di risparmiare tempo e impegno grazie all'autenticazione predefinita con i provider di identità federati, consentendo di concentrarsi sul resto dell'applicazione.The built-in authentication feature for App Service and Azure Functions can save you time and effort by providing out-of-the-box authentication with federated identity providers, allowing you to focus on the rest of your application.

  • App Azure servizio permette di integrare un'ampia gamma di funzionalità di autenticazione nell'app Web o nell'API senza implementarle autonomamente.Azure App Service allows you to integrate a variety of auth capabilities into your web app or API without implementing them yourself.
  • Viene creato direttamente nella piattaforma e non richiede alcun linguaggio, SDK, esperienza di sicurezza o anche codice da usare.It’s built directly into the platform and doesn’t require any particular language, SDK, security expertise, or even any code to utilize.
  • È possibile eseguire l'integrazione con più provider di accesso.You can integrate with multiple login providers. Ad esempio, Azure AD, Facebook, Google, Twitter.For example, Azure AD, Facebook, Google, Twitter.

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 i seguenti provider di identità:The following identity providers are available by default:

ProviderProvider Endpoint di accessoSign-in endpoint Guida How-ToHow-To guidance
Piattaforma di identità MicrosoftMicrosoft Identity Platform /.auth/login/aad Accesso al servizio app Microsoft Identity PlatformApp Service Microsoft Identity Platform login
FacebookFacebook /.auth/login/facebook Accesso a Facebook del servizio appApp Service Facebook login
GoogleGoogle /.auth/login/google Account di accesso di Google per il servizio appApp Service Google login
TwitterTwitter /.auth/login/twitter Accesso a Twitter del servizio appApp Service Twitter login
Qualsiasi provider OpenID Connect (anteprima)Any OpenID Connect provider (preview) /.auth/login/<providerName> Accesso OpenID Connect del servizio appApp Service OpenID Connect login

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 fornire agli utenti un numero qualsiasi di queste opzioni di accesso.You can provide your users with any number of these sign-in options.

Considerazioni sull'uso dell'autenticazione incorporataConsiderations for using built-in authentication

Se si abilita questa funzionalità, tutte le richieste all'applicazione verranno reindirizzate automaticamente a HTTPS, indipendentemente dall'impostazione di configurazione del servizio app per applicare HTTPS.Enabling this feature will cause all requests to your application to be automatically redirected to HTTPS, regardless of the App Service configuration setting to enforce HTTPS. È possibile disabilitare questa impostazione con l'  requireHttps impostazione nella configurazione V2.You can disable this with the  requireHttps setting in the V2 configuration. Tuttavia, si consiglia di attenersi a HTTPS ed è necessario assicurarsi che non venga mai trasmesso alcun token di sicurezza su connessioni HTTP non protette.However, we do recommend sticking with HTTPS, and you should ensure no security tokens ever get transmitted over non-secure HTTP connections.

Il servizio app può essere usato per l'autenticazione con o senza limitare l'accesso al contenuto e alle API del sito.App Service can be used for authentication with or without restricting access to your site content and APIs. Per limitare l'accesso alle app solo agli utenti autenticati, impostare l' azione da eseguire quando la richiesta non viene autenticata per accedere con uno dei provider di identità configurati.To restrict app access only to authenticated users, set Action to take when request is not authenticated to  log in with one of the configured identity providers. Per eseguire l'autenticazione ma non limitare l'accesso, impostare l' azione da eseguire quando la richiesta non è autenticata su "Consenti richieste anonime (nessuna azione)".To authenticate but not restrict access, set Action to take when request is not authenticated to "Allow anonymous requests (no action)."

Nota

È necessario assegnare a ogni app la registrazione delle proprie autorizzazioni e il suo consenso.You should give each app registration its own permission and consent. Evitare la condivisione delle autorizzazioni tra ambienti usando registrazioni di app separate per slot di distribuzione distinti.Avoid permission sharing between environments by using separate app registrations for separate deployment slots. Quando si esegue il test di nuovo codice, questa procedura consente di evitare problemi che influiscono sull'app di produzione.When testing new code, this practice can help prevent issues from affecting the production app.

FunzionamentoHow it works

Architettura delle funzionalità in Windows (distribuzione non contenitore)Feature architecture on Windows (non-container deployment))

Architettura delle funzionalità in Linux e contenitoriFeature architecture on Linux and containers

Flusso di autenticazioneAuthentication flow

Comportamento di autorizzazioneAuthorization behavior

Attestazioni dell'utente e dell'applicazioneUser and Application claims

Archivio di tokenToken store

Registrazione e tracciaLogging and tracing

Architettura delle funzionalità in Windows (distribuzione non contenitore)Feature architecture on Windows (non-container deployment)

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.

Diagramma dell'architettura che mostra le richieste intercettate da un processo nella sandbox del sito che interagisce con i provider di identità prima di consentire il traffico verso il sito distribuito

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.

Architettura delle funzionalità in Linux e contenitoriFeature architecture on Linux and containers

Il modulo di autenticazione e autorizzazione viene eseguito in un contenitore separato, isolato dal codice dell'applicazione.The authentication and authorization module runs in a separate container, isolated from your application code. L'uso di ciò che è noto come modello Ambassador, interagisce con il traffico in ingresso per eseguire funzionalità simili a quelle di Windows.Using what's known as the Ambassador pattern, it interacts with the incoming traffic to perform similar functionality as on Windows. Poiché non viene eseguito in-process, non è possibile l'integrazione diretta con Framework di linguaggio specifici. Tuttavia, le informazioni rilevanti richieste dall'app vengono passate usando le intestazioni della richiesta, come illustrato di seguito.Because it does not run in-process, no direct integration with specific language frameworks is possible; however, the relevant information that your app needs is passed through using request headers as explained below.

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 sign 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 basate su browser.This case applies to browser 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 degli utenti al provider e quindi invia il token di autenticazione al servizio app per la convalida.With provider SDK: The application signs users in to the provider 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 basate su browser che richiedono una maggiore flessibilità nel processo di accesso.This case applies to REST APIs, Azure Functions, and JavaScript browser clients, as well as browser 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.

Le chiamate da un'app browser attendibile nel servizio app a un'altra API REST nel servizio app o in funzioni di Azure possono essere autenticate usando il flusso indirizzato al server.Calls from a trusted browser app in App Service to another REST API in App Service or Azure Functions can be authenticated using the server-directed flow. Per altre informazioni, vedere Personalizzare l'autenticazione e l'autorizzazione in Servizio app di Azure.For more information, see Customize authentication and authorization in 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. 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. post-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 una 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. gestire il 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 il servizio app con diversi comportamenti quando la richiesta in ingresso non è autenticata.In the Azure portal, you can configure App Service with a number of behaviors when incoming request is not authenticated. I titoli seguenti descrivono le opzioni.The following headings describe the options.

Consenti richieste non autenticateAllow unauthenticated requests

Questa opzione rinvia l'autorizzazione del traffico non autenticato al codice dell'applicazione.This option defers authorization of unauthenticated traffic 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 consente di presentare più opzioni di accesso agli utenti.For example, it lets you present multiple sign-in providers to your users. Tuttavia richiede di scrivere codice.However, you must write code.

Richiedi autenticazioneRequire authentication

Questa opzione rifiuterà il traffico non autenticato per l'applicazione.This option will reject any unauthenticated traffic to your application. Questo rifiuto può essere un'azione di reindirizzamento a uno dei provider di identità configurati.This rejection can be a redirect action to one of the configured identity providers. In questi casi, un client browser viene reindirizzato a /.auth/login/<provider> per il provider scelto.In these cases, a browser client is redirected 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. È anche possibile configurare il rifiuto come HTTP 401 Unauthorized o HTTP 403 Forbidden per tutte le richieste.You can also configure the rejection to be an HTTP 401 Unauthorized or HTTP 403 Forbidden for all requests.

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).

Attenzione

La limitazione dell'accesso in questo modo si applica a tutte le chiamate all'app, che potrebbero non essere desiderate per le app che vogliono un home page disponibile pubblicamente, come in molte applicazioni a singola pagina.Restricting access in this way applies to all calls to your app, which may not be desirable for apps wanting a publicly available home page, as in many single-page applications.

Nota

Per impostazione predefinita, qualsiasi utente nel tenant di Azure AD può richiedere un token per l'applicazione da Azure AD.By default, any user in your Azure AD tenant can request a token for your application from Azure AD. È possibile configurare l'applicazione in Azure ad se si vuole limitare l'accesso all'app a un set di utenti definito.You can configure the application in Azure AD if you want to restrict access to your app to a defined set of users.

Attestazioni dell'utente e dell'applicazioneUser and Application claims

Per tutti i Framework di linguaggio, il servizio app rende disponibili al codice le attestazioni nel token in ingresso, sia che si tratti di un utente finale autenticato o di un'applicazione client, inserendole nelle intestazioni della richiesta.For all language frameworks, App Service makes the claims in the incoming token (whether that be from an authenticated end user or a client application) 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 le app Java, le attestazioni sono accessibili dal servlet Tomcat.For Java apps, the claims are accessible from the Tomcat servlet.

Per funzioni di Azure, ClaimsPrincipal.Current non viene popolato per il codice .NET, ma è comunque possibile trovare le attestazioni utente nelle intestazioni della richiesta o ottenere l' ClaimsPrincipal oggetto dal contesto della richiesta o anche tramite un parametro di associazione.For Azure Functions, ClaimsPrincipal.Current is not populated for .NET code, but you can still find the user claims in the request headers, or get the ClaimsPrincipal object from the request context or even through a binding parameter. Per ulteriori informazioni, vedere utilizzo delle identità client .See working with client identities for more information.

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

Al momento, ASP.NET Core attualmente non supporta il popolamento dell'utente corrente con la funzionalità di autenticazione/autorizzazione.At this time, ASP.NET Core does not currently support populating the current user with the Authentication/Authorization feature. Tuttavia, per colmare questo gap sono disponibili componenti middleware open source .However, some 3rd party, open source middleware components do exist to help fill this gap.

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 usando l'API Microsoft Graphread the user's corporate data using the Microsoft Graph API

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.

I token ID, i token di accesso e i token di aggiornamento vengono memorizzati nella cache per la sessione autenticata ed è possibile accedervi solo dall'utente associato.The ID tokens, access tokens, and refresh tokens are cached for the authenticated session, and they're accessible only by the associated user.

Se non è necessario usare i token nell'app, è possibile disabilitare l'archivio di token nella pagina di autenticazione/autorizzazione dell'app.If you don't need to work with tokens in your app, you can disable the token store in your app's Authentication / Authorization page.

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 trovare facilmente tutti i dettagli esaminando i log delle applicazioni 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.

Altre risorseMore resources

Esempi:Samples: