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

Informazioni sull’autenticazione / autorizzazione di servizio appWhat is App Service Authentication / Authorization?

L'autenticazione/autorizzazione del servizio app è una funzionalità che consente all'applicazione di eseguire la procedura di accesso degli utenti in modo che non sia necessario modificare il codice nel back-end dell'app.App Service Authentication / Authorization is a feature that provides a way for your application to sign in users so that you don't have to change code on the app backend. Fornisce un modo semplice per proteggere l'applicazione e utilizzare dati per-utente.It provides an easy way to protect your application and work with per-user data.

Il servizio app usa identità federate, in cui un provider di identità di terze parti archivia gli account e autentica gli utenti.App Service uses federated identity, in which a third-party identity provider stores accounts and authenticates users. L'applicazione si basa sulle informazioni di identità del provider in modo da non doverle archiviare.The application relies on the provider's identity information so that the app doesn't have to store that information itself. Il servizio app supporta cinque provider di identità predefiniti: Azure Active Directory, Facebook, Google, Account Microsoft e Twitter.App Service supports five identity providers out of the box: Azure Active Directory, Facebook, Google, Microsoft Account, and Twitter. L'app può usare un numero qualsiasi di questi provider di identità per offrire agli utenti diverse opzioni di accesso.Your app can use any number of these identity providers to provide your users with options for how they sign in. Per espandere il supporto predefinito, è possibile integrare un altro provider di identità o la soluzione di gestione delle identità personalizzata.To expand the built-in support, you can integrate another identity provider or your own custom identity solution.

Se si desidera iniziare subito, vedere una delle esercitazioni seguenti Aggiungere l'autenticazione all'app iOS (o Android, Windows, Xamarin.iOS, Xamarin.Android, Xamarin.Forms, o Cordova).If you want to get started right away, see one of the following tutorials Add authentication to your iOS app (or Android, Windows, Xamarin.iOS, Xamarin.Android, Xamarin.Forms, or Cordova).

Funzionamento dell'autenticazione nel servizio appHow authentication works in App Service

Per eseguire l'autenticazione con uno dei provider di identità, è prima necessario configurare il provider di identità per l'applicazione.In order to authenticate by using one of the identity providers, you first need to configure the identity provider to know about your application. Il provider di identità fornirà quindi gli ID e i segreti da includere nel servizio app.The identity provider will then provide IDs and secrets that you provide to App Service. Questo completa la relazione di trust e consente al servizio app di convalidare le asserzioni utente dal provider di identità, ad esempio i token di autenticazione.This completes the trust relationship so that App Service can validate user assertions, such as authentication tokens, from the identity provider.

Per consentire a un utente di accedere tramite uno di questi provider, è necessario che l'utente sia reindirizzato a un apposito endpoint per tale provider.To sign in a user by using one of these providers, the user must be redirected to an endpoint that signs in users for that provider. Se i clienti usano un Web browser, è possibile configurare il servizio app in modo che indirizzi automaticamente tutti gli utenti non autenticati all'endpoint che esegue la procedura di accesso degli utenti.If customers are using a web browser, you can have App Service automatically direct all unauthenticated users to the endpoint that signs in users. In caso contrario, sarà necessario indirizzare i clienti a {your App Service base URL}/.auth/login/<provider>, dove <provider> è uno dei valori seguenti: aad, facebook, google, microsoft o twitter.Otherwise, you will need to direct your customers to {your App Service base URL}/.auth/login/<provider>, where <provider> is one of the following values: aad, facebook, google, microsoft, or twitter. Gli scenari relativi alle API e ai dispositivi mobili sono illustrati nelle sezioni successive di questo articolo.Mobile and API scenarios are explained in sections later in this article.

Gli utenti che interagiscono con l'applicazione tramite un Web browser avranno un cookie impostato in modo da rimanere autenticati mentre esplorano l'applicazione.Users who interact with your application through a web browser will have a cookie set so that they can remain authenticated as they browse your application. Per altri tipi di client, ad esempio quelli per dispositivi mobili, verrà rilasciato un token Web JSON (JWT), che dovrà essere presentato nell'intestazione X-ZUMO-AUTH .For other client types, such as mobile, a JSON web token (JWT), which should be presented in the X-ZUMO-AUTH header, will be issued to the client. Gli SDK client delle app per dispositivi mobili gestiranno questa operazione automaticamente.The Mobile Apps client SDKs will handle this for you. In alternativa, un token di identità di Azure Active Directory o un token di accesso può essere incluso direttamente nell'intestazione Authorization come token di connessione.Alternatively, an Azure Active Directory identity token or access token may be directly included in the Authorization header as a bearer token.

Il servizio app convaliderà qualsiasi cookie o token rilasciato dall'applicazione per l'autenticazione degli utenti.App Service will validate any cookie or token that your application issues to authenticate users. Per limitare l'accesso all'applicazione, vedere la sezione sul funzionamento dell'autorizzazione più avanti in questo articolo.To restrict who can access your application, see the Authorization section later in this article.

Autenticazione per dispositivi mobili con un SDK del providerMobile authentication with a provider SDK

Dopo aver completato tutte le configurazioni nel back-end, è possibile modificare i client per dispositivi mobili per l'accesso con il servizio app.After everything is configured on the backend, you can modify mobile clients to sign in with App Service. Di seguito, sono disponibili due approcci:There are two approaches here:

  • Uso di un SDK pubblicato da un determinato provider di identità per stabilire l'identità e quindi accedere al servizio app.Use an SDK that a given identity provider publishes to establish identity and then gain access to App Service.
  • Uso di una singola riga di codice per consentire all'SDK client delle app per dispositivi mobili di eseguire la procedura di accesso degli utenti.Use a single line of code so that the Mobile Apps client SDK can sign in users.

Suggerimento

La maggior parte delle applicazioni deve usare un SDK del provider per offrire agli utenti un'esperienza di accesso più coerente e per usufruire del supporto dell'aggiornamento e di altri vantaggi specificati dal provider.Most applications should use a provider SDK to get a more consistent experience when users sign in, to use refresh support, and to get other benefits that the provider specifies.

Quando si usa un SDK del provider, gli utenti possono accedere a un'esperienza più integrata con il sistema operativo in cui viene eseguita l'app.When you use a provider SDK, users can sign in to an experience that integrates more tightly with the operating system that the app is running on. Inoltre, offre un token del provider e alcune informazioni utente sul client, che rende molto più semplice utilizzare le API Graph e personalizzare l'esperienza utente.This also gives you a provider token and some user information on the client, which makes it much easier to consume graph APIs and customize the user experience. In blog e forum si trova talvolta la definizione "flusso client" o "flusso verso il client", perché il codice sul client esegue la procedura di accesso degli utenti e il codice client ha accesso a un token del provider.Occasionally on blogs and forums, you will see this referred to as the "client flow" or "client-directed flow" because code on the client signs in users, and the client code has access to a provider token.

Dopo che è stato ottenuto un token del provider, questo deve essere inviato al servizio app per la convalida.After a provider token is obtained, it needs to be sent to App Service for validation. Dopo che il servizio app ha convalidato il token, crea un nuovo token del servizio app che viene restituito al client.After App Service validates the token, App Service creates a new App Service token that is returned to the client. L'SDK client delle app per dispositivi mobili include metodi helper per la gestione di questo scambio e l'associazione automatica del token a tutte le richieste per il back-end dell'applicazione.The Mobile Apps client SDK has helper methods to manage this exchange and automatically attach the token to all requests to the application backend. Facoltativamente, gli sviluppatori possono anche mantenere un riferimento al token del provider.Developers can also keep a reference to the provider token if they so choose.

Autenticazione per dispositivi mobili senza un SDK del providerMobile authentication without a provider SDK

Se non si vuole configurare un SDK del provider, è possibile consentire alla funzionalità App per dispositivi mobili del servizio app di Azure di eseguire la procedura di accesso per conto dell'utente.If you do not want to set up a provider SDK, you can allow the Mobile Apps feature of Azure App Service to sign in for you. L'SDK client delle app per dispositivi mobili aprirà una visualizzazione Web per il provider scelto e completerà l'accesso dell'utente.The Mobile Apps client SDK will open a web view to the provider of your choosing and sign in the user. In blog e forum si trova talvolta la definizione "flusso server" o "flusso verso il server", perché il server gestisce il processo di accesso degli utenti e l'SDK client non riceve mai il token del provider.Occasionally on blogs and forums, you will see this referred to as the "server flow" or "server-directed flow" because the server manages the process that signs in users, and the client SDK never receives the provider token.

Il codice necessario per avviare questo flusso è incluso nell'esercitazione sull'autenticazione per ogni piattaforma.Code to start this flow is included in the authentication tutorial for each platform. Alla fine del flusso, l'SDK del client ha un token del servizio app che viene associato automaticamente a tutte le richieste per il back-end dell'applicazione.At the end of the flow, the client SDK has an App Service token, and the token is automatically attached to all requests to the application backend.

Autenticazione da servizio a servizioService-to-service authentication

Pur potendo concedere agli utenti l'accesso all'applicazione, è anche possibile considerare attendibile un'altra applicazione per la chiamata all'API.Although you can give users access to your application, you can also trust another application to call your own API. È ad esempio possibile che un'app Web chiami un'API in un'altra app Web.For example, you could have one web app call an API in another web app. In questo scenario, per ottenere un token si usano le credenziali di un account del servizio invece di credenziali utente.In this scenario, you use credentials for a service account instead of user credentials to get a token. Un account del servizio è noto anche come entità servizio in Azure Active Directory, mentre l'autenticazione che usa un account di questo tipo è nota anche come scenario da servizio a servizio.A service account is also known as a service principal in Azure Active Directory parlance, and authentication that uses such an account is also known as a service-to-service scenario.

Importante

Dato che le app per dispositivi mobili vengono eseguite su dispositivi del cliente, tali applicazioni non sono considerate applicazioni attendibili e non devono usare un flusso dell'entità servizio.Because mobile apps run on customer devices, mobile applications do not count as trusted applications and should not use a service principal flow. È invece necessario usare un flusso utente descritto sopra.Instead, they should use a user flow that was detailed earlier.

Per gli scenari da servizio a servizio, il servizio app può proteggere l'applicazione con Azure Active Directory.For service-to-service scenarios, App Service can protect your application by using Azure Active Directory. L'applicazione chiamante deve solo fornire un token di autorizzazione dell'entità servizio di Azure Active Directory ottenuto fornendo l'ID client e il segreto client da Azure Active Directory.The calling application just needs to provide an Azure Active Directory service principal authorization token that is obtained by providing the client ID and client secret from Azure Active Directory. Un esempio di questo scenario che usa le app per le API ASP.NET è illustrato nell'esercitazione [Autenticazione dell'entità servizio per app per le API][apia-service].An example of this scenario that uses ASP.NET API apps is explained by the tutorial, [Service principal authentication for API Apps][apia-service].

Per gestire uno scenario da servizio a servizio con l'autenticazione del servizio app, è possibile usare i certificati client o l'autenticazione di base.If you want to use App Service authentication to handle a service-to-service scenario, you can use client certificates or basic authentication. Per informazioni sui certificati client in Azure, vedere Come configurare l'autenticazione reciproca TLS per un'app Web.For information about client certificates in Azure, see How To Configure TLS Mutual Authentication for Web Apps. Per informazioni sull'autenticazione di base in ASP.NET, vedere il blog sui filtri di autenticazione nell'API Web 2 ASP.NET.For information about basic authentication in ASP.NET, see Authentication Filters in ASP.NET Web API 2.

L'autenticazione dell'account del servizio da un'app per la logica del servizio app a un'app per le API è un caso speciale ed è illustrata nell'articolo Uso dell'API personalizzata ospitata nel servizio app con App per la logica.Service account authentication from an App Service logic app to an API app is a special case that is detailed in Using your custom API hosted on App Service with Logic apps.

Funzionamento dell'autorizzazione nel servizio appHow authorization works in App Service

Si ha il controllo completo sulle richieste che possono accedere all'applicazione.You have full control over the requests that can access your application. Autenticazione servizio app/L'autorizzazione può essere configurata con uno qualsiasi dei comportamenti seguenti:App Service Authentication / Authorization can be configured with any of the following behaviors:

  • Consentire solo alle richieste autenticate di raggiungere l'applicazione.Allow only authenticated requests to reach your application.

    Se un browser invia una richiesta anonima, il servizio app la reindirizzerà a una pagina del provider di identità scelto per consentire l'accesso degli utenti.If a browser sends an anonymous request, App Service will redirect to a page for the identity provider that you choose so that users can sign in. Se la richiesta proviene da un dispositivo mobile, verrà restituita una risposta HTTP 401 Non autorizzato.If the request comes from a mobile device, the returned response is an HTTP 401 Unauthorized response.

    Con questa opzione non è necessario scrivere alcun codice di autenticazione nell'app.With this option, you don't need to write any authentication code at all in your app. Se è necessaria un'autorizzazione più specifica, le informazioni sull'utente sono disponibili nel codice.If you need finer authorization, information about the user is available to your code.

  • Consentire alle richieste di raggiungere l'applicazione, ma convalidare le richieste autenticate e passare le informazioni di autenticazione nelle intestazioni HTTP.Allow all requests to reach your application, but validate authenticated requests, and pass along authentication information in the HTTP headers.

    Questa opzione rinvia le decisioni di autorizzazione al codice dell'applicazione.This option defers authorization decisions to your application code. Offre maggiore flessibilità nella gestione delle richieste anonime, ma è necessario scrivere codice.It provides more flexibility in handling anonymous requests, but you have to write code.

  • Consentire a tutte le richieste di raggiungere l'applicazione e non eseguire alcuna azione sulle informazioni di autenticazione nelle richieste.Allow all requests to reach your application, and take no action on authentication information in the requests.

    In questo caso la funzionalità Autenticazione/Autorizzazione è disabilitata.In this case, the Authentication / Authorization feature is off. Le attività di autenticazione e autorizzazione dipendono interamente dal codice dell'applicazione.The tasks of authentication and authorization are entirely up to your application code.

I comportamenti precedenti sono controllati dall'opzione Azione da eseguire quando la richiesta non è autenticata nel portale di Azure.The previous behaviors are controlled by the Action to take when request is not authenticated option in the Azure portal. Se si sceglie Accedi con nome provider *, tutte le richieste devono essere autenticate.If you choose **Log in with *provider name **, all requests have to be authenticated. Consenti richiesta (nessuna azione)** rinvia la decisione di autorizzazione al codice, ma fornisce comunque informazioni di autenticazione.Allow request (no action) defers the authorization decision to your code, but it still provides authentication information. Se si vuole che il codice gestisca tutti gli elementi, è possibile disabilitare la funzionalità Autenticazione/Autorizzazione.If you want to have your code handle everything, you can disable the Authentication / Authorization feature.

Utilizzo delle identità utente nell'applicazioneWorking with user identities in your application

Il servizio app passa alcune informazioni utente all'applicazione usando intestazioni speciali.App Service passes some user information to your application by using special headers. Le richieste esterne non consentono queste intestazioni e saranno presenti solo se impostate dall'autenticazione/autorizzazione del servizio app.External requests prohibit these headers and will only be present if set by App Service Authentication / Authorization. Ecco alcune intestazioni di esempio:Some example headers include:

  • X-MS-CLIENT-PRINCIPAL-NAMEX-MS-CLIENT-PRINCIPAL-NAME
  • X-MS-CLIENT-PRINCIPAL-IDX-MS-CLIENT-PRINCIPAL-ID
  • X-MS-TOKEN-FACEBOOK-ACCESS-TOKENX-MS-TOKEN-FACEBOOK-ACCESS-TOKEN
  • X-MS-TOKEN-FACEBOOK-EXPIRES-ONX-MS-TOKEN-FACEBOOK-EXPIRES-ON

Il codice scritto in qualsiasi linguaggio o framework può ottenere le informazioni necessarie da queste intestazioni.Code that is written in any language or framework can get the information that it needs from these headers. Per le app ASP.NET 4.6, i valori appropriati per ClaimsPrincipal vengono impostati automaticamente.For ASP.NET 4.6 apps, the ClaimsPrincipal is automatically set with the appropriate values.

L'applicazione può anche ottenere altri dettagli sull'utente tramite una richiesta HTTP GET sull'endpoint /.auth/me dell'applicazione.Your application can also obtain additional user details through an HTTP GET on the /.auth/me endpoint of your application. Un token valido incluso nella richiesta restituirà un payload JSON con informazioni dettagliate sul provider in uso, il token del provider sottostante e altre informazioni utente.A valid token that's included with the request will return a JSON payload with details about the provider that's being used, the underlying provider token, and some other user information. Gli SDK server delle app per dispositivi mobili forniscono metodi di supporto per l'uso di questi dati.The Mobile Apps server SDKs provide helper methods to work with this data. Per altre informazioni, vedere Come usare Node.js SDK per le app per dispositivi mobili di Azure e Usare l'SDK del server back-end .NET per le app per dispositivi mobili di Azure.For more information, see How to use the Azure Mobile Apps Node.js SDK, and Work with the .NET backend server SDK for Azure Mobile Apps.

Documentazione e risorse aggiuntiveDocumentation and additional resources

Provider di identitàIdentity providers

Le esercitazioni seguenti illustrano come configurare il servizio app per usare diversi provider di autenticazione:The following tutorials show how to configure App Service to use different authentication providers:

Per usare un sistema di gestione delle identità diverso da quelli qui forniti, è anche possibile sfruttare l'anteprima del supporto per l'autenticazione personalizzata dell'SDK del server .NET per app per dispositivi mobili, che può essere usato in app Web, app per dispositivi mobili o app per le API.If you want to use an identity system other than the ones provided here, you can also use the preview custom authentication support in the Mobile Apps .NET server SDK, which can be used in web apps, mobile apps, or API apps.

Applicazioni per dispositivi mobiliMobile applications

Le esercitazioni seguenti illustrano come aggiungere l'autenticazione ai client per dispositivi mobili usando il flusso verso il server:The following tutorials show how to add authentication to your mobile clients by using the server-directed flow:

Se si vuole usare il flusso verso il client per Azure Active Directory, consultare le risorse seguenti:Use the following resources if you want to use the client-directed flow for Azure Active Directory:

Se si vuole usare il flusso verso il client per Facebook, vedere le risorse seguenti:Use the following resources if you want to use the client-directed flow for Facebook:

Se si vuole usare il flusso verso il client per Twitter, vedere le risorse seguenti:Use the following resources if you want to use the client-directed flow for Twitter:

Se si vuole usare il flusso verso il client per Google, vedere le risorse seguenti:Use the following resources if you want to use the client-directed flow for Google: