Udostępnij za pośrednictwem


Przewodnik dewelopera Spring Boot Starter dla firmy Microsoft Entra

Ten artykuł dotyczy:✅ wersja 4.19.0 ✅ w wersji 5.18.0

W tym artykule opisano funkcje i podstawowe scenariusze szablonu startowego Spring Boot dla identyfikatora Entra firmy Microsoft. Ten artykuł zawiera również wskazówki dotyczące typowych problemów, obejść i kroków diagnostycznych.

Podczas tworzenia aplikacji internetowej tożsamość i zarządzanie dostępem są podstawowymi elementami. Platforma Azure oferuje usługę tożsamości opartą na chmurze, która ma głęboką integrację z resztą ekosystemu platformy Azure.

Mimo że usługa Spring Security ułatwia zabezpieczanie aplikacji opartych na platformie Spring, nie jest dostosowane do określonego dostawcy tożsamości. Szablon startowy Spring Boot dla usługi Microsoft Entra ID umożliwia łączenie aplikacji internetowej z dzierżawą firmy Microsoft Entra i ochronę serwera zasobów za pomocą identyfikatora Entra firmy Microsoft. Używa protokołu Oauth 2.0 do ochrony aplikacji internetowych i serwerów zasobów.

Poniższe linki zapewniają dostęp do pakietu startowego, dokumentacji i przykładów:

Wymagania wstępne

Aby postępować zgodnie z instrukcjami w tym przewodniku, musisz mieć następujące wymagania wstępne:

Ważne

Do wykonania kroków opisanych w tym artykule jest wymagany program Spring Boot w wersji 2.5 lub nowszej.

Podstawowe scenariusze

W tym przewodniku opisano sposób używania szablonu startowego Firmy Microsoft Entra w następujących scenariuszach:

Aplikacja internetowa to dowolna aplikacja internetowa, która umożliwia użytkownikowi logowanie się. Serwer zasobów zaakceptuje lub odmówi dostępu po zweryfikowaniu tokenu dostępu.

Uzyskiwanie dostępu do aplikacji internetowej

W tym scenariuszu jest używany przepływ udzielania kodu autoryzacji OAuth 2.0, aby umożliwić użytkownikowi logowanie się przy użyciu konta Microsoft.

Aby użyć szablonu startowego firmy Microsoft Entra w tym scenariuszu, wykonaj następujące kroki:

Ustaw identyfikator URI przekierowania na <wartość application-base-uri>/login/oauth2/code/. Na przykład: http://localhost:8080/login/oauth2/code/. Pamiętaj, aby uwzględnić końcowy /ciąg . Aby uzyskać więcej informacji na temat identyfikatora URI przekierowania, zobacz Dodawanie identyfikatora URI przekierowania w przewodniku Szybki start: rejestrowanie aplikacji przy użyciu Platforma tożsamości Microsoft.

Zrzut ekranu witryny Azure Portal przedstawiający stronę uwierzytelniania aplikacji internetowej z wyróżnionym identyfikatorem URI przekierowania.

Dodaj następujące zależności do pliku 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>

Uwaga

Aby uzyskać więcej informacji na temat zarządzania wersjami bibliotek platformy Azure spring Cloud przy użyciu rachunku materiałów (BOM), zobacz sekcję Wprowadzenie w przewodniku deweloperów platformy Azure Spring Cloud.

Dodaj następujące właściwości do pliku application.yml . Wartości tych właściwości można uzyskać z poziomu rejestracji aplikacji utworzonej w witrynie Azure Portal, zgodnie z opisem w wymaganiach wstępnych.

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

Uwaga

Dozwolone tenant-id wartości to: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użycie nieprawidłowego punktu końcowego (konta osobiste i konta organizacji) w sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje w dzierżawie. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Konwertowanie aplikacji z jedną dzierżawą na wielodostępny w usłudze Microsoft Entra ID.

Użyj domyślnej konfiguracji zabezpieczeń lub podaj własną konfigurację.

Opcja 1. Użyj konfiguracji domyślnej.

Dzięki tej opcji nie musisz nic robić. Klasa DefaultAadWebSecurityConfigurerAdapter jest konfigurowana automatycznie.

Opcja 2. Podaj konfigurację zdefiniowaną przez siebie.

Aby zapewnić konfigurację, rozszerz AadWebSecurityConfigurerAdapter klasę i wywołanie super.configure(http) w configure(HttpSecurity http) funkcji, jak pokazano w poniższym przykładzie:

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

Uzyskiwanie dostępu do serwerów zasobów z poziomu aplikacji internetowej

Aby użyć szablonu startowego firmy Microsoft Entra w tym scenariuszu, wykonaj następujące kroki:

Ustaw identyfikator URI przekierowania zgodnie z wcześniejszym opisem.

Dodaj następujące zależności do pliku 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>

Uwaga

Aby uzyskać więcej informacji na temat zarządzania wersjami bibliotek platformy Azure spring Cloud przy użyciu rachunku materiałów (BOM), zobacz sekcję Wprowadzenie w przewodniku deweloperów platformy Azure Spring Cloud.

Dodaj następujące właściwości do pliku application.yml , jak opisano wcześniej:

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

Uwaga

Dozwolone tenant-id wartości to: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użycie nieprawidłowego punktu końcowego (konta osobiste i konta organizacji) w sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje w dzierżawie. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Konwertowanie aplikacji z jedną dzierżawą na wielodostępny w usłudze Microsoft Entra ID.

graph W tym miejscu znajduje się nazwa elementu OAuth2AuthorizedClienti scopes są zakresami wymaganymi do uzyskania zgody podczas logowania.

Dodaj kod do aplikacji podobny do poniższego przykładu:

@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 W tym miejscu identyfikator klienta jest skonfigurowany w poprzednim kroku. OAuth2AuthorizedClient zawiera token dostępu, który jest używany do uzyskiwania dostępu do serwera zasobów.

Aby zapoznać się z kompletnym przykładem pokazującym ten scenariusz, zobacz przykład spring-cloud-azure-starter-active-directory: aad-web-application.

Ochrona serwera zasobów/interfejsu API

Ten scenariusz nie obsługuje logowania, ale chroni serwer, sprawdzając token dostępu. Jeśli token dostępu jest prawidłowy, serwer obsługuje żądanie.

Aby użyć szablonu startowego firmy Microsoft Entra w tym scenariuszu, wykonaj następujące kroki:

Dodaj następujące zależności do pliku 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>

Uwaga

Aby uzyskać więcej informacji na temat zarządzania wersjami bibliotek platformy Azure spring Cloud przy użyciu rachunku materiałów (BOM), zobacz sekcję Wprowadzenie w przewodniku deweloperów platformy Azure Spring Cloud.

Dodaj następujące właściwości do pliku application.yml , jak opisano wcześniej:

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

Aby zweryfikować token dostępu, możesz użyć zarówno wartości your-client-ID-,> jak i< identyfikatora-URI> aplikacji.< Wartość your-app-ID-URI> można pobrać <z witryny Azure Portal, jak pokazano na poniższych obrazach:

Zrzut ekranu witryny Azure Portal przedstawiający aplikację internetową Uwidacznia stronę interfejsu API z wyróżnionym identyfikatorem URI identyfikatora aplikacji.

Użyj domyślnej konfiguracji zabezpieczeń lub podaj własną konfigurację.

Opcja 1. Użyj konfiguracji domyślnej.

Dzięki tej opcji nie musisz nic robić. Klasa DefaultAadResourceServerWebSecurityConfigurerAdapter jest konfigurowana automatycznie.

Opcja 2. Podaj konfigurację zdefiniowaną przez siebie.

Aby zapewnić konfigurację, rozszerz AadResourceServerWebSecurityConfigurerAdapter klasę i wywołanie super.configure(http) w configure(HttpSecurity http) funkcji, jak pokazano w poniższym przykładzie:

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

Aby zapoznać się z kompletnym przykładem pokazującym ten scenariusz, zobacz przykład spring-cloud-azure-starter-active-directory: aad-resource-server.

Uzyskiwanie dostępu do innych serwerów zasobów z serwera zasobów

Ten scenariusz obsługuje serwer zasobów odwiedzający inne serwery zasobów.

Aby użyć szablonu startowego firmy Microsoft Entra w tym scenariuszu, wykonaj następujące kroki:

Dodaj następujące zależności do pliku 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>

Uwaga

Aby uzyskać więcej informacji na temat zarządzania wersjami bibliotek platformy Azure spring Cloud przy użyciu rachunku materiałów (BOM), zobacz sekcję Wprowadzenie w przewodniku deweloperów platformy Azure Spring Cloud.

Dodaj następujące właściwości do pliku 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

Uwaga

Dozwolone tenant-id wartości to: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użycie nieprawidłowego punktu końcowego (konta osobiste i konta organizacji) w sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje w dzierżawie. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Konwertowanie aplikacji z jedną dzierżawą na wielodostępny w usłudze Microsoft Entra ID.

Użyj atrybutu @RegisteredOAuth2AuthorizedClient w kodzie, aby uzyskać dostęp do powiązanego serwera zasobów, jak pokazano w poniższym przykładzie:

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

Aby zapoznać się z kompletnym przykładem pokazującym ten scenariusz, zobacz przykład spring-cloud-azure-starter-active-directory: aad-resource-server-obo.

Aplikacja internetowa i serwer zasobów w jednej aplikacji

Ten scenariusz obsługuje dostęp do aplikacji internetowej i ochronę serwera zasobów/interfejsu API w jednej aplikacji.

Aby użyć aad-starter w tym scenariuszu, wykonaj następujące kroki:

Dodaj następujące zależności do pliku 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>

Uwaga

Aby uzyskać więcej informacji na temat zarządzania wersjami bibliotek platformy Azure spring Cloud przy użyciu rachunku materiałów (BOM), zobacz sekcję Wprowadzenie w przewodniku deweloperów platformy Azure Spring Cloud.

Zaktualizuj plik application.yml. Ustaw właściwość spring.cloud.azure.active-directory.application-type na web_application_and_resource_server, i określ typ autoryzacji dla każdego klienta autoryzacji, jak pokazano w poniższym przykładzie.

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

Uwaga

Dozwolone tenant-id wartości to: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użycie nieprawidłowego punktu końcowego (konta osobiste i konta organizacji) w sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje w dzierżawie. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Konwertowanie aplikacji z jedną dzierżawą na wielodostępny w usłudze Microsoft Entra ID.

Napisz kod Java, aby skonfigurować wiele HttpSecurity wystąpień.

W poniższym przykładowym kodzie AadWebApplicationAndResourceServerConfig zawiera dwie konfiguracje zabezpieczeń, jedną dla serwera zasobów i jedną dla aplikacji internetowej. Klasa ApiWebSecurityConfigurationAdapter ma wysoki priorytet konfigurowania karty zabezpieczeń serwera zasobów. Klasa HtmlWebSecurityConfigurerAdapter ma niski priorytet konfigurowania karty zabezpieczeń aplikacji internetowej.

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

Typ aplikacji

Właściwość jest opcjonalna spring.cloud.azure.active-directory.application-type , ponieważ jej wartość może być wnioskowana przez zależności. Należy ręcznie ustawić właściwość tylko wtedy, gdy używasz web_application_and_resource_server wartości.

Ma zależność: spring-security-oauth2-client Ma zależność: spring-security-oauth2-resource-server Prawidłowe wartości typu aplikacji Domyślna wartość
Tak Nie. web_application web_application
Nie. Tak resource_server resource_server
Tak Tak web_application,resource_server,
resource_server_with_obo, web_application_and_resource_server
resource_server_with_obo

Konfigurowalne właściwości

Szablon startowy Spring Boot dla usługi Microsoft Entra ID zawiera następujące właściwości:

Właściwości opis
spring.cloud.azure.active-directory.app-id-uri Używany przez serwer zasobów do sprawdzania poprawności odbiorców w tokenie dostępu. Token dostępu jest prawidłowy tylko wtedy, gdy odbiorcy są równi <wartościom your-client-ID> lub <your-app-ID-URI> opisanym wcześniej.
spring.cloud.azure.active-directory.authorization-clients Mapa, która konfiguruje interfejsy API zasobów, które będzie odwiedzać aplikacja. Każdy element odpowiada jednemu interfejsowi API zasobów, który będzie odwiedzać aplikacja. W kodzie Spring każdy element odpowiada jednemu OAuth2AuthorizedClient obiektowi.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name.scopes> Uprawnienia interfejsu API serwera zasobów, który aplikacja ma uzyskać.
spring.cloud.azure.active-directory.authorization-clients.<nazwa-klienta.authorization-grant-type> Typ klienta autoryzacji. Obsługiwane typy to authorization_code (typ domyślny aplikacji internetowej), on_behalf_of (domyślny typ zasobu serwera), client_credentials.
spring.cloud.azure.active-directory.application-type Zapoznaj się z tematem Typ aplikacji.
spring.cloud.azure.active-directory.profile.environment.active-directory-endpoint Podstawowy identyfikator URI serwera autoryzacji. Domyślna wartość to https://login.microsoftonline.com/.
spring.cloud.azure.active-directory.credential.client-id Identyfikator zarejestrowanej aplikacji w identyfikatorze Entra firmy Microsoft.
spring.cloud.azure.active-directory.credential.client-secret Wpis tajny klienta zarejestrowanej aplikacji.
spring.cloud.azure.active-directory.user-group.use-transitive-members Użyj v1.0/me/transitiveMemberOf polecenia , aby pobrać grupy, jeśli ustawiono wartość true. W przeciwnym razie użyj polecenia /v1.0/me/memberOf.
spring.cloud.azure.active-directory.post-logout-redirect-uri Identyfikator URI przekierowania do publikowania wylogowywania.
spring.cloud.azure.active-directory.profile.tenant-id Identyfikator dzierżawy platformy Azure. Dozwolone tenant-id wartości to: common, organizations, consumerslub identyfikator dzierżawy.
spring.cloud.azure.active-directory.user-group.allowed-group-names Oczekiwane grupy użytkowników, którym zostanie udzielony urząd, jeśli zostanie znaleziony w odpowiedzi z wywołania interfejsu MemberOf API programu Graph.
spring.cloud.azure.active-directory.user-name-attribute Wskazuje, które oświadczenie będzie nazwą podmiotu zabezpieczeń.

W poniższych przykładach pokazano, jak używać tych właściwości:

Przykład właściwości 1: Aby użyć usługi Azure China 21Vianet zamiast globalnej platformy Azure, wykonaj następujący krok.

  • Dodaj następujące właściwości do pliku application.yml :

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

Za pomocą tej metody można użyć suwerennej lub krajowej chmury platformy Azure zamiast chmury publicznej platformy Azure.

Przykład właściwości 2: Aby użyć nazwy grupy do ochrony jakiejś metody w aplikacji internetowej, wykonaj następujące kroki:

Dodaj następującą właściwość do pliku application.yml :

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

Użyj domyślnej konfiguracji zabezpieczeń lub podaj własną konfigurację.

Opcja 1. Użyj konfiguracji domyślnej. Dzięki tej opcji nie musisz nic robić. Klasa DefaultAadWebSecurityConfigurerAdapter jest konfigurowana automatycznie.

Opcja 2. Podaj konfigurację zdefiniowaną przez siebie. Aby zapewnić konfigurację, rozszerz AadWebSecurityConfigurerAdapter klasę i wywołanie super.configure(http) w configure(HttpSecurity http) funkcji, jak pokazano w poniższym przykładzie:

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

@PreAuthorize Użyj adnotacji, aby chronić metodę, jak pokazano w poniższym przykładzie:

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

Przykład właściwości 3: Aby włączyć przepływ poświadczeń klienta na serwerze zasobów odwiedzającym serwery zasobów, wykonaj następujące kroki:

Dodaj następującą właściwość do pliku 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

Dodaj kod do aplikacji podobny do poniższego przykładu:

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

Funkcje zaawansowane

Obsługa kontroli dostępu według tokenu identyfikatora w aplikacji internetowej

Szablon startowy obsługuje tworzenie GrantedAuthority na podstawie oświadczenia tokenu identyfikatora roles , aby zezwolić na używanie tokenu identyfikatora do autoryzacji w aplikacji internetowej. Możesz użyć appRoles funkcji Microsoft Entra ID, aby utworzyć roles oświadczenie i zaimplementować kontrolę dostępu.

Uwaga

Oświadczenie roles wygenerowane na podstawie appRoles jest ozdobione prefiksem APPROLE_.

W przypadku używania appRoles roles jako oświadczenia należy unikać konfigurowania atrybutu grupy co roles w tym samym czasie. W przeciwnym razie atrybut grupy zastąpi oświadczenie, aby zawierał informacje o grupie zamiast appRoles. Należy unikać następującej konfiguracji w manifeście:

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

Aby obsługiwać kontrolę dostępu według tokenu identyfikatora w aplikacji internetowej, wykonaj następujące kroki:

Dodaj role aplikacji w aplikacji i przypisz je do użytkowników lub grup. Aby uzyskać więcej informacji, zobacz How to: Add app roles to your application and receive them in the token (Instrukcje: dodawanie ról aplikacji do aplikacji i odbieranie ich w tokenie).

Dodaj następującą appRoles konfigurację do manifestu aplikacji:

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

Dodaj kod do aplikacji podobny do poniższego przykładu:

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

Rozwiązywanie problemów

Włączanie rejestrowania klientów

Zestawy SDK platformy Azure dla języka Java oferują spójny scenariusz rejestrowania, który ułatwia rozwiązywanie problemów z błędami aplikacji i rozwiązywanie ich. Wygenerowane dzienniki przechwytują przepływ aplikacji przed dotarciem do terminalu, pomagając zlokalizować główny problem. Wyświetl witrynę typu wiki rejestrowania, aby uzyskać wskazówki dotyczące włączania rejestrowania.

Włączanie rejestrowania spring

Platforma Spring umożliwia wszystkim obsługiwanym systemom rejestrowania ustawianie poziomów rejestratora w środowisku Spring (na przykład w pliku application.properties) przy użyciu metody logging.level.<logger-name>=<level> , gdzie poziom jest jednym z poziomów TRACE, DEBUG, INFO, WARN, ERROR, FATAL lub OFF. Główny rejestrator można skonfigurować przy użyciu polecenia logging.level.root.

W poniższym przykładzie przedstawiono potencjalne ustawienia rejestrowania w pliku application.properties :

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

Aby uzyskać więcej informacji na temat konfiguracji rejestrowania na platformie Spring, zobacz Rejestrowanie w dokumentacji platformy Spring.

Następne kroki

Aby dowiedzieć się więcej na temat oprogramowania Spring i platformy Azure, przejdź do centrum dokumentacji dotyczącej oprogramowania Spring na platformie Azure.