Guida per gli sviluppatori di Spring Boot Starter per Microsoft Entra

Questo articolo si applica a: ✔️ Versione 4.19.0 ✔️ versione 5.18.0

Questo articolo descrive le funzionalità e gli scenari principali di Spring Boot Starter per Microsoft Entra ID. Include anche indicazioni sui problemi comuni, le soluzioni alternative e le procedure di diagnostica.

Quando si crea un'applicazione Web, la gestione delle identità e degli accessi è fondamentale. Azure offre un servizio di gestione delle identità basato sul cloud con un'integrazione approfondita con il resto dell'ecosistema di Azure.

Anche se Spring Security semplifica la protezione delle applicazioni basate su Spring, non è adatta a un provider di identità specifico. Spring Boot Starter per Microsoft Entra ID consente di connettere l'applicazione Web a un tenant di Microsoft Entra e proteggere il server di risorse con Microsoft Entra ID. Usa il protocollo Oauth 2.0 per proteggere applicazioni Web e server di risorse.

I collegamenti seguenti forniscono l'accesso al pacchetto iniziale, alla documentazione e agli esempi:

Prerequisiti

Per seguire le istruzioni riportate in questa guida, è necessario disporre dei prerequisiti seguenti:

Importante

Spring Boot versione 2.5 o successiva è necessario per completare i passaggi descritti in questo articolo.

Scenari chiave

Questa guida descrive come usare Microsoft Entra Starter negli scenari seguenti:

Un'applicazione Web è qualsiasi applicazione basata sul Web che consente a un utente di accedere. Un server di risorse accetterà o negherà l'accesso dopo la convalida di un token di accesso.

Accedere a un'applicazione Web

Questo scenario usa il flusso di concessione del codice di autorizzazione OAuth 2.0 per consentire a un utente di accedere con un account Microsoft.

Per usare Microsoft Entra Starter in questo scenario, seguire questa procedura:

Impostare l'URI di reindirizzamento su <application-base-uri>/login/oauth2/code/. Ad esempio: http://localhost:8080/login/oauth2/code/. Assicurarsi di includere l'oggetto finale /. Per altre informazioni sull'URI di reindirizzamento, vedere Aggiungere un URI di reindirizzamento in Avvio rapido: Registrare un'applicazione con Microsoft Identity Platform.

Screenshot di portale di Azure che mostra la pagina di autenticazione dell'app Web con l'URI di reindirizzamento evidenziato.

Aggiungere le dipendenze seguenti al file pom.xml .

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

Nota

Per altre informazioni su come gestire le versioni delle librerie di Azure Spring Cloud usando una distinta base, vedere la sezione Introduzione alla guida per sviluppatori di Spring Cloud Azure.

Aggiungere le proprietà seguenti al file application.yml . È possibile ottenere i valori per queste proprietà dalla registrazione dell'app creata nel portale di Azure, come descritto nei prerequisiti.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       profile:
         tenant-id: <tenant>
       credential:
         client-id: <your-client-ID>
         client-secret: <your-client-secret>

Nota

I valori consentiti per tenant-id sono: common, organizations, consumerso l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.

Usare la configurazione di sicurezza predefinita o specificare la propria configurazione.

Opzione 1: usare la configurazione predefinita.

Con questa opzione non è necessario eseguire alcuna operazione. La DefaultAadWebSecurityConfigurerAdapter classe viene configurata automaticamente.

Opzione 2: specificare una configurazione self-defined.

Per fornire una configurazione, estendere la AadWebSecurityConfigurerAdapter classe e chiamare super.configure(http) nella configure(HttpSecurity http) funzione , come illustrato nell'esempio seguente:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2LoginSecurityConfig extends AadWebSecurityConfigurerAdapter {

   /**
    * Add configuration logic as needed.
   */
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       super.configure(http);
       http.authorizeRequests()
           .anyRequest().authenticated();
       // Do some custom configuration.
   }
}

Accedere ai server delle risorse da un'applicazione Web

Per usare Microsoft Entra Starter in questo scenario, seguire questa procedura:

Impostare l'URI di reindirizzamento come descritto in precedenza.

Aggiungere le dipendenze seguenti al file pom.xml .

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

Nota

Per altre informazioni su come gestire le versioni delle librerie di Azure Spring Cloud usando una distinta base, vedere la sezione Introduzione alla guida per sviluppatori di Spring Cloud Azure.

Aggiungere le proprietà seguenti al file application.yml , come descritto in precedenza:

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       profile:
         tenant-id: <tenant>
       credential:
         client-id: <your-client-ID>
         client-secret: <your-client-secret>
       authorization-clients:
         graph:
           scopes: https://graph.microsoft.com/Analytics.Read, email

Nota

I valori consentiti per tenant-id sono: common, organizations, consumerso l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.

Di seguito è graph riportato il nome dell'oggetto OAuth2AuthorizedCliente scopes sono gli ambiti necessari per il consenso durante l'accesso.

Aggiungere codice all'applicazione simile all'esempio seguente:

@GetMapping("/graph")
@ResponseBody
public String graph(
   @RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graphClient
) {
   // toJsonString() is just a demo.
   // oAuth2AuthorizedClient contains access_token. We can use this access_token to access the resource server.
   return toJsonString(graphClient);
}

Di seguito è graph riportato l'ID client configurato nel passaggio precedente. OAuth2AuthorizedClient contiene il token di accesso, usato per accedere al server di risorse.

Per un esempio completo che illustra questo scenario, vedere spring-cloud-azure-starter-active-directory sample: aad-web-application.

Proteggere un server di risorse o un'API

Questo scenario non supporta l'accesso, ma protegge il server convalidando il token di accesso. Se il token di accesso è valido, il server gestisce la richiesta.

Per usare Microsoft Entra Starter in questo scenario, seguire questa procedura:

Aggiungere le dipendenze seguenti al file pom.xml .

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

Nota

Per altre informazioni su come gestire le versioni delle librerie di Azure Spring Cloud usando una distinta base, vedere la sezione Introduzione alla guida per sviluppatori di Spring Cloud Azure.

Aggiungere le proprietà seguenti al file application.yml , come descritto in precedenza:

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       credential:
         client-id: <your-client-ID>
       app-id-uri: <your-app-ID-URI>

È possibile usare sia i valori your-client-ID> che< your-app-ID-URI> per verificare il token di accesso.< È possibile ottenere il <valore your-app-ID-URI> dal portale di Azure, come illustrato nelle immagini seguenti:

Screenshot di portale di Azure che mostra l'app Web Esporre una pagina API con l'URI ID applicazione evidenziato.

Usare la configurazione di sicurezza predefinita o specificare la propria configurazione.

Opzione 1: usare la configurazione predefinita.

Con questa opzione, non è necessario nulla. La DefaultAadResourceServerWebSecurityConfigurerAdapter classe viene configurata automaticamente.

Opzione 2: specificare una configurazione self-defined.

Per fornire una configurazione, estendere la AadResourceServerWebSecurityConfigurerAdapter classe e chiamare super.configure(http) nella configure(HttpSecurity http) funzione , come illustrato nell'esempio seguente:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2ResourceServerSecurityConfig extends AadResourceServerWebSecurityConfigurerAdapter {

   /**
    * Add configuration logic as needed.
    */
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       super.configure(http);
       http.authorizeRequests((requests) -> requests.anyRequest().authenticated());
   }
}

Per un esempio completo che illustra questo scenario, vedere spring-cloud-azure-starter-active-directory sample: aad-resource-server.

Accedere ad altri server di risorse da un server di risorse

Questo scenario supporta un server di risorse che visita altri server di risorse.

Per usare Microsoft Entra Starter in questo scenario, seguire questa procedura:

Aggiungere le dipendenze seguenti al file pom.xml .

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

Nota

Per altre informazioni su come gestire le versioni delle librerie di Azure Spring Cloud usando una distinta base, vedere la sezione Introduzione alla guida per sviluppatori di Spring Cloud Azure.

Aggiungere le proprietà seguenti al file application.yml :

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       profile:
         tenant-id: <tenant>
       credential:
         client-id: <web-API-A-client-ID>
         client-secret: <web-API-A-client-secret>
       app-id-uri: <web-API-A-app-ID-URI>
       authorization-clients:
         graph:
           scopes:
              - https://graph.microsoft.com/User.Read

Nota

I valori consentiti per tenant-id sono: common, organizations, consumerso l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.

Usare l'attributo @RegisteredOAuth2AuthorizedClient nel codice per accedere al server di risorse correlato, come illustrato nell'esempio seguente:

@PreAuthorize("hasAuthority('SCOPE_Obo.Graph.Read')")
@GetMapping("call-graph")
public String callGraph(@RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graph) {
   return callMicrosoftGraphMeEndpoint(graph);
}

Per un esempio completo che illustra questo scenario, vedere spring-cloud-azure-starter-active-directory sample: aad-resource-server-obo.

Applicazione Web e server risorse in un'unica applicazione

Questo scenario supporta Access a web application (Accesso a un'applicazione Web) e Protect a resource server/API in un'unica applicazione.

Per usare aad-starter in questo scenario, seguire questa procedura:

Aggiungere le dipendenze seguenti al file pom.xml .

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

Nota

Per altre informazioni su come gestire le versioni delle librerie di Azure Spring Cloud usando una distinta base, vedere la sezione Introduzione alla guida per sviluppatori di Spring Cloud Azure.

Aggiornare il file application.yml . Impostare la proprietà spring.cloud.azure.active-directory.application-type su web_application_and_resource_servere specificare il tipo di autorizzazione per ogni client di autorizzazione, come illustrato nell'esempio seguente.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       profile:
         tenant-id: <tenant>
       credential:
         client-id: <Web-API-C-client-id>
         client-secret: <Web-API-C-client-secret>
       app-id-uri: <Web-API-C-app-id-url>
       application-type: web_application_and_resource_server  # This is required.
       authorization-clients:
         graph:
           authorizationGrantType: authorization_code  # This is required.
           scopes:
             - https://graph.microsoft.com/User.Read
             - https://graph.microsoft.com/Directory.Read.All

Nota

I valori consentiti per tenant-id sono: common, organizations, consumerso l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.

Scrivere codice Java per configurare più HttpSecurity istanze.

Nel codice AadWebApplicationAndResourceServerConfig di esempio seguente contiene due configurazioni di sicurezza, una per un server di risorse e una per un'applicazione Web. La ApiWebSecurityConfigurationAdapter classe ha una priorità elevata per configurare l'adattatore di sicurezza del server di risorse. La HtmlWebSecurityConfigurerAdapter classe ha una priorità bassa per configurare l'adattatore di sicurezza dell'applicazione Web.

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadWebApplicationAndResourceServerConfig {

   @Order(1)
   @Configuration
   public static class ApiWebSecurityConfigurationAdapter extends AadResourceServerWebSecurityConfigurerAdapter {
       protected void configure(HttpSecurity http) throws Exception {
           super.configure(http);
           // All the paths that match `/api/**`(configurable) work as the esource server. Other paths work as  the web application.
           http.antMatcher("/api/**")
               .authorizeRequests().anyRequest().authenticated();
       }
   }

   @Configuration
   public static class HtmlWebSecurityConfigurerAdapter extends AadWebSecurityConfigurerAdapter {

       @Override
       protected void configure(HttpSecurity http) throws Exception {
           super.configure(http);
           // @formatter:off
           http.authorizeRequests()
                   .antMatchers("/login").permitAll()
                   .anyRequest().authenticated();
           // @formatter:on
       }
   }
}

Tipo di applicazione

La spring.cloud.azure.active-directory.application-type proprietà è facoltativa perché il relativo valore può essere dedotto dalle dipendenze. È necessario impostare manualmente la proprietà solo quando si utilizza il web_application_and_resource_server valore .

Dipendenza: spring-security-oauth2-client Ha una dipendenza: spring-security-oauth2-resource-server Valori validi del tipo di applicazione Valore predefinito
No web_application web_application
No resource_server resource_server
web_application,resource_server
resource_server_with_obo, web_application_and_resource_server
resource_server_with_obo

Proprietà configurabili

Spring Boot Starter per Microsoft Entra ID fornisce le proprietà seguenti:

Proprietà Descrizione
spring.cloud.azure.active-directory.app-id-uri Usato dal server di risorse per convalidare il gruppo di destinatari nel token di accesso. Il token di accesso è valido solo quando il gruppo di destinatari è uguale ai valori your-client-ID> o <your-app-ID-URI> descritti in precedenza.<
spring.cloud.azure.active-directory.authorization-clients Mappa che configura le API delle risorse che l'applicazione visiterà. Ogni elemento corrisponde a un'API di risorsa che verrà visitata dall'applicazione. Nel codice Spring ogni elemento corrisponde a un OAuth2AuthorizedClient oggetto.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name.scopes> Autorizzazioni API di un server di risorse che l'applicazione acquisirà.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name.authorization-grant-type> Tipo di client di autorizzazione. I tipi supportati sono authorization_code (tipo predefinito per l'app Web), on_behalf_of (tipo predefinito per resource-server), client_credentials.
spring.cloud.azure.active-directory.application-type Fare riferimento a Tipo di applicazione.
spring.cloud.azure.active-directory.profile.environment.active-directory-endpoint URI di base per il server di autorizzazione. Il valore predefinito è https://login.microsoftonline.com/.
spring.cloud.azure.active-directory.credential.client-id ID applicazione registrato in Microsoft Entra ID.
spring.cloud.azure.active-directory.credential.client-secret Segreto client dell'applicazione registrata.
spring.cloud.azure.active-directory.user-group.use-transitive-members Usare v1.0/me/transitiveMemberOf per ottenere i gruppi se impostato su true. In caso contrario, usare /v1.0/me/memberOf.
spring.cloud.azure.active-directory.post-logout-redirect-uri URI di reindirizzamento per la registrazione della disconnessione.
spring.cloud.azure.active-directory.profile.tenant-id ID tenant di Azure. I valori consentiti per tenant-id sono: common, organizations, consumerso l'ID tenant.
spring.cloud.azure.active-directory.user-group.allowed-group-names I gruppi di utenti previsti a cui verrà concessa un'autorità se presente nella risposta dalla MemberOf chiamata API Graph.
spring.cloud.azure.active-directory.user-name-attribute Indica quale attestazione sarà il nome dell'entità.

Gli esempi seguenti illustrano come usare queste proprietà:

Esempio di proprietà 1: per usare Azure China 21Vianet anziché Azure Global, usare il passaggio seguente.

  • Aggiungere le proprietà seguenti al file application.yml :

    spring:
       cloud:
         azure:
           active-directory:
             enabled: true
             profile:
               environment:
                 active-directory-endpoint: https://login.partner.microsoftonline.cn
    

Con questo metodo, è possibile usare un cloud sovrano o nazionale di Azure anziché il cloud pubblico di Azure.

Esempio di proprietà 2: Per usare un nome di gruppo per proteggere un metodo in un'applicazione Web, seguire questa procedura:

Aggiungere la proprietà seguente al file application.yml :

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       user-group:
         allowed-groups: group1, group2

Usare la configurazione di sicurezza predefinita o specificare la propria configurazione.

Opzione 1: usare la configurazione predefinita. Con questa opzione non è necessario eseguire alcuna operazione. La DefaultAadWebSecurityConfigurerAdapter classe viene configurata automaticamente.

Opzione 2: specificare una configurazione self-defined. Per fornire una configurazione, estendere la AadWebSecurityConfigurerAdapter classe e chiamare super.configure(http) nella configure(HttpSecurity http) funzione , come illustrato nell'esempio seguente:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2LoginSecurityConfig extends AadWebSecurityConfigurerAdapter {

   /**
    * Add configuration logic as needed.
    */
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       super.configure(http);
       http.authorizeRequests()
           .anyRequest().authenticated();
       // Do some custom configuration.
   }
}

Usare l'annotazione @PreAuthorize per proteggere il metodo , come illustrato nell'esempio seguente:

@Controller
public class RoleController {
   @GetMapping("group1")
   @ResponseBody
   @PreAuthorize("hasRole('ROLE_group1')")
   public String group1() {
       return "group1 message";
   }

   @GetMapping("group2")
   @ResponseBody
   @PreAuthorize("hasRole('ROLE_group2')")
   public String group2() {
       return "group2 message";
   }

   @GetMapping("group1Id")
   @ResponseBody
   @PreAuthorize("hasRole('ROLE_<group1-id>')")
   public String group1Id() {
       return "group1Id message";
   }

   @GetMapping("group2Id")
   @ResponseBody
   @PreAuthorize("hasRole('ROLE_<group2-id>')")
   public String group2Id() {
       return "group2Id message";
   }
}

Esempio di proprietà 3: Per abilitare il flusso delle credenziali client in un server risorse che visita i server delle risorse, seguire questa procedura:

Aggiungere la proprietà seguente al file application.yml :

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       authorization-clients:
         webapiC:   # When authorization-grant-type is null, on behalf of flow is used by default
           authorization-grant-type: client_credentials
           scopes:
             - <Web-API-C-app-id-url>/.default

Aggiungere codice all'applicazione simile all'esempio seguente:

@PreAuthorize("hasAuthority('SCOPE_Obo.WebApiA.ExampleScope')")
@GetMapping("webapiA/webapiC")
public String callClientCredential() {
   String body = webClient
       .get()
       .uri(CUSTOM_LOCAL_READ_ENDPOINT)
       .attributes(clientRegistrationId("webapiC"))
       .retrieve()
       .bodyToMono(String.class)
       .block();
   LOGGER.info("Response from Client Credential: {}", body);
   return "client Credential response " + (null != body ? "success." : "failed.");
}

Funzionalità avanzate

Supportare il controllo di accesso in base al token ID in un'applicazione Web

Lo starter supporta la creazione GrantedAuthority dall'attestazione di roles un token ID per consentire l'uso del token ID per l'autorizzazione in un'applicazione Web. È possibile usare la appRoles funzionalità di Microsoft Entra ID per creare un'attestazione roles e implementare il controllo di accesso.

Nota

L'attestazione roles generata da appRoles viene decorata con il prefisso APPROLE_.

Quando si usa appRoles come roles attestazione, evitare di configurare un attributo di gruppo contemporaneamente roles . In caso contrario, l'attributo group eseguirà l'override dell'attestazione per contenere informazioni sul gruppo anziché appRoles. È consigliabile evitare la configurazione seguente nel manifesto:

"optionalClaims": {
    "idtoken": [{
        "name": "groups",
        "additionalProperties": ["emit_as_roles"]
    }]
}

Per supportare il controllo di accesso in base al token ID in un'applicazione Web, seguire questa procedura:

Aggiungere ruoli dell'app nell'applicazione e assegnarli a utenti o gruppi. Per altre informazioni, vedere Procedura: Aggiungere ruoli dell'app all'applicazione e riceverli nel token.

Aggiungere la configurazione seguente appRoles al manifesto dell'applicazione:

 "appRoles": [
   {
     "allowedMemberTypes": [
       "User"
     ],
     "displayName": "Admin",
     "id": "2fa848d0-8054-4e11-8c73-7af5f1171001",
     "isEnabled": true,
     "description": "Full admin access",
     "value": "Admin"
    }
 ]

Aggiungere codice all'applicazione simile all'esempio seguente:

@GetMapping("Admin")
@ResponseBody
@PreAuthorize("hasAuthority('APPROLE_Admin')")
public String Admin() {
   return "Admin message";
}

Risoluzione dei problemi

Abilitare la registrazione client

Gli SDK di Azure per Java offrono una storia di registrazione coerente per risolvere e risolvere gli errori delle applicazioni. I log prodotti acquisiranno il flusso di un'applicazione prima di raggiungere il terminale, consentendo di individuare il problema radice. Visualizzare il wiki di registrazione per indicazioni sull'abilitazione della registrazione.

Abilitare la registrazione Spring

Spring consente a tutti i sistemi di registrazione supportati di impostare i livelli di logger nell'ambiente Spring (ad esempio, in application.properties) usando logging.level.<logger-name>=<level> dove level è uno dei livelli TRACE, DEBUG, INFO, WARN, ERROR, FATAL o OFF. È possibile configurare il logger radice usando logging.level.root.

L'esempio seguente mostra le potenziali impostazioni di registrazione nel file application.properties :

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

Per altre informazioni sulla configurazione della registrazione in Spring, vedere Registrazione nella documentazione di Spring.

Passaggi successivi

Per altre informazioni su Spring e Azure, passare al centro di documentazione di Spring in Azure.