Guida introduttiva Azure Cordova di Active DirectoryAzure AD Cordova getting started

Nota

Questo articolo fa parte della Guida per gli sviluppatori di Azure Active Directory.This article is part of the Azure Active Directory developer's guide.

È possibile usare Apache Cordova per sviluppare applicazioni HTML5/JavaScript che possono essere eseguite su dispositivi mobili come applicazioni native complete.You can use Apache Cordova to develop HTML5/JavaScript applications that can run on mobile devices as full-fledged native applications. Con Azure Active Directory (Azure AD) è possibile aggiungere funzionalità di autenticazione di livello aziendale alle applicazioni Cordova.With Azure Active Directory (Azure AD), you can add enterprise-grade authentication capabilities to your Cordova applications.

Un plug-in Cordova esegue il wrapping di SDK nativi di Azure AD in iOS, Android, Windows Store e Windows Phone.A Cordova plug-in wraps Azure AD native SDKs on iOS, Android, Windows Store, and Windows Phone. Usando questo plug-in è possibile migliorare l'applicazione, in modo da supportare l'accesso con gli account Active Directory di Windows Server degli utenti, ottenere l'accesso alle API di Office 365 e Azure e contribuire alla protezione delle chiamate all'API Web personalizzata.By using that plug-in, you can enhance your application to support sign-in with your users' Windows Server Active Directory accounts, gain access to Office 365 and Azure APIs, and even help protect calls to your own custom web API.

In questa esercitazione viene usato il plug-in Apache Cordova per Active Directory Authentication Library (ADAL) per migliorare una semplice app aggiungendo le funzionalità seguenti:In this tutorial, we'll use the Apache Cordova plug-in for Active Directory Authentication Library (ADAL) to improve a simple app by adding the following features:

  • Sono sufficienti poche righe di codice per autenticare un utente e ottenere un token.With just a few lines of code, authenticate a user and obtain a token.
  • Usare il token per richiamare l'API Graph per eseguire query sulla directory e visualizzare i risultati.Use that token to invoke the Graph API to query that directory and display the results.
  • Usare la cache dei token di ADAL per ridurre al minimo le richieste di autenticazione per l'utente.Use the ADAL token cache to minimize authentication prompts for the user.

Per apportare i miglioramenti, è necessario eseguire queste operazioni:To make those improvements, you need to:

  1. Registrare un'applicazione con Azure AD.Register an application with Azure AD.
  2. Aggiungere codice all'app per la richiesta di token.Add code to your app to request tokens.
  3. Aggiungere codice per usare il token per eseguire query sull'API Graph e visualizzare i risultati.Add code to use the token for querying the Graph API and display results.
  4. Creare il progetto di distribuzione di Cordova con tutte le piattaforme di destinazione desiderate e il plug-in ADAL per Cordova, quindi testare la soluzione negli emulatori.Create the Cordova deployment project with all the platforms you want to target, add the Cordova ADAL plug-in, and test the solution in emulators.

PrerequisitiPrerequisites

Per completare questa esercitazione, sono necessari:To complete this tutorial, you need:

  • Tenant di Azure AD nel quale è disponibile un account con diritti per lo sviluppo di app.An Azure AD tenant where you have an account with app development rights.
  • Ambiente di sviluppo configurato per l'uso di Apache Cordova.A development environment that's configured to use Apache Cordova.

Se entrambi questi elementi sono già configurati, andare direttamente al passaggio 1.If you have both already set up, proceed directly to step 1.

Se non è disponibile un tenant di Azure AD, vedere le istruzioni su come ottenerne uno.If you don't have an Azure AD tenant, use the instructions on how to get one.

Se nel computer in uso non è configurato Apache Cordova, installare quanto segue:If you don't have Apache Cordova set up on your machine, install the following:

Le installazioni precedenti dovrebbero funzionare sia su PC che su Mac.The preceding installations should work both on the PC and on the Mac.

Ogni piattaforma di destinazione ha prerequisiti diversi:Each target platform has different prerequisites:

  • Per compilare ed eseguire un'app per Windows Tablet/PC o Windows Phone:To build and run an app for Windows Tablet/PC or Windows Phone:

  • Per compilare ed eseguire un'app per iOS:To build and run an app for iOS:

    • Installare Xcode 6.x o versione successiva.Install Xcode 6.x or later. Scaricarlo dal sito Apple Developer o da Mac App Store.Download it from the Apple Developer site or the Mac App Store.
    • Installare ios-sim.Install ios-sim. È possibile usarlo per avviare le app iOS nel simulatore iOS dalla riga di comando.You can use it to start iOS apps in iOS Simulator from the command line. È possibile installarlo con facilità tramite il terminale: npm install -g ios-sim.(You can easily install it via the terminal: npm install -g ios-sim.)
  • Per compilare ed eseguire un'app per Android:To build and run an app for Android:

    • Installare Java Development Kit (JDK) 7 o versione successiva.Install Java Development Kit (JDK) 7 or later. Assicurarsi che la variabile di ambiente JAVA_HOME sia impostata correttamente in base al percorso di installazione di JDK, ad esempio, C:\Programmi\Java\jdk1.7.0_75.Make sure JAVA_HOME (environment variable) is correctly set according to the JDK installation path (for example, C:\Program Files\Java\jdk1.7.0_75).
    • Installare Android SDK e aggiungere il percorso <android-sdk-location>\tools, ad esempio C:\tools\Android\android-sdk\tools, alla variabile di ambiente PATH.Install Android SDK and add the <android-sdk-location>\tools location (for example, C:\tools\Android\android-sdk\tools) to your PATH environment variable.
    • Aprire Android SDK Manager, ad esempio, tramite il terminale android, e installare:Open Android SDK Manager (for example, via the terminal: android) and install:
      • Android 5.0.1 (API 21) Platform SDKAndroid 5.0.1 (API 21) platform SDK
      • Android SDK Build Tools 19.1.0 o versione successivaAndroid SDK Build Tools version 19.1.0 or later
      • Android Support Repository (funzionalità aggiuntive)Android Support Repository (Extras)

    Android SDK non fornisce alcuna istanza dell'emulatore predefinito.The Android SDK doesn't provide any default emulator instance. Crearne una eseguendo android avd dal terminale e quindi selezionare Create (Crea) per eseguire l'app Android nell'emulatore.Create one by running android avd from the terminal and then selecting Create, if you want to run the Android app on an emulator. È consigliabile usare un' API di livello 19 o superiore.We recommend an API level of 19 or higher. Per altre informazioni sull'emulatore Android e sulle opzioni di creazione, vedere AVD Manager nel sito Android.For more information about the Android emulator and creation options, see AVD Manager on the Android site.

Passaggio 1: Registrare un'applicazione con Azure ADStep 1: Register an application with Azure AD

Questo passaggio è facoltativo.This step is optional. L'esercitazione fornisce valori di cui è stato effettuato preventivamente il provisioning, che consentono di vedere l'esempio in azione senza effettuare alcun provisioning nel proprio tenant.This tutorial provides pre-provisioned values that you can use to see the sample in action without doing any provisioning in your own tenant. È tuttavia consigliabile eseguire questo passaggio e acquisire familiarità con il processo, perché sarà necessario quando si creano applicazioni personalizzate.However, we recommend that you do perform this step and become familiar with the process, because it will be required when you create your own applications.

Azure AD rilascia token solo alle applicazioni note.Azure AD issues tokens to only known applications. Prima di poter usare Azure AD dall'app, è necessario creare una voce nel proprio tenant.Before you can use Azure AD from your app, you need to create an entry for it in your tenant. Per registrare una nuova applicazione nel tenant:To register a new application in your tenant:

  1. Accedere al portale di Azure.Sign in to the Azure portal.
  2. Nella barra superiore fare clic sull'account.On the top bar, click your account. Nell'elenco di Directory scegliere il tenant di Azure AD in cui si vuole registrare l'applicazione.In the Directory list, choose the Azure AD tenant where you want to register your application.
  3. Fare clic su More Services (Altri servizi) nel riquadro sinistro, quindi selezionare Azure Active Directory.Click More Services in the left pane, and then select Azure Active Directory.
  4. Fare clic su Registrazioni per l'app e scegliere Aggiungi.Click App registrations, and then select Add.
  5. Seguire le istruzioni e creare un'Applicazione client nativa.Follow the prompts and create a Native Client Application. Benché le app Cordova siano basate su HTML, verrà creata un'applicazione client nativa.(Although Cordova apps are HTML based, we're creating a native client application here. L'opzione Applicazione client nativa deve essere selezionata per consentire il funzionamento dell'applicazione.The Native Client Application option must be selected, or the application won't work.)
    • Il nome descrive l'applicazione agli utenti.Name describes your application to users.
    • URI di reindirizzamento è l'URI usato per restituire i token all'app.Redirect URI is the URI that's used to return tokens to your app. Immettere http://MyDirectorySearcherApp.Enter http://MyDirectorySearcherApp.

Al termine della registrazione, Azure AD assegna un ID applicazione univoco all'app.After you finish registration, Azure AD assigns a unique application ID to your app. Questo valore servirà nelle sezioni successive.You’ll need this value in the next sections. È possibile trovarlo nella scheda applicazione dell'app appena creata.You can find it on the application tab of the newly created app.

Per eseguire DirSearchClient Sample, assegnare all'app appena creata l'autorizzazione ad eseguire query nell'API Graph di Azure AD:To run DirSearchClient Sample, grant the newly created app permission to query the Azure AD Graph API:

  1. Nella pagina Impostazioni selezionare Autorizzazioni necessarie e selezionare Aggiungi.From the Settings page, select Required Permissions, and then select Add.
  2. Per l'applicazione Azure Active Directory, selezionare Microsoft Graph come API e aggiungere l'autorizzazione Access the directory as the signed-in user (Accesso alla directory come utente connesso) in Autorizzazioni delegate.For the Azure Active Directory application, select Microsoft Graph as the API and add the Access the directory as the signed-in user permission under Delegated Permissions. In questo modo l'applicazione può cercare gli utenti nell'API Graph.This enables your application to query the Graph API for users.

Passaggio 2: Clonare il repository di app di esempioStep 2: Clone the sample app repository

Dalla shell o dalla riga di comando digitare il comando seguente:From your shell or command line, type the following command:

git clone -b skeleton https://github.com/AzureADQuickStarts/NativeClient-MultiTarget-Cordova.git

Passaggio 3: Creare l'app CordovaStep 3: Create the Cordova app

Esistono diversi metodi per la creazione di applicazioni Cordova.There are multiple ways to create Cordova applications. In questa esercitazione si userà l'interfaccia della riga di comando (CLI) di Cordova.In this tutorial, we'll use the Cordova command-line interface (CLI).

  1. Dalla shell o dalla riga di comando digitare il comando seguente:From your shell or command line, type the following command:

     cordova create DirSearchClient
    

    Questo comando crea la struttura di cartelle e lo scaffolding per il progetto Cordova.That command creates the folder structure and scaffolding for the Cordova project.

  2. Passare alla nuova cartella DirSearchClient:Move to the new DirSearchClient folder:

     cd .\DirSearchClient
    
  3. Copiare il contenuto del progetto di partenza nella sottocartella www usando File Manager o il comando seguente nella shell:Copy the content of the starter project in the www subfolder by using a file manager or the following command in your shell:

    • Windows: xcopy ..\NativeClient-MultiTarget-Cordova\DirSearchClient www /E /YWindows: xcopy ..\NativeClient-MultiTarget-Cordova\DirSearchClient www /E /Y
    • Mac: cp -r ../NativeClient-MultiTarget-Cordova/DirSearchClient/* wwwMac: cp -r ../NativeClient-MultiTarget-Cordova/DirSearchClient/* www
  4. Aggiungere il plug-in relativo all'elenco elementi consentiti.Add the whitelist plug-in. Questa operazione è necessaria per richiamare l'API Graph.This is necessary for invoking the Graph API.

     cordova plugin add cordova-plugin-whitelist
    
  5. Aggiungere tutte le piattaforme che si prevede di supportare.Add all the platforms that you want to support. Per avere un esempio funzionante, è necessario eseguire almeno uno dei comandi seguenti.To have a working sample, you need to execute at least one of the following commands. Si noti che non sarà possibile emulare iOS in Windows o emulare Windows in Mac.Note that you won't be able to emulate iOS on Windows or emulate Windows on a Mac.

     cordova platform add android
     cordova platform add ios
     cordova platform add windows
    
  6. Aggiungere il plug-in ADAL per Cordova al progetto:Add the ADAL for Cordova plug-in to your project:

     cordova plugin add cordova-plugin-ms-adal
    

Passaggio 4: Aggiungere codice per autenticare gli utenti e ottenere i token da Azure ADStep 4: Add code to authenticate users and obtain tokens from Azure AD

L'applicazione sviluppata in questa esercitazione fornirà una semplice funzionalità di ricerca nella directory.The application that you're developing in this tutorial will provide a simple directory search feature. L'utente può quindi digitare l'alias di qualsiasi utente nella directory e visualizzare alcuni attributi di base.The user can then type the alias of any user in the directory and visualize some basic attributes. Il progetto iniziale contiene la definizione dell'interfaccia utente di base dell'app (in www/index.html) e lo scaffolding che collega i cicli degli eventi dell'app di base, i binding dell'interfaccia utente e la logica di visualizzazione dei risultati (in www/js/index.js).The starter project contains the definition of the basic user interface of the app (in www/index.html) and the scaffolding that wires up basic app event cycles, user interface bindings, and results display logic (in www/js/index.js). L'unica cosa affidata allo sviluppatore è l'aggiunta della logica che implementa le attività relative all'identità.The only task left for you is to add the logic that implements identity tasks.

La prima cosa da fare nel codice consiste nell'introdurre i valori di protocollo usati da Azure AD per l'identificazione dell'app e delle risorse di destinazione.The first thing you need to do in your code is introduce the protocol values that Azure AD uses for identifying your app and the resources that you target. Questi valori verranno usati in seguito per costruire le richieste di token.Those values will be used to construct the token requests later on. Inserire il frammento seguente all'inizio del file index.js:Insert the following snippet at the top of the index.js file:

var authority = "https://login.microsoftonline.com/common",
    redirectUri = "http://MyDirectorySearcherApp",
    resourceUri = "https://graph.windows.net",
    clientId = "a5d92493-ae5a-4a9f-bcbf-9f1d354067d3",
    graphApiVersion = "2013-11-08";

I valori redirectUri e clientId devono corrispondere ai valori che descrivono l'app in Azure AD.The redirectUri and clientId values should match the values that describe your app in Azure AD. È possibile trovarli nella scheda Configura nel portale di Azure, come descritto in precedenza nel Passaggio 1 di questa esercitazione.You can find those from the Configure tab in the Azure portal, as described in step 1 earlier in this tutorial.

Nota

Se si è scelto di non registrare una nuova app nel tenant, è sufficiente incollare i valori preconfigurati senza modifica.If you opted for not registering a new app in your own tenant, you can simply paste the preconfigured values as is. È quindi possibile visualizzare l'esecuzione dell'esempio, anche se occorre creare sempre una voce personalizzata per le app destinate alla produzione.You can then see the sample running, though you should always create your own entry for your apps that are meant for production.

Aggiungere quindi il codice di richiesta del token.Next, add the token request code. Inserire il frammento seguente tra le definizioni searche renderData:Insert the following snippet between the search and renderData definitions:

    // Shows the user authentication dialog box if required
    authenticate: function (authCompletedCallback) {

        app.context = new Microsoft.ADAL.AuthenticationContext(authority);
        app.context.tokenCache.readItems().then(function (items) {
            if (items.length > 0) {
                authority = items[0].authority;
                app.context = new Microsoft.ADAL.AuthenticationContext(authority);
            }
            // Attempt to authorize the user silently
            app.context.acquireTokenSilentAsync(resourceUri, clientId)
            .then(authCompletedCallback, function () {
                // We require user credentials, so this triggers the authentication dialog box
                app.context.acquireTokenAsync(resourceUri, clientId, redirectUri)
                .then(authCompletedCallback, function (err) {
                    app.error("Failed to authenticate: " + err);
                });
            });
        });

    },

Si esaminerà ora la funzione suddividendola nelle due parti principali.Let's examine that function by breaking it down in its two main parts. Questo esempio è progettato per funzionare con qualsiasi tenant, invece di essere associato a uno in particolare.This sample is designed to work with any tenant, as opposed to being tied to a particular one. Usa l'endpoint "/common" che consente all'utente di immettere qualsiasi account al momento dell'autenticazione e indirizza la richiesta al tenant di appartenenza.It uses the "/common" endpoint, which allows the user to enter any account at authentication time and directs the request to the tenant where it belongs.

La prima parte del metodo esamina la cache ADAL per verificare se è già stato archiviato un token.This first part of the method inspects the ADAL cache to see if a token is already stored. In tale caso, il metodo usa i tenant di provenienza del token per la reinizializzazione di ADAL.If so, the method uses the tenants where the token came from for reinitializing ADAL. Questo approccio è necessario per evitare richieste aggiuntive, in quanto l'uso di "/common" comporta sempre la richiesta all'utente di immettere un nuovo account.This is necessary to avoid extra prompts, because the use of "/common" always results in asking the user to enter a new account.

        app.context = new Microsoft.ADAL.AuthenticationContext(authority);
        app.context.tokenCache.readItems().then(function (items) {
            if (items.length > 0) {
                authority = items[0].authority;
                app.context = new Microsoft.ADAL.AuthenticationContext(authority);
            }

La seconda parte del metodo esegue la richiesta di token vera e propria.The second part of the method performs the proper token request. Il metodo acquireTokenSilentAsync chiede ad ADAL di restituire un token per la risorsa specificata senza mostrare alcuna esperienza utente.The acquireTokenSilentAsync method asks ADAL to return a token for the specified resource without showing any UX. Ciò può verificarsi se nella cache è già archiviato un token di accesso appropriato o se è presente un token di aggiornamento che può essere usato per ottenere un nuovo token di accesso senza mostrare alcuna richiesta.That can happen if the cache already has a suitable access token stored, or if a refresh token can be used to get a new access token without showing any prompt. Se il tentativo non riesce, si eseguirà il fallback a acquireTokenAsync, che richiederà in modo visibile all'utente di autenticarsi.If that attempt fails, we fall back on acquireTokenAsync--which will visibly prompt the user to authenticate.

            // Attempt to authorize the user silently
            app.context.acquireTokenSilentAsync(resourceUri, clientId)
            .then(authCompletedCallback, function () {
                // We require user credentials, so this triggers the authentication dialog box
                app.context.acquireTokenAsync(resourceUri, clientId, redirectUri)
                .then(authCompletedCallback, function (err) {
                    app.error("Failed to authenticate: " + err);
                });
            });

Dopo avere ottenuto il token, si potrà finalmente richiamare l'API Graph ed eseguire la query di ricerca specifica.Now that we have the token, we can finally invoke the Graph API and perform the search query that we want. Inserire il frammento seguente sotto la definizione di authenticate:Insert the following snippet below the authenticate definition:

// Makes an API call to receive the user list
    requestData: function (authResult, searchText) {
        var req = new XMLHttpRequest();
        var url = resourceUri + "/" + authResult.tenantId + "/users?api-version=" + graphApiVersion;
        url = searchText ? url + "&$filter=mailNickname eq '" + searchText + "'" : url + "&$top=10";

        req.open("GET", url, true);
        req.setRequestHeader('Authorization', 'Bearer ' + authResult.accessToken);

        req.onload = function(e) {
            if (e.target.status >= 200 && e.target.status < 300) {
                app.renderData(JSON.parse(e.target.response));
                return;
            }
            app.error('Data request failed: ' + e.target.response);
        };
        req.onerror = function(e) {
            app.error('Data request failed: ' + e.error);
        }

        req.send();
    },

I file usati come punto di partenza hanno fornito un'esperienza utente essenziale per l'immissione dell'alias di un utente in una casella di testo.The starting-point files supplied a simple UX for entering a user's alias in a text box. Questo metodo usa tale valore per costruire una query, combinarla con il token di accesso, inviarla a Microsoft Graph e analizzare i risultati.This method uses that value to construct a query, combine it with the access token, send it to Microsoft Graph, and parse the results. Il metodo renderData, già presente nel file usato come punto di partenza, si occupa della visualizzazione dei risultati.The renderData method, already present in the starting-point file, takes care of visualizing the results.

Passaggio 5: Eseguire l'appStep 5: Run the app

L'app è finalmente pronta per essere eseguita.Your app is finally ready to run. Il funzionamento è semplice: dopo l'avvio dell'app, immettere l'alias dell'utente che si vuole cercare, quindi fare clic sul pulsante.Operating it is simple: when the app starts, enter the alias of the user you want to look up, and then click the button. Viene richiesto di autenticarsi.You're prompted for authentication. Dopo l'autenticazione e il completamento della ricerca, vengono visualizzati gli attributi relativi all'utente cercato.Upon successful authentication and successful search, the attributes of the searched user are displayed.

Le esecuzioni successive verranno eseguite senza visualizzare alcuna richiesta, grazie alla presenza nella cache del token acquisito in precedenza.Subsequent runs will perform the search without showing any prompt, thanks to the presence of the previously acquired token in cache.

I passaggi concreti per l'esecuzione dell'app variano in base alla piattaforma.The concrete steps for running the app vary by platform.

Windows 10Windows 10

Tablet/PC: cordova run windows --archs=x64 -- --appx=uapTablet/PC: cordova run windows --archs=x64 -- --appx=uap

Dispositivi mobili (richiede un dispositivo Windows 10 Mobile connesso a un PC): cordova run windows --archs=arm -- --appx=uap --phoneMobile (requires a Windows 10 Mobile device connected to a PC): cordova run windows --archs=arm -- --appx=uap --phone

Nota

Durante la prima esecuzione è possibile che venga richiesto di accedere per ottenere una licenza per sviluppatori.During the first run, you might be asked to sign in for a developer license. Per altre informazioni, vedere Licenza per sviluppatori.For more information, see Developer license.

Tablet/PC con Windows 8.1Windows 8.1 Tablet/PC

cordova run windows

Nota

Durante la prima esecuzione è possibile che venga richiesto di accedere per ottenere una licenza per sviluppatori.During the first run, you might be asked to sign in for a developer license. Per altre informazioni, vedere Licenza per sviluppatori.For more information, see Developer license.

Windows Phone 8.1Windows Phone 8.1

Per l'esecuzione su un dispositivo connesso: cordova run windows --device -- --phoneTo run on a connected device: cordova run windows --device -- --phone

Per l'esecuzione nell'emulatore predefinito: cordova emulate windows -- --phoneTo run on the default emulator: cordova emulate windows -- --phone

Usare cordova run windows --list -- --phone per vedere tutte le destinazioni disponibili e cordova run windows --target=<target_name> -- --phone per eseguire l'applicazione su un dispositivo o un emulatore specifico, ad esempio, cordova run windows --target="Emulator 8.1 720P 4.7 inch" -- --phone.Use cordova run windows --list -- --phone to see all available targets and cordova run windows --target=<target_name> -- --phone to run the application on a specific device or emulator (for example, cordova run windows --target="Emulator 8.1 720P 4.7 inch" -- --phone).

AndroidAndroid

Per l'esecuzione su un dispositivo connesso: cordova run android --deviceTo run on a connected device: cordova run android --device

Per l'esecuzione nell'emulatore predefinito: cordova emulate androidTo run on the default emulator: cordova emulate android

Assicurarsi di avere creato l'istanza dell'emulatore con AVD Manager, come indicato nella sezione Prerequisiti.Make sure you've created an emulator instance by using AVD Manager, as described earlier in the "Prerequisites" section.

Usare cordova run android --list per vedere tutte le destinazioni disponibili e cordova run android --target=<target_name> per eseguire l'applicazione su un dispositivo o un emulatore specifico, ad esempio, cordova run android --target="Nexus4_emulator".Use cordova run android --list to see all available targets and cordova run android --target=<target_name> to run the application on a specific device or emulator (for example, cordova run android --target="Nexus4_emulator").

iOSiOS

Per l'esecuzione su un dispositivo connesso: cordova run ios --deviceTo run on a connected device: cordova run ios --device

Per l'esecuzione nell'emulatore predefinito: cordova emulate iosTo run on the default emulator: cordova emulate ios

Nota

Assicurarsi che il pacchetto ios-sim sia installato per l'esecuzione sull'emulatore.Make sure you have the ios-sim package installed to run on the emulator. Per altre informazioni, vedere la sezione "Prerequisiti".For more information, see the "Prerequisites" section.

Use `cordova run ios --list` to see all available targets and `cordova run ios --target=<target_name>` to run the application on specific device or emulator (for example, `cordova run android --target="iPhone-6"`).

Use `cordova run --help` to see additional build and run options.

Passaggi successiviNext steps

Come riferimento, l'esempio completo (senza i valori di configurazione) è disponibile in GitHub.For reference, the completed sample (without your configuration values) is available in GitHub.

A questo punto è possibile passare a scenari più avanzati e più interessanti.You can now move on to more advanced (and more interesting) scenarios. Vedere Proteggere un'API Web Node.js con Azure AD.You might want to try: Secure a Node.js Web API with Azure AD.

Risorse aggiuntiveAdditional resources

Ottenere aggiornamenti della sicurezza per i prodottiGet security updates for our products

È consigliabile ricevere notifiche in caso di problemi di sicurezza. A tale scopo, visitare la pagina del TechCenter per le notifiche sulla sicurezza tecnica per Microsoft e sottoscrivere gli avvisi di sicurezza.We encourage you to get notifications of when security incidents occur by visiting the TechCenter page for Microsoft technical security notifications and subscribing to security advisory alerts.