Esercitazione: Autenticare il client con Spring Cloud Gateway in Azure Spring Apps
Nota
I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.
Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.
Questo articolo si applica a: ✔️ Consumo standard e dedicato (anteprima)
Questa guida introduttiva illustra come proteggere la comunicazione tra un'applicazione client e un'applicazione di microservizio ospitata in Azure Spring Apps e schermata con un'app Spring Cloud Gateway. L'applicazione client viene verificata come entità di sicurezza per avviare il contatto con il microservizio distribuito in Azure Spring Apps, usando l'app compilata con Spring Cloud Gateway. Questo metodo usa l'inoltro token di Spring Cloud Gateway e le funzionalità del server di risorse di Spring Security per i processi di autenticazione e autorizzazione, realizzati tramite l'esecuzione del flusso di credenziali client OAuth 2.0.
L'elenco seguente mostra la composizione del progetto di esempio:
- Spa libri: questa applicazione a pagina singola ospitata in locale interagisce con il microservizio Books per aggiungere o cercare libri.
- Microservizio libri:
- Un'app Spring Cloud Gateway ospitata in Azure Spring Apps. Questa app funziona come gateway per le API RESTful della documentazione.
- Un'app per le API RESTful Spring Boot ospitata in Azure Spring Apps. Questa app archivia le informazioni del libro in un database H2. Il servizio Libri espone due endpoint REST per scrivere e leggere libri.
1. Prerequisiti
- Una sottoscrizione di Azure. Se non si ha già una sottoscrizione, creare un account gratuito prima di iniziare.
- Git.
- Java Development Kit (JDK) versione 17.
- Un tenant di Microsoft Entra. Per altre informazioni su come creare un tenant di Microsoft Entra, vedere Avvio rapido: Creare un nuovo tenant in Microsoft Entra ID.
- Interfaccia della riga di comando di Azure versione 2.45.0 o successiva.
- Installare Node.js.
2. Preparare il progetto Spring
Usare la procedura seguente per clonare ed eseguire l'app in locale:
Usare il comando seguente per clonare il progetto di esempio da GitHub:
git clone https://github.com/Azure-Samples/azure-spring-apps-sso-client-credential.git -b consumption-plan
Usare il comando seguente per compilare i servizi back-end books:
cd azure-spring-apps-sso-client-credential ./mvnw clean package
Immettere la directory del progetto SPA e usare il comando seguente per installare le dipendenze:
npm install @azure/msal-node
3. Preparare l'ambiente cloud
Le risorse principali necessarie per eseguire questo esempio sono un'istanza di Azure Spring Apps e un'istanza di Database di Azure per PostgreSQL. Questa sezione illustra i passaggi per creare queste risorse.
3.1. Accedere al portale di Azure
Aprire il Web browser e quindi passare al portale di Azure. Immettere le credenziali per accedere al portale di Azure. La visualizzazione predefinita è il dashboard del servizio.
3.2. Creare un'istanza di Azure Spring Apps
Per creare un'istanza del servizio, seguire questa procedura:
Selezionare Crea una risorsa nell'angolo del portale di Azure.
Selezionare Calcolo di>Azure Spring Apps.
Compilare il modulo Informazioni di base con le informazioni seguenti:
Impostazione Valore suggerito Descrizione Sottoscrizione nome della sottoscrizione Sottoscrizione di Azure da usare per il server. Se si hanno più sottoscrizioni, scegliere quella in cui si desidera che venga fatturata la risorsa. Gruppo di risorse myresourcegroup Nuovo nome di gruppo di risorse o uno esistente nella sottoscrizione. Nome myasa Nome univoco che identifica il servizio Azure Spring Apps. Il nome deve essere composto da 4-32 caratteri e può contenere solo lettere in minuscolo, numeri e trattini. Il primo carattere del nome del servizio deve essere una lettera e l'ultimo deve essere una lettera o un numero. Piano Consumo standard e dedicato (anteprima) Il piano tariffario determina le risorse e i costi associati all'istanza. Paese Area più vicina ai propri utenti Località più vicina agli utenti. Ambiente App contenitore myacaenv Selezionare l'istanza dell'ambiente app contenitore per condividere la stessa rete virtuale con altri servizi e risorse. Usare la tabella seguente come guida per creare l'ambiente app contenitore:
Impostazione Valore suggerito Descrizione Nome ambiente myacaenv Nome univoco che identifica il servizio Azure Container Apps Environment. Piano Consumo Il piano tariffario determina le risorse e i costi associati all'istanza. Con ridondanza della zona Disabilitato Se creare il servizio Ambiente app contenitore in una zona di disponibilità di Azure. Importante
Il profilo del carico di lavoro Consumo ha un modello di fatturazione con pagamento in base al consumo, senza costi di partenza. Viene addebitato il profilo del carico di lavoro dedicato in base alle risorse di cui è stato effettuato il provisioning. Per altre informazioni, vedere Profili del carico di lavoro in Ambienti di struttura del piano dedicato e consumo in App Azure Container (anteprima) e Prezzi di Azure Spring Apps.
Selezionare Rivedi e crea per rivedere le selezioni. Selezionare Crea per effettuare il provisioning dell'istanza di Azure Spring Apps.
Sulla barra degli strumenti selezionare l'icona Notifiche a forma di campana per monitorare il processo di distribuzione. Al termine della distribuzione, è possibile selezionare Aggiungi al dashboard, che crea un riquadro per questo servizio nel dashboard portale di Azure come collegamento alla pagina Panoramica del servizio. Selezionare Vai alla risorsa per aprire la pagina Panoramica del servizio.
Usare il comando seguente per abilitare il server Eureka. Assicurarsi di sostituire i segnaposto con i propri valori creati nel passaggio precedente.
az spring eureka-server enable \ --resource-group <resource-group-name> \ --name <Azure-Spring-Apps-instance-name>
3.3. Registrare l'applicazione Libri
Questa sezione illustra i passaggi per registrare un'applicazione per aggiungere ruoli dell'app in Microsoft Entra ID, che viene usato per proteggere le API RESTful in Azure Spring Apps.
Passare alla home page di portale di Azure.
Se si ha accesso a più tenant, usare il filtro Directory + sottoscrizione ( ) per selezionare il tenant in cui si vuole registrare un'applicazione.
Cercare e selezionare Microsoft Entra ID.
In Gestisci selezionare Registrazioni app>Nuova registrazione.
Immettere un nome per l'applicazione nel campo Nome , ad esempio Libri. Tale nome, che potrebbe essere visualizzato dagli utenti dell'app, può essere modificato in un secondo momento.
Per Tipi di account supportati selezionare Account solo in questa directory dell'organizzazione.
Selezionare Registra per creare l'applicazione.
Nella pagina Panoramica dell'app cercare il valore del campo ID applicazione (client) e prenderne nota per un uso futuro. È necessario configurare il file di configurazione YAML per questo progetto.
In Gestisci selezionare Esporre un'API, trovare l'URI ID applicazione all'inizio della pagina e quindi selezionare Aggiungi.
Nella pagina Modifica URI ID applicazione accettare l'URI ID applicazione proposto (
api://{client ID}
) o usare un nome significativo anziché l'ID client, ad esempioapi://books
e quindi selezionare Salva.In Gestisci selezionare Ruoli>app Crea ruolo app e quindi immettere le informazioni seguenti:
- In Nome visualizzato immettere Scrivi.
- In Tipi di membri consentiti selezionare Applicazioni.
- In Valore immettere Books.Write.
- Per Descrizione immettere Aggiunta di libri.
Ripetere il passaggio precedente per aggiungere un altro ruolo dell'app:
Books.Read
.
3.4. Registrare l'applicazione a pagina singola
L'app per le API RESTful books funge da server di risorse, protetto da Microsoft Entra ID. Prima di acquisire un token di accesso, è necessario registrare un'altra applicazione in Microsoft Entra ID e concedere le autorizzazioni all'applicazione client, denominata SPA
.
Tornare al tenant in Microsoft Entra ID.
In Gestisci selezionare Registrazioni app>Nuova registrazione.
Immettere un nome per l'applicazione nel campo Nome , ad esempio
SPA
.Per Tipi di account supportati, usare solo gli account predefiniti in questa directory organizzativa.
Selezionare Registra per creare l'applicazione.
Nella pagina Panoramica dell'app cercare il valore del campo ID applicazione (client) e prenderne nota per un uso futuro. È necessario per acquisire il token di accesso.
Selezionare Autorizzazioni API>Aggiungi un'autorizzazione>API usate dall'organizzazione. Selezionare l'applicazione
Books
registrata in precedenza, selezionare le autorizzazioni Books.Read e Books.Write e quindi selezionare Aggiungi autorizzazioni.Selezionare Concedi consenso amministratore per <your-tenant-name> per concedere il consenso amministratore per le autorizzazioni aggiunte.
Passare a Certificati e segreti e quindi selezionare Nuovo segreto client.
Nella pagina Aggiungi un segreto client immettere una descrizione per il segreto, selezionare una data di scadenza e quindi selezionare Aggiungi.
Cercare il valore del segreto e quindi registrarlo per usarlo in un secondo momento. È necessario per acquisire un token di accesso.
3.5. Aggiornare la configurazione dell'app del servizio documentazione
Individuare il file books-service/src/main/resources/application.yml per l'app books-service
. Aggiornare la configurazione nella spring.cloud.azure.active-directory
sezione in modo che corrisponda all'esempio seguente. Assicurarsi di sostituire i segnaposto con i valori creati in precedenza.
spring:
cloud:
azure:
active-directory:
credential:
client-id: <your-application-ID-of-Books>
app-id-uri: <your-application-ID-URI-of-Books>
Usare il comando seguente per ricompilare il progetto di esempio:
./mvnw clean package
4. Distribuire le app in Azure Spring Apps
I passaggi seguenti illustrano come distribuire le app in Azure.
4.1. Distribuire le app di microservizi in Azure Spring Apps
Usare la procedura seguente per distribuire le app in Azure Spring Apps usando il plug-in Maven per Azure Spring Apps:
Passare alla directory del progetto di esempio e quindi usare il comando seguente per configurare l'app in Azure Spring Apps:
./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.18.0:config
L'elenco seguente descrive le interazioni con i comandi:
- Selezionare moduli figlio da configurare (numeri di input separati da virgola, ad esempio[1-2,4,6], INVIO per selezionare TUTTO): premere INVIO per selezionare tutto.
- Accesso OAuth2: autorizzare l'accesso ad Azure in base al protocollo OAuth2.
- Selezionare la sottoscrizione: selezionare il numero di elenco di sottoscrizioni dell'istanza di Azure Spring Apps creata, che per impostazione predefinita corrisponde alla prima sottoscrizione nell'elenco. Se si usa il numero predefinito, premere INVIO direttamente.
- Selezionare App Azure Spring per la distribuzione: selezionare il numero di elenco dell'istanza di Azure Spring Apps creata. Se si usa il numero predefinito, premere INVIO direttamente.
- Selezionare le app per esporre l'accesso pubblico: (numeri di input separati da virgola, ad esempio: [1-2,4,6], INVIO per selezionare NONE): immettere 1 per
gateway-service
. - Confermare di salvare tutte le configurazioni precedenti (Y/n): immettere y. Se si immette n, la configurazione non viene salvata nei file POM.
Usare il comando seguente per distribuire l'app:
./mvnw azure-spring-apps:deploy
L'elenco seguente descrive l'interazione con il comando:
- Accesso OAuth2: è necessario autorizzare l'accesso ad Azure in base al protocollo OAuth2.
Dopo l'esecuzione del comando, è possibile visualizzare i messaggi di log seguenti, che indicano che la distribuzione ha avuto esito positivo.
[INFO] Getting public url of app(gateway-service)... [INFO] Application url: https://gateway-service.xxxxxxxxxxxxxx-xxxxxxxx.eastasia.azurecontainerapps.io ... [INFO] Artifact(books-service-0.0.1-SNAPSHOT.jar) is uploaded and deployment(default) is successfully updated. ...
L'URL dell'applicazione di output è l'endpoint di base per accedere all'applicazione API TODo RESTful.
4.2. Eseguire l'app SPA in locale
Aggiornare la configurazione nel file spa/server.js dello SPA
script dell'applicazione in modo che corrisponda all'esempio seguente. Assicurarsi di sostituire i segnaposto con i propri valori creati nel passaggio precedente.
const SpringCloudGatewayURL = "<URL exposed by app gateway-service>"
const msalConfig = {
auth: {
clientId: "< SPA App Registration ClientId>",
authority: "https://login.microsoftonline.com/< TenantId >/",
clientSecret: "<SPA App Registration ClientSecret>",
},
};
const tokenRequest = {
scopes: ["<Application ID URI of Books>/.default"]
};
Nella directory del progetto SPA usare il comando seguente per eseguire localmente:
node server.js
Nota
L'app SPA è un'applicazione Web statica, che può essere distribuita in qualsiasi server Web.
5. Convalidare l'app
È possibile accedere all'app Spa books che comunica con le API RESTful della documentazione tramite l'app gateway-service
.
Passare a
http://localhost:3000
nel browser per accedere all'applicazione.Immettere i valori per Autore e Titolo e quindi selezionare Aggiungi libro. Viene visualizzata una risposta simile all'esempio seguente:
Book added successfully: {"id":1,"author":"Jeff Black","title":"Spring In Action"}
6. Pulire le risorse
È possibile eliminare il gruppo di risorse di Azure, che include tutte le risorse del gruppo. Per eliminare l'intero gruppo di risorse, incluso il server appena creato, seguire questa procedura:
Individuare il gruppo di risorse nel portale di Azure.
Selezionare Gruppi di risorse e quindi selezionare il nome del gruppo di risorse, ad esempio myresourcegroup.
Nella pagina del gruppo di risorse selezionare Elimina. Immettere il nome del gruppo di risorse nella casella di testo per confermare l'eliminazione.
Selezionare Elimina.
7. Passaggi successivi
Per altre informazioni, vedere gli articoli seguenti: