Utvecklarguide för Spring Boot Starter för Microsoft Entra

Den här artikeln gäller för: ✔️ Version 4.18.0 ✔️ Version 5.12.0

Den här artikeln beskriver funktionerna och huvudscenarierna i Spring Boot Starter för Microsoft Entra ID. Artikeln innehåller även vägledning om vanliga problem, lösningar och diagnostiksteg.

När du skapar ett webbprogram är identitets- och åtkomsthantering grundläggande delar. Azure erbjuder en molnbaserad identitetstjänst som har djup integrering med resten av Azure-ekosystemet.

Även om Spring Security gör det enkelt att skydda dina Spring-baserade program är det inte skräddarsytt för en specifik identitetsprovider. Med Spring Boot Starter för Microsoft Entra ID kan du ansluta din webbapp till en Microsoft Entra-klientorganisation och skydda resursservern med Microsoft Entra-ID. Det använder Oauth 2.0-protokollet för att skydda webbprogram och resursservrar.

Följande länkar ger åtkomst till startpaketet, dokumentationen och exemplen:

Förutsättningar

Om du vill följa anvisningarna i den här guiden måste du ha följande förutsättningar:

Viktigt!

Spring Boot version 2.5 eller senare krävs för att slutföra stegen i den här artikeln.

Grundläggande scenarier

Den här guiden beskriver hur du använder Microsoft Entra Starter i följande scenarier:

Ett webbprogram är ett webbaserat program som gör det möjligt för en användare att logga in. En resursserver accepterar eller nekar åtkomst när en åtkomsttoken har verifierats.

Få åtkomst till ett webbprogram

I det här scenariot används beviljandeflödet för OAuth 2.0-auktoriseringskoden för att göra det möjligt för en användare att logga in med ett Microsoft-konto.

Använd följande steg för att använda Microsoft Entra Starter i det här scenariot:

Ange omdirigerings-URI till <application-base-uri>/login/oauth2/code/. Exempel: http://localhost:8080/login/oauth2/code/. Se till att inkludera den avslutande /. Mer information om omdirigerings-URI finns i Lägga till en omdirigerings-URI i Snabbstart: Registrera ett program med Microsofts identitetsplattform.

Skärmbild av Azure-portalen som visar Microsoft Entra-Appregistreringar sida med exempelwebbapp markerad.

Skärmbild av Azure-portalen som visar autentiseringssidan för webbappar med omdirigerings-URI markerad.

Lägg till följande beroenden i din pom.xml-fil .

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

Kommentar

Mer information om hur du hanterar Spring Cloud Azure-biblioteksversioner med hjälp av en strukturliste (BOM) finns i avsnittet Komma igång i utvecklarguiden för Spring Cloud Azure.

Lägg till följande egenskaper i din application.yml-fil . Du kan hämta värdena för dessa egenskaper från appregistreringen som du skapade i Azure-portalen, enligt beskrivningen i förutsättningarna.

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

Kommentar

De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din app för en klientorganisation finns i Konvertera en klientorganisationsapp till flera klientorganisationer på Microsoft Entra-ID.

Använd standardsäkerhetskonfigurationen eller ange en egen konfiguration.

Alternativ 1: Använd standardkonfigurationen.

Med det här alternativet behöver du inte göra något. Klassen DefaultAadWebSecurityConfigurerAdapter konfigureras automatiskt.

Alternativ 2: Ange en självdefinierad konfiguration.

Om du vill ange en konfiguration utökar du AadWebSecurityConfigurerAdapter klassen och anropar super.configure(http) i configure(HttpSecurity http) funktionen, som du ser i följande exempel:

@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.
   }
}

Få åtkomst till resursservrar från ett webbprogram

Använd följande steg för att använda Microsoft Entra Starter i det här scenariot:

Ange omdirigerings-URI enligt beskrivningen tidigare.

Lägg till följande beroenden i din pom.xml-fil .

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

Kommentar

Mer information om hur du hanterar Spring Cloud Azure-biblioteksversioner med hjälp av en strukturliste (BOM) finns i avsnittet Komma igång i utvecklarguiden för Spring Cloud Azure.

Lägg till följande egenskaper i din application.yml-fil enligt beskrivningen tidigare:

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

Kommentar

De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din app för en klientorganisation finns i Konvertera en klientorganisationsapp till flera klientorganisationer på Microsoft Entra-ID.

graph Här är namnet på din OAuth2AuthorizedClient, och scopes är de omfång som krävs för medgivande när du loggar in.

Lägg till kod i ditt program som liknar följande exempel:

@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);
}

graph Här är det klient-ID som konfigurerades i föregående steg. OAuth2AuthorizedClient innehåller åtkomsttoken som används för att komma åt resursservern.

Ett fullständigt exempel som visar det här scenariot finns i spring-cloud-azure-starter-active-directory sample: aad-web-application.

Skydda en resursserver/API

Det här scenariot stöder inte inloggning, men skyddar servern genom att verifiera åtkomsttoken. Om åtkomsttoken är giltig hanterar servern begäran.

Använd följande steg för att använda Microsoft Entra Starter i det här scenariot:

Lägg till följande beroenden i din pom.xml-fil .

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

Kommentar

Mer information om hur du hanterar Spring Cloud Azure-biblioteksversioner med hjälp av en strukturliste (BOM) finns i avsnittet Komma igång i utvecklarguiden för Spring Cloud Azure.

Lägg till följande egenskaper i din application.yml-fil enligt beskrivningen tidigare:

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

Du kan använda både <värdena your-client-ID> och <your-app-ID-URI> för att verifiera åtkomsttoken. Du kan hämta <värdet your-app-ID-URI> från Azure-portalen, enligt följande bilder:

Skärmbild av Azure-portalen som visar Microsoft Entra-Appregistreringar sida med sample-resource-server markerad.

Skärmbild av Azure-portalen som visar webbappen Exponera en API-sida med program-ID-URI markerat.

Använd standardsäkerhetskonfigurationen eller ange en egen konfiguration.

Alternativ 1: Använd standardkonfigurationen.

Med det här alternativet behöver du ingenting. Klassen DefaultAadResourceServerWebSecurityConfigurerAdapter konfigureras automatiskt.

Alternativ 2: Ange en självdefinierad konfiguration.

Om du vill ange en konfiguration utökar du AadResourceServerWebSecurityConfigurerAdapter klassen och anropar super.configure(http) i configure(HttpSecurity http) funktionen, som du ser i följande exempel:

@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());
   }
}

Ett fullständigt exempel som visar det här scenariot finns i spring-cloud-azure-starter-active-directory sample: aad-resource-server.

Få åtkomst till andra resursservrar från en resursserver

Det här scenariot stöder en resursserver som besöker andra resursservrar.

Använd följande steg för att använda Microsoft Entra Starter i det här scenariot:

Lägg till följande beroenden i din pom.xml-fil .

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

Kommentar

Mer information om hur du hanterar Spring Cloud Azure-biblioteksversioner med hjälp av en strukturliste (BOM) finns i avsnittet Komma igång i utvecklarguiden för Spring Cloud Azure.

Lägg till följande egenskaper i din application.yml-fil :

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

Kommentar

De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din app för en klientorganisation finns i Konvertera en klientorganisationsapp till flera klientorganisationer på Microsoft Entra-ID.

@RegisteredOAuth2AuthorizedClient Använd attributet i koden för att komma åt den relaterade resursservern, som du ser i följande exempel:

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

Ett fullständigt exempel som visar det här scenariot finns i spring-cloud-azure-starter-active-directory sample: aad-resource-server-obo.

Webbprogram och resursserver i ett program

Det här scenariot stöder Åtkomst till ett webbprogram och Skydda en resursserver/API i ett program.

Följ dessa steg för att använda aad-starter i det här scenariot:

Lägg till följande beroenden i din pom.xml-fil .

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

Kommentar

Mer information om hur du hanterar Spring Cloud Azure-biblioteksversioner med hjälp av en strukturliste (BOM) finns i avsnittet Komma igång i utvecklarguiden för Spring Cloud Azure.

Uppdatera din application.yml-fil . Ange egenskapen spring.cloud.azure.active-directory.application-type till web_application_and_resource_serveroch ange auktoriseringstypen för varje auktoriseringsklient, enligt följande exempel.

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

Kommentar

De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din app för en klientorganisation finns i Konvertera en klientorganisationsapp till flera klientorganisationer på Microsoft Entra-ID.

Skriv Java-kod för att konfigurera flera HttpSecurity instanser.

I följande exempelkod AadWebApplicationAndResourceServerConfig innehåller två säkerhetskonfigurationer, en för en resursserver och en för ett webbprogram. Klassen ApiWebSecurityConfigurationAdapter har hög prioritet för att konfigurera resursserverns säkerhetskort. Klassen HtmlWebSecurityConfigurerAdapter har låg prioritet för att konfigurera webbprogrammets säkerhetskort.

@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
       }
   }
}

Apptyp

Egenskapen spring.cloud.azure.active-directory.application-type är valfri eftersom dess värde kan härledas av beroenden. Du måste endast ange egenskapen manuellt när du använder web_application_and_resource_server värdet.

Har beroende: spring-security-oauth2-client Har beroende: spring-security-oauth2-resource-server Giltiga värden för programtyp Default value
Ja Nej web_application web_application
Nej Ja resource_server resource_server
Ja Ja web_application,resource_server,
resource_server_with_obo, web_application_and_resource_server
resource_server_with_obo

Konfigurerbara egenskaper

Spring Boot Starter för Microsoft Entra ID innehåller följande egenskaper:

Egenskaper beskrivning
spring.cloud.azure.active-directory.app-id-uri Används av resursservern för att verifiera målgruppen i åtkomsttoken. Åtkomsttoken är endast giltig när målgruppen är lika med värdena <your-client-ID> eller <your-app-ID-URI> som beskrevs tidigare.
spring.cloud.azure.active-directory.authorization-clients En karta som konfigurerar resurs-API:erna som programmet ska besöka. Varje objekt motsvarar ett resurs-API som programmet kommer att besöka. I Din Spring-kod motsvarar varje objekt ett OAuth2AuthorizedClient objekt.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name.scopes> API-behörigheterna för en resursserver som programmet ska hämta.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name.authorization-grant-type> Typ av auktoriseringsklient. Typer som stöds är authorization_code (standardtyp för webbapp), on_behalf_of (standardtyp för resursserver) client_credentials.
spring.cloud.azure.active-directory.application-type Se Programtyp.
spring.cloud.azure.active-directory.profile.environment.active-directory-endpoint Bas-URI:n för auktoriseringsservern. Standardvärdet är https://login.microsoftonline.com/.
spring.cloud.azure.active-directory.credential.client-id Det registrerade program-ID:t i Microsoft Entra-ID.
spring.cloud.azure.active-directory.credential.client-secret Klienthemligheten för det registrerade programmet.
spring.cloud.azure.active-directory.user-group.use-transitive-members Använd v1.0/me/transitiveMemberOf för att hämta grupper om det är inställt på sant. Annars använder du /v1.0/me/memberOf.
spring.cloud.azure.active-directory.post-logout-redirect-uri Omdirigerings-URI:n för att publicera utloggningen.
spring.cloud.azure.active-directory.profile.tenant-id Azure-klientorganisations-ID: t. De värden som tillåts för tenant-id är: common, organizations, consumerseller klientorganisations-ID.
spring.cloud.azure.active-directory.user-group.allowed-group-names De förväntade användargrupper som en utfärdare beviljas till om det hittas i svaret från Graph API-anropet MemberOf .
spring.cloud.azure.active-directory.user-name-attribute Anger vilket anspråk som ska vara huvudnamnets namn.

I följande exempel visas hur du använder dessa egenskaper:

Egenskapsexempel 1: Använd följande steg om du vill använda Azure China 21Vianet i stället för Azure Global.

  • Lägg till följande egenskaper i din application.yml-fil :

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

Med den här metoden kan du använda ett nationellt Azure-moln eller ett nationellt moln i stället för det offentliga Azure-molnet.

Egenskapsexempel 2: Använd följande steg om du vill använda ett gruppnamn för att skydda någon metod i ett webbprogram:

Lägg till följande egenskap i din application.yml-fil :

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

Använd standardsäkerhetskonfigurationen eller ange en egen konfiguration.

Alternativ 1: Använd standardkonfigurationen. Med det här alternativet behöver du inte göra något. Klassen DefaultAadWebSecurityConfigurerAdapter konfigureras automatiskt.

Alternativ 2: Ange en självdefinierad konfiguration. Om du vill ange en konfiguration utökar du AadWebSecurityConfigurerAdapter klassen och anropar super.configure(http) i configure(HttpSecurity http) funktionen, som du ser i följande exempel:

@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.
   }
}

Använd kommentaren @PreAuthorize för att skydda metoden, som du ser i följande exempel:

@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";
   }
}

Egenskapsexempel 3: Använd följande steg för att aktivera flöde för klientautentiseringsuppgifter på en resursserver som besöker resursservrar:

Lägg till följande egenskap i din application.yml-fil :

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

Lägg till kod i ditt program som liknar följande exempel:

@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.");
}

Avancerade funktioner

Stöd för åtkomstkontroll via ID-token i ett webbprogram

Startprogrammet har stöd för att skapa GrantedAuthority från en ID-tokens roles anspråk för att tillåta användning av ID-token för auktorisering i ett webbprogram. Du kan använda funktionen i appRoles Microsoft Entra-ID för att skapa ett roles anspråk och implementera åtkomstkontroll.

Kommentar

Anspråket roles som genereras från appRoles är dekorerat med prefixet APPROLE_.

När du använder appRoles som ett roles anspråk bör du undvika att konfigurera ett gruppattribut som roles på samma gång. Annars åsidosätter gruppattributet anspråket så att det innehåller gruppinformation i stället för appRoles. Du bör undvika följande konfiguration i manifestet:

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

Använd följande steg för att stödja åtkomstkontroll via ID-token i ett webbprogram:

Lägg till approller i ditt program och tilldela dem till användare eller grupper. Mer information finns i Så här lägger du till approller i ditt program och tar emot dem i token.

Lägg till följande appRoles konfiguration i programmets manifest:

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

Lägg till kod i ditt program som liknar följande exempel:

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

Felsökning

Aktivera klientloggning

Azure SDK:er för Java erbjuder en konsekvent loggningshistoria som hjälper dig att felsöka och lösa programfel. Loggarna som skapas samlar in flödet för ett program innan de når terminalen, vilket hjälper till att hitta rotproblemet. Se loggnings-wikin för vägledning om hur du aktiverar loggning.

Aktivera Spring-loggning

Spring gör det möjligt för alla loggningssystem som stöds att ange loggningsnivåer i Spring-miljön (till exempel i application.properties) genom att använda logging.level.<logger-name>=<level> där nivån är en av TRACE, DEBUG, INFO, WARN, ERROR, FATAL eller OFF. Du kan konfigurera rotloggaren med hjälp logging.level.rootav .

I följande exempel visas potentiella loggningsinställningar i filen application.properties :

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

Mer information om loggningskonfiguration i Spring finns i Loggning i Spring-dokumentationen.

Nästa steg

Om du vill veta mer om Spring och Azure kan du fortsätta till dokumentationscentret för Spring i Azure.