Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Ein Azure-Abonnement – wenn Sie noch kein Azure-Abonnement besitzen, können Sie Ihre MSDN-Abonnentenvorteile anwenden oder sich für ein Kostenloses Azure-Konto registrieren
- Ein unterstütztes Java Development Kit (JDK), Version 8 oder höher. Weitere Informationen finden Sie unter Java-Unterstützung für Azure und Azure Stack.
- Apache Maven Version 3.0 oder höher.
- Eine Anwendung, die mit der Microsoft Entra-ID registriert ist. Weitere Informationen finden Sie unter Schnellstart: Registrieren einer Anwendung mit der Microsoft-Identitätsplattform.
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:
- Zugreifen auf eine Webanwendung
- Zugreifen auf Ressourcenserver aus einer Webanwendung
- Schützen eines Ressourcenservers/einer API
- Zugreifen auf andere Ressourcenserver von einem Ressourcenserver
- Webanwendung und Ressourcenserver in einer Anwendung
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.
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
, consumers
oder 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
, consumers
oder 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:
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
, consumers
oder 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
, consumers
oder 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 , consumers oder 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.