Freigeben über


Sichern von Java Spring Boot-Apps mit Gruppen und Gruppenansprüchen

In diesem Artikel wird eine Java Spring Boot-Web-App veranschaulicht, die die Microsoft Entra ID Spring Boot Starter-Clientbibliothek für Java für die Authentifizierung, Autorisierung und Tokenakquisition verwendet. Die App verwendet das OpenID-Verbinden-Protokoll zum Anmelden von Benutzern und schränkt den Zugriff auf Seiten basierend auf der Azure Active Directory-Sicherheitsgruppenmitgliedschaft ein.

Das folgende Diagramm zeigt die Topologie der App:

Diagramm, das die Topologie der App zeigt.

Die Client-App verwendet die Microsoft Entra ID Spring Boot Starter-Clientbibliothek für Java, um Benutzer in einem Microsoft Entra ID-Mandanten anzumelden und ein ID-Token von Microsoft Entra ID abzurufen.

Das ID-Token enthält den Gruppenanspruch. Die Anwendung lädt Ansprüche in die Spring-Liste GrantedAuthorities für den angemeldeten Benutzer. Diese Werte bestimmen, auf welche Seiten der Benutzer zugreifen darf.

Ein Video, das dieses Szenario abdeckt, finden Sie unter Implementieren der Autorisierung in Ihren Anwendungen mithilfe von App-Rollen, Sicherheitsgruppen, Bereichen und Verzeichnisrollen.

Voraussetzungen

  • JDK, Version 15. Dieses Beispiel wurde auf einem System mit Java 15 entwickelt, kann aber mit anderen Versionen kompatibel sein.
  • Maven 3
  • Java Extension Pack für Visual Studio Code wird empfohlen, um dieses Beispiel in Visual Studio Code auszuführen.
  • Microsoft Entra ID-Mandant. Weitere Informationen finden Sie unter Schnellstart: Einrichten eines Mandanten.
  • Ein Benutzerkonto in Ihrem Microsoft Entra ID-Mandanten. Dieses Beispiel funktioniert nicht mit einem persönlichen Microsoft-Konto. Wenn Sie sich daher mit einem persönliches Konto bei der Azure-Portal angemeldet haben und kein Benutzerkonto in Ihrem Verzeichnis haben, müssen Sie jetzt ein Benutzerkonto erstellen.
  • Zwei Sicherheitsgruppen, benannt AdminGroup und UserGroup, die den Benutzer oder benutzer enthalten, die Sie signieren und dieses Beispiel testen möchten. Alternativ können Sie den Benutzer zu zwei vorhandenen Sicherheitsgruppen in Ihrem Mandanten hinzufügen. Wenn Sie vorhandene Gruppen verwenden möchten, müssen Sie die Beispielkonfiguration so ändern, dass der Name und die Objekt-ID Ihrer vorhandenen Sicherheitsgruppen verwendet werden.
  • Visual Studio Code
  • Azure Tools für Visual Studio Code

Empfehlungen

  • Vertrautheit mit dem Spring Framework
  • Vertrautheit mit Linux/OSX-Terminal oder Windows PowerShell
  • jwt.ms zum Überprüfen Ihrer Token.
  • Fiddler zur Überwachung Ihrer Netzwerkaktivität und Problembehandlung.
  • Folgen Sie dem Microsoft Entra ID-Blog , um mit den neuesten Entwicklungen auf dem neuesten Stand zu bleiben.

Einrichten des Beispiels

In den folgenden Abschnitten wird gezeigt, wie Sie die Beispielanwendung einrichten.

Klonen oder Herunterladen des Beispiel-Repositorys

Um das Beispiel zu klonen, öffnen Sie ein Bash-Fenster, und verwenden Sie den folgenden Befehl:

git clone https://github.com/Azure-Samples/ms-identity-java-spring-tutorial.git
cd ms-identity-java-spring-tutorial
cd 3-Authorization-II/groups

Alternativ können Sie zum Repository "ms-identity-java-spring-tutorial " navigieren und dann als .zip Datei herunterladen und auf Ihre Festplatte extrahieren.

Wichtig

Um Dateipfadlängenbeschränkungen für Windows zu vermeiden, klonen Oder extrahieren Sie das Repository in ein Verzeichnis in der Nähe des Stammverzeichnisses Ihrer Festplatte.

Registrieren der Beispielanwendung bei Ihrem Azure Active Directory-Mandanten

In diesem Beispiel gibt es ein Projekt. Um die App auf dem Azure-Portal zu registrieren, können Sie entweder manuelle Konfigurationsschritte ausführen oder ein PowerShell-Skript verwenden. Das Skript führt folgende Aufgaben aus:

  • Erstellt die Microsoft Entra-ID-Anwendungen und verwandte Objekte, z. B. Kennwörter, Berechtigungen und Abhängigkeiten.
  • Ändert die Projektkonfigurationsdateien.

Führen Sie die folgenden Schritte aus, um das PowerShell-Skript auszuführen:

  1. Führen Sie unter Windows PowerShell als Administrator aus, und navigieren Sie zum Stammverzeichnis des geklonten Verzeichnisses.

  2. Wenn Sie mit Azure AD PowerShell noch nicht fertig sind, lesen Sie die App-Erstellungsskripts im Quellrepository, um sicherzustellen, dass Ihre Umgebung ordnungsgemäß vorbereitet ist.

  3. Verwenden Sie den folgenden Befehl, um die Ausführungsrichtlinie für PowerShell festzulegen:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    
  4. Verwenden Sie die folgenden Befehle, um das Konfigurationsskript auszuführen:

    cd .\AppCreationScripts\
    .\Configure.ps1
    

    Hinweis

    Weitere Methoden zum Ausführen der Skripts werden in App-Erstellungsskripts beschrieben. Die Skripts bieten auch einen Leitfaden zur automatisierten Anwendungsregistrierung, Konfiguration und Entfernung, die in Ihren CI/CD-Szenarien hilfreich sein kann.

Konfigurieren Des Codebeispiels für die Verwendung ihrer App-Registrierung und Sicherheitsgruppen (java-spring-webapp-groups)

Führen Sie die folgenden Schritte aus, um die App zu konfigurieren:

Hinweis

In den folgenden Schritten ClientID ist identisch mit Application ID oder AppId.

  1. Öffnen Sie das Projekt in Ihrer IDE.

  2. Öffnen Sie die Datei "src\Standard\resources\application.yml".

  3. Suchen Sie den Platzhalter Enter_Your_Tenant_ID_Here , und ersetzen Sie den vorhandenen Wert durch Ihre Microsoft Entra-Mandanten-ID.

  4. Suchen Sie den PlatzhalterEnter_Your_Client_ID_Here, und ersetzen Sie den vorhandenen Wert durch die Anwendungs-ID oder clientId die Aus java-spring-webapp-groups dem Azure-Portal kopierte App.

  5. Suchen Sie den PlatzhalterEnter_Your_Client_Secret_Here, und ersetzen Sie den vorhandenen Wert durch den Wert, den Sie während der Erstellung java-spring-webapp-groups des kopierten Azure-Portal gespeichert haben.

  6. Suchen Sie den Platzhalter Enter_Your_Admin_Group_ID_Here , und ersetzen Sie den vorhandenen Wert durch den objectId Wert Ihrer AdminGroup.

  7. Suchen Sie den Platzhalter Enter_Your_User_Group_ID_Here , und ersetzen Sie den vorhandenen Wert durch den objectId Wert Ihrer UserGroup.

  8. Öffnen Sie die Datei "src/Standard/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java".

  9. Suchen Sie den Platzhalter Enter_Your_Admin_Group_ID_Here , und ersetzen Sie den vorhandenen Wert durch den objectId Wert Ihrer AdminGroup.

  10. Suchen Sie den Platzhalter Enter_Your_User_Group_ID_Here , und ersetzen Sie den vorhandenen Wert durch den objectId Wert Ihrer UserGroup.

Ausführen des Beispiels

In den folgenden Abschnitten wird gezeigt, wie Sie das Beispiel für Azure Spring Apps bereitstellen.

Voraussetzungen

Vorbereiten des Frühlingsprojekts

Bereiten Sie das Projekt mit den folgenden Schritten vor:

  1. Verwenden Sie den folgenden Maven-Befehl, um das Projekt zu erstellen:

    mvn clean package
    
  2. Führen Sie das Beispielprojekt mit dem folgenden Befehl lokal aus:

    mvn spring-boot:run
    

Konfigurieren des Maven-Plug-Ins

Führen Sie den folgenden Befehl im Stammverzeichnis des Projekts aus, um die App mithilfe des Maven-Plug-Ins für Azure Spring Apps zu konfigurieren:

mvn com.microsoft.azure:azure-spring-apps-maven-plugin:1.19.0:config

In der folgenden Liste werden die Befehlsinteraktionen beschrieben:

  • OAuth2-Anmeldung: Sie müssen die Anmeldung bei Azure basierend auf dem OAuth2-Protokoll autorisieren.
  • Abonnement auswählen: Wählen Sie die Abonnementlistennummer aus, unter der Sie Ihre Azure Spring Apps-Instanz erstellen möchten, die standardmäßig auf das erste Abonnement in der Liste festgelegt ist. Wenn Sie die Standardnummer verwenden möchten, drücken Sie die EINGABETASTE.
  • Geben Sie den Namen von Azure Spring Apps ein: Geben Sie den Namen für die Spring-Apps-Instanz ein, die Sie erstellen möchten. Wenn Sie den Standardnamen verwenden möchten, drücken Sie die EINGABETASTE.
  • Geben Sie den Ressourcengruppennamen ein: Geben Sie den Namen für die Ressourcengruppe ein, in der Sie Ihre Feder-Apps-Instanz erstellen möchten. Wenn Sie den Standardnamen verwenden möchten, drücken Sie die EINGABETASTE.
  • Skus: Wählen Sie die SKU aus, die Sie für Ihre Feder-Apps-Instanz verwenden möchten. Wenn Sie die Standardnummer verwenden möchten, drücken Sie die EINGABETASTE.
  • App-Namen eingeben (Demo): Vergeben Sie einen Namen für die App. Wenn Sie die Standard-Projektartefakte-ID verwenden möchten, drücken Sie die EINGABETASTE.
  • Laufzeiten: Wählen Sie die Laufzeit aus, die Sie für Ihre Feder-Apps-Instanz verwenden möchten. In diesem Fall sollten Sie die Standardnummer verwenden, also drücken Sie die EINGABETASTE.
  • Öffentlichen Zugriff für diese App verfügbar machen (boot-for-azure): Drücken Sie y (j).
  • Bestätigen, dass alle oben genannten Konfigurationen gespeichert werden sollen: Drücken Sie y. Wenn Sie n drücken, wird die Konfiguration nicht in der POM-Datei gespeichert.

Das folgende Beispiel zeigt die Ausgabe des Bereitstellungsprozesses:

Summary of properties:
Subscription id   : 12345678-1234-1234-1234-123456789101
Resource group name : rg-ms-identity-spring-boot-webapp
Azure Spring Apps name : cluster-ms-identity-spring-boot-webapp
Runtime Java version : Java 11
Region            : eastus
Sku               : Standard
App name          : ms-identity-spring-boot-webapp
Public access     : true
Instance count/max replicas : 1
CPU count         : 1
Memory size(GB)   : 2
Confirm to save all the above configurations (Y/n):
[INFO] Configurations are saved to: /home/user/ms-identity-java-spring-tutorial/1-Authentication/sign-in/pom.    xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:57 min
[INFO] Finished at: 2024-02-14T13:50:44Z
[INFO] ------------------------------------------------------------------------

Nachdem Sie Ihre Auswahl bestätigt haben, fügt das Plug-In das erforderliche Plug-In-Element und die Einstellungen zur pom.xml Datei Ihres Projekts hinzu, um Ihre App für die Ausführung in Azure Spring Apps zu konfigurieren.

Der relevante Teil der pom.xml Datei sollte dem folgenden Beispiel ähneln:

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-spring-apps-maven-plugin</artifactId>
    <version>1.19.0</version>
    <configuration>
        <subscriptionId>12345678-1234-1234-1234-123456789101</subscriptionId>
        <resourceGroup>rg-ms-identity-spring-boot-webapp</resourceGroup>
        <clusterName>cluster-ms-identity-spring-boot-webapp</clusterName>
        <region>eastus</region>
        <sku>Standard</sku>
        <appName>ms-identity-spring-boot-webapp</appName>
        <isPublic>true</isPublic>
        <deployment>
            <cpu>1</cpu>
            <memoryInGB>2</memoryInGB>
            <instanceCount>1</instanceCount>
            <runtimeVersion>Java 11</runtimeVersion>
            <resources>
                <resource>
                    <directory>${project.basedir}/target</directory>
                    <includes>
                        <include>*.jar</include>
                    </includes>
                </resource>
            </resources>
        </deployment>
    </configuration>
</plugin>

Sie können die Konfigurationen für Azure Spring Apps direkt in Ihrer pom.xml Datei ändern. Einige gängige Konfigurationen sind in der folgenden Tabelle aufgeführt:

Eigenschaft Erforderlich Beschreibung
subscriptionId false Die Abonnement-ID.
resourceGroup true Die Azure-Ressourcengruppe für Ihre Azure Spring Apps-Instanz.
clusterName true Der Name des Azure Spring Apps-Clusters. Wenn Sie ein Abonnement und eine Ressourcengruppe verwenden, für die bereits eine Azure Spring Apps-Instanz bereitgestellt wurde, können Sie diesen vorhandenen Cluster auch für die Bereitstellung verwenden.
appName true Der Name Ihrer App in Azure Spring Apps.
region false Die Region, in der Ihre Azure Spring Apps-Instanz gehostet werden soll. Der Standardwert ist eastus. Gültige Regionen finden Sie unter "Unterstützte Regionen".
sku false Das Preisniveau für Ihre Azure Spring Apps-Instanz. Der Standardwert ist Basic, der nur für Entwicklungs- und Testumgebungen geeignet ist.
runtime false Die Laufzeitumgebungskonfiguration. Weitere Informationen finden Sie unter Konfigurationsdetails.
deployment false Die Bereitstellungskonfiguration. Weitere Informationen finden Sie unter Konfigurationsdetails.

Eine vollständige Liste der Konfigurationen finden Sie in der Dokumentation zur Plug-In-Referenz. Alle Azure Maven-Plug-Ins teilen einen gemeinsamen Satz von Konfigurationen. Informationen zu diesen Konfigurationen finden Sie unter "Allgemeine Konfigurationen". Konfigurationen speziell für Azure Spring Apps finden Sie unter Azure Spring Apps: Konfigurationsdetails.

Achten Sie darauf, die Werte für appName die clusterName spätere Verwendung beiseite zu speichern.

Vorbereiten der App für die Bereitstellung

Wenn Sie Ihre Anwendung in Azure Spring Apps bereitstellen, ändert sich Ihre Umleitungs-URL in der Umleitungs-URL Ihrer bereitgestellten App-Instanz in Azure Spring Apps. Führen Sie die folgenden Schritte aus, um diese Einstellungen in Ihrer application.yml Datei zu ändern:

  1. Navigieren Sie zur Datei "src\Standard\resources\application.yml", und ändern Sie den Wert der post-logout-redirect-uri bereitgestellten App Standard Name, wie im folgenden Beispiel gezeigt. Wenn Sie sich z. B. im vorherigen Schritt und ms-identity-spring-boot-webapp für den App-Namen für Ihre Azure Spring Apps-Instanz entschieden cluster-ms-identity-spring-boot-webapp haben, müssen Sie jetzt den post-logout-redirect-uri Wert verwendenhttps://cluster-ms-identity-spring-boot-webapp-ms-identity-spring-boot-webapp.azuremicroservices.io.

    post-logout-redirect-uri: https://<cluster-name>-<app-name>.azuremicroservices.io
    
  2. Verwenden Sie nach dem Speichern dieser Datei den folgenden Befehl, um Ihre App neu zu erstellen:

    mvn clean package
    

Wichtig

Die application.yml Datei der Anwendung enthält derzeit den Wert Ihres geheimen Clientschlüssels im client-secret Parameter. Es empfiehlt sich nicht, diesen Wert in dieser Datei beizubehalten. Sie können auch ein Risiko eingehen, wenn Sie es auf ein Git-Repository übernehmen.

Als zusätzlicher Sicherheitsschritt können Sie diesen Wert in Azure Key Vault speichern und den geheimen Schlüssel aus Key Vault laden, um ihn in Ihrer Anwendung verfügbar zu machen.

Aktualisieren Ihrer Microsoft Entra ID-App-Registrierung

Da sich der Umleitungs-URI in Ihrer bereitgestellten App in Azure Spring Apps ändert, müssen Sie auch den Umleitungs-URI in Ihrer Microsoft Entra ID-App-Registrierung ändern. Durchlaufen Sie folgende Schritte, um diese Änderung wirksam zu machen:

  1. Navigieren Sie zur Seite App-Registrierungen von Microsoft Identity Platform für Entwickler.

  2. Verwenden Sie das Suchfeld, um nach Ihrer App-Registrierung zu suchen , java-servlet-webapp-authenticationz. B. .

  3. Öffnen Sie die App-Registrierung, indem Sie den Namen auswählen.

  4. Wählen Sie im oberen Menü Authentifizierung aus.

  5. Wählen Sie im Abschnitt "Webumleitungs-URIs - " die Option "URI hinzufügen" aus.

  6. Füllen Sie den URI Ihrer App aus, https://<cluster-name>-<app-name>.azuremicroservices.io/login/oauth2/code/z. B. anfügen /login/oauth2/code/ .

  7. Wählen Sie Speichern.

Bereitstellen der App

Verwenden Sie den folgenden Befehl, um die App bereitzustellen:

mvn azure-spring-apps:deploy

In der folgenden Liste wird die Befehlsinteraktion beschrieben:

  • OAuth2-Anmeldung: Sie müssen die Anmeldung bei Azure basierend auf dem OAuth2-Protokoll autorisieren.

Nachdem der Befehl ausgeführt wurde, ersehen Sie aus der folgenden Protokollbenachrichtigung, dass die Bereitstellung erfolgreich war:

[INFO] Deployment(default) is successfully created
[INFO] Starting Spring App after deploying artifacts...
[INFO] Deployment Status: Running
[INFO]   InstanceName:demo-default-x-xxxxxxxxxx-xxxxx  Status:Running Reason:null       DiscoverStatus:UNREGISTERED
[INFO]   InstanceName:demo-default-x-xxxxxxxxx-xxxxx  Status:Terminating Reason:null       DiscoverStatus:UNREGISTERED
[INFO] Getting public url of app(demo)...
[INFO] Application url: https://<your-Azure-Spring-Apps-instance-name>-demo.azuremicroservices.io

Überprüfen der App

Nachdem die Bereitstellung abgeschlossen ist, greifen Sie auf die Anwendung mit der Ausgabeanwendungs-URL zu. Verwenden Sie die folgenden Schritte, um die Protokolle der App zu überprüfen, um Bereitstellungsprobleme zu untersuchen:

  1. Greifen Sie auf die Ausgabeanwendungs-URL auf der Seite "Ausgaben" des Bereitstellungsbereichs zu.

  2. Wählen Sie im Navigationsbereich der Übersichtsseite der Azure Spring Apps-Instanz Protokolle aus, um die Protokolle der App zu überprüfen.

Untersuchen des Beispiels

Führen Sie die folgenden Schritte aus, um das Beispiel zu erkunden:

  1. Beachten Sie den angemeldeten oder abgemeldeten Status, der in der Mitte des Bildschirms angezeigt wird.
  2. Wählen Sie in der Ecke die Schaltfläche "Kontextsensitiv" aus. Diese Schaltfläche liest die Anmeldung , wenn Sie die App zum ersten Mal ausführen. Alternativ können Sie Tokendetails, nur Administratoren oder normale Benutzer auswählen. Da diese Seiten geschützt sind und eine Authentifizierung erfordern, werden Sie automatisch zur Anmeldeseite umgeleitet.
  3. Folgen Sie auf der nächsten Seite den Anweisungen, und melden Sie sich mit einem Konto im Microsoft Entra ID-Mandanten an.
  4. Beachten Sie auf dem Zustimmungsbildschirm die bereiche, die angefordert werden.
  5. Nach erfolgreichem Abschluss des Anmeldeflusses sollten Sie auf die Startseite umgeleitet werden, die den Anmeldestatus anzeigt, oder auf einer der anderen Seiten, je nachdem, welche Schaltfläche ihren Anmeldefluss ausgelöst hat.
  6. Beachten Sie, dass die Kontextsensitive Schaltfläche jetzt "Abmelden" anzeigt und Ihren Benutzernamen anzeigt.
  7. Wenn Sie sich auf der Startseite befinden, wählen Sie ID-Tokendetails aus, um einige decodierte Ansprüche des ID-Tokens anzuzeigen, einschließlich Gruppen.
  8. Wählen Sie " Nur Administratoren" aus, um die Ansicht anzuzeigen /admin_only. Nur Benutzer, die zur AdminGroup Sicherheitsgruppe gehören, können diese Seite anzeigen. Andernfalls wird eine Meldung zu Autorisierungsfehlern angezeigt.
  9. Wählen Sie "Reguläre Benutzer " aus, um die /regular_user Seite anzuzeigen. Nur Benutzer, die zur UserGroup Sicherheitsgruppe gehören, können diese Seite anzeigen. Andernfalls wird eine Meldung zu Autorisierungsfehlern angezeigt.
  10. Verwenden Sie die Schaltfläche in der Ecke, um sich abzumelden. Die Statusseite gibt den neuen Zustand wieder.

Informationen zum Code

In diesem Beispiel wird veranschaulicht, wie Sie die Microsoft Entra ID Spring Boot Starter-Clientbibliothek für Java verwenden, um Benutzer bei Ihrem Microsoft Entra ID-Mandanten anzumelden. Das Beispiel verwendet auch die Spring Oauth2-Client- und Spring-Webstartstarter. Im Beispiel werden Ansprüche aus dem von Microsoft Entra-ID abgerufenen ID-Token verwendet, um die Details des angemeldeten Benutzers anzuzeigen und den Zugriff auf einige Seiten mithilfe des Gruppenanspruchs für die Autorisierung einzuschränken.

Contents

Die folgende Tabelle zeigt den Inhalt des Beispielprojektordners:

Datei/Ordner Beschreibung
AppCreationScripts/ Skripts zum automatischen Konfigurieren von Microsoft Entra ID-App-Registrierungen.
pom.xml Anwendungsabhängigkeiten.
src/Standard/resources/templates/ Thymeleaf-Vorlagen für die Benutzeroberfläche.
src/Standard/resources/application.yml Anwendungs- und Microsoft Entra ID Boot Starter Library Configuration.
src/Standard/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ Dieses Verzeichnis enthält die Standard Anwendungseinstiegspunkt, Controller und Konfigurationsklassen.
.../MsIdentitySpringBootWebappApplication.java Hauptklasse.
.../SampleController.java Controller mit Endpunktzuordnungen.
.../SecurityConfig.java Sicherheitskonfiguration – z. B. welche Routen eine Authentifizierung erfordern.
.../Utilities.java Hilfsklasse – z. B. Filter-ID-Tokenansprüche.
CHANGELOG.md Liste der Änderungen am Beispiel.
CONTRIBUTING.md Richtlinien für einen Beitrag zur Stichprobe.
LIZENZ Die Lizenz für das Beispiel.

ID-Tokenansprüche

Um Tokendetails zu extrahieren, verwendet die App Spring Security AuthenticationPrincipal und OidcUser -Objekt in einer Anforderungszuordnung, wie im folgenden Beispiel gezeigt. Ausführliche Informationen dazu, wie diese App ID-Tokenansprüche verwendet, finden Sie im Beispielcontroller .

import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
    Map<String, Object> claims = principal.getIdToken().getClaims();
}

Verarbeiten eines Gruppenanspruchs im ID-Token

Der Gruppenanspruch des Tokens enthält die Namen der Gruppen, denen der angemeldete Benutzer zugewiesen ist, wie im folgenden Beispiel gezeigt:

{
  ...
  "groups": [
    "xyz-id-xyz",
    "xyz-id-xyz",]
  ...
}

Eine gängige Möglichkeit für den Zugriff auf die Gruppennamen ist im Abschnitt mit ID-Tokenansprüchen dokumentiert.

Microsoft Entra ID Boot Starter v3.5 und höher analysiert den Gruppenanspruch automatisch und fügt jede Gruppe dem angemeldeten Benutzer Authoritieshinzu. Mit dieser Konfiguration können Entwickler Gruppen mit Springbedingungsanmerkungen PrePost mithilfe der hasAuthority Methode verwenden. Beispielsweise finden Sie die folgenden @PreAuthorize Bedingungen in SampleController.java:

@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
    // restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
    // restrict to users who belong to any of UserGroup or AdminGroup
}

Der folgende Code ruft eine vollständige Liste der Behörden für einen bestimmten Benutzer ab:

@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
   Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}

Für die Anmeldung sendet die App eine Anforderung an den Azure Active Directory-Anmeldeendpunkt, der automatisch von der Microsoft Entra ID Spring Boot Starter-Clientbibliothek für Java konfiguriert wird, wie im folgenden Beispiel gezeigt:

<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>

Für die Abmeldung sendet die App eine POST-Anforderung an den logout Endpunkt, wie im folgenden Beispiel gezeigt:

<form action="#" th:action="@{/logout}" method="post">
  <input class="btn btn-warning" type="submit" value="Sign Out" />
</form>

Authentifizierungsabhängige UI-Elemente

Die App verfügt über eine einfache Logik auf den Benutzeroberflächenvorlagenseiten, um basierend darauf zu bestimmen, ob der Benutzer authentifiziert wird, wie im folgenden Beispiel unter Verwendung von Spring Security Thymeleaf-Tags gezeigt:

<div sec:authorize="isAuthenticated()">
  this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
  this content only shows to not-authenticated users
</div>

Schützen von Routen mit AADWebSecurityConfigurerAdapter

Standardmäßig schützt die App die Seiten "ID-Tokendetails", "Nur Administratoren" und "Reguläre Benutzer ", sodass nur angemeldete Benutzer darauf zugreifen können. Die App konfiguriert diese Routen mithilfe der Eigenschaft aus der app.protect.authenticateddatei application.yml . Um die spezifischen Anforderungen Ihrer App zu konfigurieren, können Sie in einem Ihrer Klassen erweitern AADWebSecurityConfigurationAdapter . Ein Beispiel finden Sie in der SecurityConfig-Klasse dieser App, die im folgenden Code gezeigt wird:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
  @Value( "${app.protect.authenticated}" )
  private String[] protectedRoutes;

    @Override
    public void configure(HttpSecurity http) throws Exception {
    // use required configuration form AADWebSecurityAdapter.configure:
    super.configure(http);
    // add custom configuration:
    http.authorizeRequests()
      .antMatchers(protectedRoutes).authenticated()     // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
      .antMatchers("/**").permitAll();                  // allow all other routes.
    }
}

Überlastungsanspruch der Gruppen

Um sicherzustellen, dass die Tokengröße die Grenzwerte für HTTP-Header nicht überschreitet, beschränkt die Microsoft Identity Platform die Anzahl der Objekt-IDs, die sie in den Gruppenanspruch einschließt.

Der Grenzwert für Überschreitungen beträgt 150 für SAML-Token, 200 für JWT-Token, 6 für Einzelseitenanwendungen. Wenn ein Benutzer Mitglied von mehr Gruppen ist als die Überlastungsgrenze, gibt die Microsoft Identity Platform die Gruppen-IDs in den Gruppenansprüchen im Token nicht aus. Stattdessen enthält es einen Überlastungsanspruch im Token, der angibt, dass die Anwendung die Microsoft Graph-API abfragt, um die Gruppenmitgliedschaft des Benutzers abzurufen.

Microsoft Entra ID Boot Starter v3.5 und höher analysiert den Gruppenanspruch automatisch und fügt jede Gruppe dem angemeldeten Benutzer Authoritieshinzu. Der Start behandelt automatisch das Überlastungsszenario für Gruppen.

Hinweis

Wir empfehlen Ihnen dringend, die Gruppenfilterfunktion zu verwenden, wenn möglich, um Gruppenübergänge zu vermeiden. Weitere Informationen finden Sie im Abschnitt "Konfigurieren Der Anwendung für den Empfang der Gruppenanspruchswerte aus einem gefilterten Satz von Gruppen, denen ein Benutzer möglicherweise zugewiesen ist".

Erstellen des Überlastungsszenarios für Tests

Sie können die im Ordner "AppCreationScripts.ps1" bereitgestellte Datei "BulkCreateGroups.ps1" verwenden, um eine große Anzahl von Gruppen zu erstellen und ihnen Benutzer zuzuweisen. Diese Datei hilft beim Testen von Überlastungsszenarien während der Entwicklung. Denken Sie daran, die im Skript "BulkCreateGroups.ps1" bereitgestellten objectIdBenutzer zu ändern.

Für die Behandlung von Überlastungen ist ein Aufruf von Microsoft Graph erforderlich, um die Gruppenmitgliedschaften des angemeldeten Benutzers zu lesen. Daher muss Ihre App über die Berechtigungen "User.Read " und "GroupMember.Read.All " für die getMemberGroups-Funktion verfügen, die erfolgreich ausgeführt werden kann.

Wichtig

Stellen Sie für das Überlastungsszenario sicher, dass Sie den Umfang der Microsoft Graph-API GroupMember.Read.All sowohl für client- als auch für Dienst-Apps erteilt Admin Consent haben. Weitere Informationen finden Sie in den Schritten zur App-Registrierung weiter oben in diesem Artikel.

Aktualisieren der Microsoft Entra ID-App-Registrierung (java-spring-webapp-groups)

Führen Sie die folgenden Schritte aus, um die App-Registrierung zu aktualisieren:

  1. Navigieren Sie zurück zum Azure-Portal.

  2. Wählen Sie im Navigationsbereich Azure Active Directory und dann App-Registrierungen (Vorschau) aus.

  3. Wählen Sie auf dem resultierenden Bildschirm die java-spring-webapp-groups Anwendung aus.

  4. Wählen Sie auf der Registrierungsseite der App im Menü die Option "Authentifizierung " aus.

  5. Aktualisieren Sie im Abschnitt "Umleitungs-URIs " die Antwort-URLs so, dass sie mit der Website-URL Ihrer Azure-Bereitstellung übereinstimmen , https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/z. B. .

Wichtig

Wenn Ihre App einen speicherinternen Speicher verwendet, werden Azure-App Dienste ihre Website herunterdrehen, wenn sie inaktiv ist, und alle Datensätze, die Ihre App beibehalten hat, geleert. Wenn Sie auch die Instanzenanzahl Ihrer Website erhöhen, werden Anforderungen zwischen den Instanzen verteilt. Daher sind Ihre App-Datensätze nicht in jeder Instanz identisch.

Weitere Informationen

Weitere Informationen zur Funktionsweise von OAuth 2.0-Protokollen in diesem Szenario und anderen Szenarien finden Sie unter Authentifizierungsszenarien für Microsoft Entra ID.