Freigeben über


Spring Boot Starter: Entwicklerhandbuch für Microsoft Entra

In diesem Artikel werden die Features und Kernszenarien des Spring Boot Starter für Microsoft Entra ID beschrieben. Der Artikel enthält auch Anleitungen zu häufigen Problemen, Problemumgehungen und Diagnoseschritten.

Beim Erstellen einer Webanwendung sind Identitäts- und Zugriffsverwaltung grundlegende Bestandteile. Azure bietet einen cloudbasierten Identitätsdienst, der umfassende Integration in den Rest des Azure-Ökosystems bietet.

Obwohl Spring Security es einfach macht, Ihre Spring-basierten Anwendungen zu sichern, ist sie nicht auf einen bestimmten Identitätsanbieter zugeschnitten. Mit dem Spring Boot Starter für Microsoft Entra ID können Sie Ihre Webanwendung mit einem Microsoft Entra-Mandanten verbinden und Ihren Ressourcenserver mit Microsoft Entra ID schützen. Es verwendet das Oauth 2.0-Protokoll zum Schutz von Webanwendungen und Ressourcenservern.

Die folgenden Links bieten Zugriff auf das Startpaket, die Dokumentation und Beispiele:

Voraussetzungen

Um den Anweisungen in diesem Leitfaden zu folgen, müssen Sie über die folgenden Voraussetzungen verfügen:

Von Bedeutung

Spring Boot Version 2.5 oder höher ist erforderlich, um die Schritte in diesem Artikel auszuführen.

Kernszenarien

In diesem Leitfaden wird die Verwendung des Microsoft Entra Starters in den folgenden Szenarien beschrieben:

Eine Webanwendung ist eine beliebige webbasierte Anwendung, die es einem Benutzer ermöglicht, sich anzumelden. Ein Ressourcenserver akzeptiert oder verweigert den Zugriff nach der Überprüfung eines Zugriffstokens.

Zugreifen auf eine Webanwendung

In diesem Szenario wird der OAuth 2.0-Autorisierungscode-Genehmigungsfluss verwendet, damit sich ein Benutzer mit einem Microsoft-Konto anmelden kann.

Führen Sie die folgenden Schritte aus, um den Microsoft Entra-Starter in diesem Szenario zu verwenden:

Legen Sie den Umleitungs-URI auf <application-base-uri>/login/oauth2/code/. Beispiel: http://localhost:8080/login/oauth2/code/. Achten Sie darauf, dass Sie den nachstehenden / hinzufügen. Weitere Informationen zum Umleitungs-URI finden Sie unter Hinzufügen eines Umleitungs-URI in der Schnellstartanleitung: Registrieren einer Anwendung mit der Microsoft Identity Platform.

Screenshot des Azure-Portals mit der Seite

Fügen Sie der pom.xml Datei die folgenden Abhängigkeiten hinzu.

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

Hinweis

Weitere Informationen zum Verwalten von Spring Cloud Azure-Bibliotheksversionen mithilfe einer Stückliste (BoM) finden Sie im Abschnitt " Erste Schritte " des Azure-Entwicklerhandbuchs für Spring Cloud.

Fügen Sie der datei application.yml die folgenden Eigenschaften hinzu. Sie können die Werte für diese Eigenschaften aus der App-Registrierung abrufen, die Sie im Azure-Portal erstellt haben, wie in den Voraussetzungen beschrieben.

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

Hinweis

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falscher Endpunkt verwendet (Persönliche und Organisationskonten) aus Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist nicht im Mandanten vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in eine mehrinstanzfähige Microsoft Entra ID.

Verwenden Sie die Standardsicherheitskonfiguration, oder stellen Sie Ihre eigene Konfiguration bereit.

Option 1: Verwenden Sie die Standardkonfiguration.

Mit dieser Option müssen Sie nichts tun. Die DefaultAadWebSecurityConfiguration Klasse wird automatisch konfiguriert.

Option 2: Stellen Sie eine selbstdefinierte Konfiguration bereit.

Um eine Konfiguration bereitzustellen, wenden Sie die AadWebApplicationHttpSecurityConfigurer#aadWebApplication Methode auf das HttpSecurity an, wie im folgenden Beispiel gezeigt:

@Configuration(proxyBeanMethods = false)
@EnableWebSecurity
@EnableMethodSecurity
public class AadOAuth2LoginSecurityConfig {

   /**
    * Add configuration logic as needed.
    */
   @Bean
   SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
       http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
               .and()
           .authorizeHttpRequests()
               .anyRequest().authenticated();
           // Do some custom configuration.
       return http.build();
   }
}

Zugreifen auf Ressourcenserver aus einer Webanwendung

Führen Sie die folgenden Schritte aus, um den Microsoft Entra-Starter in diesem Szenario zu verwenden:

Legen Sie den Umleitungs-URI wie zuvor beschrieben fest.

Fügen Sie der pom.xml Datei die folgenden Abhängigkeiten hinzu.

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

Hinweis

Weitere Informationen zum Verwalten von Spring Cloud Azure-Bibliotheksversionen mithilfe einer Stückliste (BoM) finden Sie im Abschnitt " Erste Schritte " des Azure-Entwicklerhandbuchs für Spring Cloud.

Fügen Sie ihrer application.yml-Datei die folgenden Eigenschaften hinzu, wie zuvor beschrieben:

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

Hinweis

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falscher Endpunkt verwendet (Persönliche und Organisationskonten) aus Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist nicht im Mandanten vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in eine mehrinstanzfähige Microsoft Entra ID.

Hier ist graph der Name von OAuth2AuthorizedClient, und scopes steht für die Bereiche, die beim Anmelden für die Einwilligung benötigt werden.

Fügen Sie Ihrer Anwendung Code wie im folgenden Beispiel hinzu:

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

Hier ist die im vorherigen Schritt konfigurierte Client-ID graph. OAuth2AuthorizedClient enthält das Zugriffstoken, das für den Zugriff auf den Ressourcenserver verwendet wird.

Für ein vollständiges Beispiel, das dieses Szenario zeigt, sehen Sie sich spring-cloud-azure-starter-active-directory Beispiel: aad-web-application an.

Schützen eines Ressourcenservers/einer API

In diesem Szenario wird die Anmeldung nicht unterstützt, der Server wird jedoch durch Überprüfen des Zugriffstokens geschützt. Wenn das Zugriffstoken gültig ist, dient der Server der Anforderung.

Führen Sie die folgenden Schritte aus, um den Microsoft Entra-Starter in diesem Szenario zu verwenden:

Fügen Sie der pom.xml Datei die folgenden Abhängigkeiten hinzu.

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

Hinweis

Weitere Informationen zum Verwalten von Spring Cloud Azure-Bibliotheksversionen mithilfe einer Stückliste (BoM) finden Sie im Abschnitt " Erste Schritte " des Azure-Entwicklerhandbuchs für Spring Cloud.

Fügen Sie ihrer application.yml-Datei die folgenden Eigenschaften hinzu, wie zuvor beschrieben:

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

Sie können sowohl die Werte <your-client-ID> als auch die <your-app-ID-URI> Werte verwenden, um das Zugriffstoken zu überprüfen. Sie können den <your-app-ID-URI> Wert aus dem Azure-Portal abrufen, wie in den folgenden Abbildungen dargestellt:

Screenshot: Azure-Portal, in dem die Web-App eine API-Seite angezeigt wird, auf der die Anwendungs-ID-URI hervorgehoben ist.

Verwenden Sie die Standardsicherheitskonfiguration, oder stellen Sie Ihre eigene Konfiguration bereit.

Option 1: Verwenden Sie die Standardkonfiguration.

Mit dieser Option müssen Sie nichts tun. Die DefaultAadResourceServerConfiguration Klasse wird automatisch konfiguriert.

Option 2: Stellen Sie eine selbstdefinierte Konfiguration bereit.

Um eine Konfiguration bereitzustellen, wenden Sie die AadResourceServerHttpSecurityConfigurer#aadResourceServer Methode auf das HttpSecurity an, wie im folgenden Beispiel gezeigt:

@Configuration(proxyBeanMethods = false)
@EnableWebSecurity
@EnableMethodSecurity
public class AadOAuth2ResourceServerSecurityConfig {

   /**
    * Add configuration logic as needed.
    */
   @Bean
   public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {
       http.apply(AadResourceServerHttpSecurityConfigurer.aadResourceServer())
               .and()
           .authorizeHttpRequests()
               .anyRequest().authenticated();
       return http.build();
   }
}

Ein vollständiges Beispiel für dieses Szenario finden Sie unter spring-cloud-azure-starter-active-directory sample: aad-resource-server.

Zugreifen auf andere Ressourcenserver von einem Ressourcenserver

Dieses Szenario unterstützt einen Ressourcenserver, der andere Ressourcenserver besucht.

Führen Sie die folgenden Schritte aus, um den Microsoft Entra-Starter in diesem Szenario zu verwenden:

Fügen Sie der pom.xml Datei die folgenden Abhängigkeiten hinzu.

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

Hinweis

Weitere Informationen zum Verwalten von Spring Cloud Azure-Bibliotheksversionen mithilfe einer Stückliste (BoM) finden Sie im Abschnitt " Erste Schritte " des Azure-Entwicklerhandbuchs für Spring Cloud.

Fügen Sie der datei application.yml die folgenden Eigenschaften hinzu:

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

Hinweis

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falscher Endpunkt verwendet (Persönliche und Organisationskonten) aus Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist nicht im Mandanten vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in eine mehrinstanzfähige Microsoft Entra ID.

Verwenden Sie das @RegisteredOAuth2AuthorizedClient Attribut in Ihrem Code, um auf den zugehörigen Ressourcenserver zuzugreifen, wie im folgenden Beispiel gezeigt:

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

Ein vollständiges Beispiel für dieses Szenario finden Sie im spring-cloud-azure-starter-active-directory-Beispiel: aad-resource-server-obo.

Webanwendung und Ressourcenserver in einer Anwendung

Dieses Szenario unterstützt das Zugreifen auf eine Webanwendung und das Schützen eines Ressourcenservers/einer API in einer Anwendung.

Um aad-starter in diesem Szenario zu verwenden, führen Sie die folgenden Schritte aus:

Fügen Sie der pom.xml Datei die folgenden Abhängigkeiten hinzu.

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

Hinweis

Weitere Informationen zum Verwalten von Spring Cloud Azure-Bibliotheksversionen mithilfe einer Stückliste (BoM) finden Sie im Abschnitt " Erste Schritte " des Azure-Entwicklerhandbuchs für Spring Cloud.

Aktualisieren Sie Ihre application.yml Datei. Legen Sie die Eigenschaft spring.cloud.azure.active-directory.application-type auf web_application_and_resource_server, und geben Sie den Autorisierungstyp für jeden Autorisierungsclient an, wie im folgenden Beispiel gezeigt.

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

Hinweis

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falscher Endpunkt verwendet (Persönliche und Organisationskonten) aus Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist nicht im Mandanten vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in eine mehrinstanzfähige Microsoft Entra ID.

Schreiben Sie Java-Code, um mehrere HttpSecurity Instanzen zu konfigurieren.

Im folgenden Beispielcode AadWebApplicationAndResourceServerConfig enthält zwei Sicherheitsfilterkettenbohnen, eine für einen Ressourcenserver und eine für eine Webanwendung. Der apiFilterChain Bean hat eine hohe Priorität, um den Ressourcenserver-Sicherheits-Generator zu konfigurieren. Für das Bean htmlFilterChain ist die Priorität, den Sicherheitsgenerator der Webanwendung zu konfigurieren, niedrig.

@Configuration(proxyBeanMethods = false)
@EnableWebSecurity
@EnableMethodSecurity
public class AadWebApplicationAndResourceServerConfig {

    @Bean
    @Order(1)
    public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {
        http.apply(AadResourceServerHttpSecurityConfigurer.aadResourceServer())
                .and()
            // All the paths that match `/api/**`(configurable) work as the resource server. Other paths work as the web application.
            .securityMatcher("/api/**")
            .authorizeHttpRequests()
                .anyRequest().authenticated();
        return http.build();
    }

    @Bean
    public SecurityFilterChain htmlFilterChain(HttpSecurity http) throws Exception {
        // @formatter:off
        http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
                .and()
            .authorizeHttpRequests()
                .requestMatchers("/login").permitAll()
                .anyRequest().authenticated();
        // @formatter:on
        return http.build();
    }
}

Anwendungstyp

Die spring.cloud.azure.active-directory.application-type Eigenschaft ist optional, da ihr Wert von Abhängigkeiten abgeleitet werden kann. Sie müssen die Eigenschaft nur manuell festlegen, wenn Sie den web_application_and_resource_server Wert verwenden.

Weist eine Abhängigkeit auf: spring-security-oauth2-client Weist eine Abhängigkeit auf: spring-security-oauth2-resource-server Gültige Werte des Anwendungstyps Standardwert
Ja Nein web_application web_application
Nein Ja resource_server resource_server
Ja Ja web_application,resource_server,
resource_server_with_obo, web_application_and_resource_server
resource_server_with_obo

Konfigurierbare Eigenschaften

Der Spring Boot Starter für Microsoft Entra ID stellt die folgenden Eigenschaften bereit:

Eigenschaften BESCHREIBUNG
spring.cloud.azure.active-directory.app-id-uri Wird vom Ressourcenserver verwendet, um die Zielgruppe im Zugriffstoken zu überprüfen. Das Zugriffstoken ist nur gültig, wenn der Empfänger den zuvor beschriebenen Werten <your-client-ID> oder <your-app-ID-URI> entspricht.
spring.cloud.azure.active-directory.authorization-clients Eine Karte, die die Ressourcen-APIs konfiguriert, die die Anwendung besuchen wird. Jedes Element entspricht einer Ressourcen-API, die die Anwendung besuchen wird. In Ihrem Spring-Code entspricht jedes Element einem OAuth2AuthorizedClient-Objekt.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name>. Bereiche Die API-Berechtigungen eines Ressourcenservers, den die Anwendung erwerben wird.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name>. Autorisierungserteilungstyp Der Typ des Autorisierungsclients. Unterstützte Typen sind authorization_code (Standardtyp für Webapp), on_behalf_of (Standardtyp für Ressourcenserver), client_credentials.
spring.cloud.azure.active-directory.application-type Verweisen Sie auf den Anwendungstyp.
spring.cloud.azure.active-directory.profile.environment.active-directory-endpoint Der Basis-URI für den Autorisierungsserver. Der Standardwert ist https://login.microsoftonline.com/.
spring.cloud.azure.active-directory.credential.client-id Die registrierte Anwendungs-ID in Microsoft Entra ID.
spring.cloud.azure.active-directory.credential.client-secret Der geheime Clientschlüssel der registrierten Anwendung.
spring.cloud.azure.active-directory.user-group.use-transitive-members Verwenden Sie v1.0/me/transitiveMemberOf, um Gruppen abzurufen, wenn diese auf true festgelegt sind. Verwenden Sie andernfalls /v1.0/me/memberOf.
spring.cloud.azure.active-directory.post-logout-redirect-uri Der Umleitungs-URI für das Posten der Abmeldung.
spring.cloud.azure.active-directory.profile.tenant-id Die Azure-Mandanten-ID. Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID.
spring.cloud.azure.active-directory.user-group.allowed-group-names Die erwarteten Benutzergruppen, denen eine Berechtigung erteilt wird, wenn sie durch die Antwort des MemberOf Graph-API-Aufrufs identifiziert werden.
spring.cloud.azure.active-directory.user-name-attribute Gibt an, welcher Anspruch dem Namen des Prinzipals entspricht.

Die folgenden Beispiele zeigen, wie Sie diese Eigenschaften verwenden:

Eigenschaftsbeispiel 1: Wenn Sie Azure China 21Vianet anstelle von Azure Global verwenden möchten, verwenden Sie den folgenden Schritt.

  • Fügen Sie der datei application.yml die folgenden Eigenschaften hinzu:

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

Mit dieser Methode können Sie eine souveräne oder nationale Azure-Cloud anstelle der öffentlichen Azure-Cloud verwenden.

Eigenschaftsbeispiel 2: Wenn Sie einen Gruppennamen verwenden möchten, um eine Methode in einer Webanwendung zu schützen, führen Sie die folgenden Schritte aus:

Fügen Sie ihrer application.yml Datei die folgende Eigenschaft hinzu:

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

Verwenden Sie die Standardsicherheitskonfiguration, oder stellen Sie Ihre eigene Konfiguration bereit.

Option 1: Verwenden Sie die Standardkonfiguration. Mit dieser Option müssen Sie nichts tun. Die DefaultAadWebSecurityConfiguration Klasse wird automatisch konfiguriert.

Option 2: Stellen Sie eine selbstdefinierte Konfiguration bereit. Um eine Konfiguration bereitzustellen, wenden Sie die AadWebApplicationHttpSecurityConfigurer#aadWebApplication Methode auf das HttpSecurity an, wie im folgenden Beispiel gezeigt:

@Configuration(proxyBeanMethods = false)
@EnableWebSecurity
@EnableMethodSecurity
public class AadOAuth2LoginSecurityConfig {

   /**
    * Add configuration logic as needed.
    */
   @Bean
   public SecurityFilterChain htmlFilterChain(HttpSecurity http) throws Exception {
       // @formatter:off
       http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
               .and()
           .authorizeHttpRequests()
               .anyRequest().authenticated();
       // @formatter:on
       // Do some custom configuration.
       return http.build();
   }
}

Verwenden Sie die @PreAuthorize Anmerkung, um die Methode zu schützen, wie im folgenden Beispiel gezeigt:

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

Eigenschaftsbeispiel 3: Führen Sie die folgenden Schritte aus, um den Clientanmeldeinformationsfluss in einem Ressourcenserver zu aktivieren, der Ressourcenserver besucht:

Fügen Sie ihrer application.yml Datei die folgende Eigenschaft hinzu:

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

Fügen Sie Ihrer Anwendung Code wie im folgenden Beispiel hinzu:

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

Erweiterte Funktionen

Unterstützen der Zugriffssteuerung nach ID-Token in einer Webanwendung

Der Starter unterstützt das Erstellen von GrantedAuthority aus dem Claim roles eines ID-Tokens, um die Verwendung des ID-Tokens zur Autorisierung in einer Webanwendung zuzulassen. Sie können das appRoles Feature von Microsoft Entra ID verwenden, um einen roles Anspruch zu erstellen und die Zugriffssteuerung zu implementieren.

Hinweis

Der von roles generierte appRoles-Anspruch ist mit dem Präfix APPROLE_ versehen.

Vermeiden Sie bei der Verwendung von appRoles als roles-Anspruch, gleichzeitig ein Gruppenattribut als roles zu konfigurieren. Andernfalls überschreibt das Gruppenattribut den Anspruch, der dann nicht mehr appRoles enthält, sondern Gruppeninformationen. Sie sollten die folgende Konfiguration in Ihrem Manifest vermeiden:

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

Führen Sie die folgenden Schritte aus, um die Zugriffssteuerung nach ID-Token in einer Webanwendung zu unterstützen:

Fügen Sie Ihrer Anwendung App-Rollen hinzu, und weisen Sie sie Benutzern oder Gruppen zu. Weitere Informationen finden Sie unter So fügen Sie Ihrer Anwendung App-Rollen hinzu und empfangen sie im Token.

Fügen Sie die folgende appRoles Konfiguration zum Manifest Ihrer Anwendung hinzu:

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

Fügen Sie Ihrer Anwendung Code wie im folgenden Beispiel hinzu:

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

Problembehandlung

Aktivieren der Clientprotokollierung

Die Azure-SDKs für Java bieten eine konsistente Protokollierungsfunktion, um Anwendungsfehler zu identifizieren und zu beheben. Die erstellten Protokolle erfassen den Ablauf einer Anwendung, bevor Sie das Terminal erreichen, wodurch das Stammproblem gefunden wird. Zeigen Sie das Protokollierungswiki an, um Anleitungen zum Aktivieren der Protokollierung zu erhalten.

Spring-Logging aktivieren

Spring ermöglicht allen unterstützten Protokollierungssystemen das Festlegen von Loggerebenen in der Spring-Umgebung, z. B. in application.properties, mithilfe von logging.level.<logger-name>=<level>, wobei <level> einer von TRACE, DEBUG, INFO, WARN, ERROR, FATAL, oder OFF ist. Sie können den Stamm-Logger mithilfe von logging.level.root konfigurieren.

Das folgende Beispiel zeigt potenzielle Protokollierungseinstellungen in der Datei "application.properties ":

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

Weitere Informationen zur Protokollierungskonfiguration in Spring finden Sie in der Spring-Dokumentation zur Protokollierung .

Nächste Schritte

Weitere Informationen zu Spring und Azure finden Sie im Dokumentationscenter zu Spring in Azure.