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 Connect-Protokoll zum Anmelden von Benutzern und beschränkt den Zugriff auf Seiten basierend auf der Sicherheitsgruppenmitgliedschaft von Microsoft Entra ID.
In der folgenden Abbildung wird die Topologie für diese App veranschaulicht:
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 behandelt, 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. Falls Sie sich also beim Azure-Portal mit einem persönlichen Microsoft-Konto angemeldet und bislang noch kein Benutzerkonto in Ihrem Verzeichnis erstellt haben, müssen Sie dies jetzt nachholen.
- Zwei Sicherheitsgruppen namens
AdminGroup
undUserGroup
mit den von Ihnen ausgewählten Benutzern, die sich anmelden und dieses Beispiel testen sollen. Alternativ können Sie den Benutzer den 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.
- jwt.ms zum Überprüfen Ihrer Token.
- Fiddler zur Überwachung Ihrer Netzwerkaktivität und Problembehandlung.
- Lesen Sie den Microsoft Entra ID-Blog, um mit den neuesten Entwicklungen auf dem neuesten Stand zu bleiben.
Einrichten des Beispiels
Die folgenden Abschnitte zeigen Ihnen, wie der Beispielcode für die Anwendung eingerichtet wird.
Klonen oder Herunterladen des Beispielrepositorys
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-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/groups
Wechseln Sie alternativ zum Repository ms-identity-msal-java-samples, laden Sie es dann als .zip-Datei herunter, und extrahieren Sie diese auf Ihre Festplatte.
Wichtig
Um Längenbeschränkungen für Dateipfade unter Windows zu vermeiden, klonen oder extrahieren Sie das Repository in ein Verzeichnis in der Nähe des Stamms Ihrer Festplatte.
Registrieren der Beispielanwendung bei Ihrem Microsoft Entra ID-Mandanten
Dieses Beispiel enthält ein einzelnes Projekt. In den folgenden Abschnitten wird gezeigt, wie Sie die App mithilfe des Azure-Portals registrieren.
Auswählen des Microsoft Entra ID-Mandanten, in dem Sie Ihre Anwendungen erstellen möchten
Verwenden Sie die folgenden Schritte, um den Mandanten auszuwählen:
Melden Sie sich beim Azure-Portal an.
Gehen Sie wie folgt vor, wenn Ihr Konto in mehr als einem Microsoft Entra ID-Mandanten vorhanden ist: Wählen Sie Ihr Profil in der Ecke des Azure-Portals und anschließend die Option Verzeichnis wechseln aus, um für Ihre Portalsitzung zum gewünschten Microsoft Entra ID-Mandanten zu wechseln.
Registrieren der App (java-spring-webapp-groups)
Gehen Sie wie folgt vor, um die App zu registrieren:
Gehen Sie zum Azure-Portal, und wählen Sie Microsoft Entra ID aus.
Wählen Sie im Navigationsbereich App-Registrierungen und dann Neue Registrierung aus.
Geben Sie auf der daraufhin angezeigten Seite Anwendung registrieren die folgenden Registrierungsinformationen Ihrer App ein:
- Geben Sie im Abschnitt Name einen aussagekräftigen Anwendungsnamen ein, der den Benutzern der App angezeigt wird (beispielsweise
java-spring-webapp-groups
). - Wählen Sie unter Unterstützte Kontotypen die Option Nur Konten in diesem Organisationsverzeichnis aus.
- Wählen Sie im Abschnitt Umleitungs-URI (optional) im Kombinationsfeld die Option Web aus, und geben Sie die folgenden Umleitungs-URIs ein:
http://localhost:8080/login/oauth2/code/
- Geben Sie im Abschnitt Name einen aussagekräftigen Anwendungsnamen ein, der den Benutzern der App angezeigt wird (beispielsweise
Wählen Sie Registrieren aus, um die Anwendung zu erstellen.
Suchen Sie auf der Registrierungsseite der App den Wert Anwendungsclient-ID, und notieren Sie ihn zur späteren Verwendung. Sie verwenden diesen Wert in den Konfigurationsdateien Ihrer App.
Wählen Sie auf der Registrierungsseite der App Zertifikate & Geheimnisse aus, um die Seite zu öffnen, in dem Sie Geheimnisse generieren und Zertifikate hochladen können.
Wählen Sie im Abschnitt Geheime Clientschlüssel die Option Neuer geheimer Clientschlüssel aus.
Geben Sie eine Beschreibung ein (z. B. App-Geheimnis).
Wählen Sie eine der verfügbaren Werte für die Dauer aus: 6 Monate, 12 Monate oder Benutzerdefiniert.
Wählen Sie Hinzufügen. Der generierte Wert wird angezeigt.
Kopieren und speichern Sie den generierten Wert zur Verwendung in späteren Schritten. Sie benötigen diesen Wert für die Konfigurationsdateien des Codes. Dieser Schlüsselwert wird nicht erneut angezeigt, und Sie können ihn auch nicht auf andere Weise abrufen. Achten Sie daher darauf, ihn aus dem Azure-Portal zu speichern, bevor Sie zu einem anderen Bildschirm oder Bereich navigieren.
Wählen Sie auf der Registrierungsseite der App API-Berechtigungen im Navigationsbereich aus, um die Seite zu öffnen, auf der Sie Zugriff auf die von Ihrer Anwendung benötigten APIs hinzufügen können.
Wählen Sie Berechtigung hinzufügen aus.
Stellen Sie sicher, dass die Registerkarte Microsoft-APIs ausgewählt ist.
Wählen Sie im Abschnitt Häufig verwendete Microsoft-APIs die Option Microsoft Graph aus.
Wählen Sie im Abschnitt Delegierte Berechtigungen die Option GroupMember.Read.All aus. Verwenden Sie bei Bedarf das Suchfeld. Diese Berechtigung ist erforderlich, um Gruppenmitgliedschaften über Graph abzurufen, wenn das Überlastungsszenario auftritt.
Klicken Sie auf die Schaltfläche zum Gewähren der Administratoreinwilligung für
GroupMember.Read.All
.Wählen Sie Berechtigungen hinzufügen aus.
Sicherheitsgruppen erstellen
Gehen Sie zum Erstellen der Sicherheitsgruppen wie folgt vor:
Gehen Sie zum Azure-Portal, und wählen Sie Microsoft Entra ID aus.
Wählen Sie im Navigationsbereich Gruppen aus.
Wählen Sie im Bereich Gruppen die Option Neue Gruppe aus, und geben Sie dann die folgenden Informationen an:
- Wählen Sie für Gruppentyp die Option Sicherheit aus.
- Geben Sie für Gruppenname die Zeichenfolge AdminGroup ein.
- Geben Sie für Gruppenbeschreibung die Administratorsicherheitsgruppe ein.
- Fügen Sie Gruppenbesitzer und Gruppenmitglieder hinzu, die Sie in diesem Beispiel verwenden und testen möchten.
- Klicken Sie auf Erstellen.
Wählen Sie im Bereich Gruppen die Option Neue Gruppe aus, und geben Sie dann die folgenden Informationen an:
- Wählen Sie für Gruppentyp die Option Sicherheit aus.
- Geben Sie für Gruppenname die Zeichenfolge UserGroup ein.
- Geben Sie für Gruppenbeschreibung die Benutzersicherheitsgruppe ein.
- Fügen Sie Gruppenbesitzer und Gruppenmitglieder hinzu, die Sie in diesem Beispiel verwenden und testen möchten.
- Klicken Sie auf Erstellen.
Weitere Informationen finden Sie unter Verwalten von Microsoft Entra-Gruppen und -Gruppenmitgliedschaften.
Sicherheitsgruppen konfigurieren
Sie haben die folgenden Optionen, wie Sie Ihre Anwendung weiter konfigurieren können, um den Gruppenanspruch zu erhalten:
Erhalten Sie alle Gruppen, denen der angemeldete Benutzer in einem Microsoft Entra ID-Mandanten zugewiesen ist, einschließlich geschachtelter Gruppen. Weitere Informationen finden Sie im Abschnitt Konfigurieren der Anwendung für den Empfang aller Gruppen, denen der angemeldete Benutzer zugewiesen ist, einschließlich geschachtelter Gruppen.
Erhalten Sie die Gruppenanspruchswerte aus einer gefilterten Gruppe von Gruppen, mit denen Ihre Anwendung programmiert ist, damit sie funktioniert. 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. Diese Option ist in der Microsoft Entra ID Free Edition nicht verfügbar.
Hinweis
Informationen zum Abrufen von samAccountName
oder On Premises Group Security Identifier
der anstelle der Gruppen-ID finden Sie im Abschnitt Voraussetzungen für die Verwendung von Gruppenattributen, die aus Active Directory synchronisiert werden in Konfigurieren von Gruppenansprüchen für Anwendungen mithilfe der Microsoft Entra-ID.
Konfigurieren der Anwendung für den Empfang aller Gruppen, denen der angemeldete Benutzer zugewiesen ist, einschließlich geschachtelter Gruppen
Führen Sie die folgenden Schritte aus, um die App zu konfigurieren:
Wählen Sie auf der Registrierungsseite der App im Navigationsbereich Tokenkonfiguration aus, um die Seite zu öffnen, auf der Sie die für Ihre Anwendung ausgestellten Ansprüche konfigurieren können.
Wählen Sie Gruppenanspruch hinzufügen aus, um den Bildschirm Gruppenanspruch bearbeiten zu öffnen.
Wählen Sie Sicherheitsgruppen ODER Alle Gruppen (einschließlich Verteilungslisten, jedoch nicht der der Anwendung zugewiesenen Gruppen) aus. Wenn Sie beide Optionen auswählen, wird die Auswirkung der Option Sicherheitsgruppen aufgehoben.
Wählen Sie im Abschnitt ID die Option Gruppen-ID aus. Diese Auswahl bewirkt, dass die Microsoft Entra-ID die Objekt-ID der Gruppen sendet, denen der Benutzer in den Gruppenansprüchen des ID-Tokens zugewiesen ist, das Ihre App nach der Anmeldung eines Benutzers erhält.
Konfigurieren Sie Ihre Anwendung so, dass sie die Gruppenanspruchswerte aus einer gefilterten Gruppe von Gruppen empfängt, denen ein Benutzer möglicherweise zugewiesen ist.
Diese Option ist nützlich, wenn die folgenden Fälle zutreffen:
- Ihre Anwendung ist an einer ausgewählten Gruppe von Gruppen interessiert, denen ein Anmeldebenutzer möglicherweise zugewiesen wird.
- Ihre App ist nicht an jeder Sicherheitsgruppe interessiert, der dieser Benutzer im Mandanten zugewiesen ist.
Diese Option hilft Ihrer Anwendung, das Überlastungsproblem zu vermeiden.
Hinweis
Diese Funktion ist in der Microsoft Entra ID Free Edition nicht verfügbar.
Geschachtelte Gruppenzuweisungen sind nicht verfügbar, wenn Sie diese Option verwenden.
Befolgen Sie die folgenden Schritte, um diese Option in Ihrer App zu aktivieren:
Wählen Sie auf der Registrierungsseite der App im Navigationsbereich Tokenkonfiguration aus, um die Seite zu öffnen, auf der Sie die für Ihre Anwendung ausgestellten Ansprüche konfigurieren können.
Wählen Sie Gruppenanspruch hinzufügen aus, um den Bildschirm Gruppenanspruch bearbeiten zu öffnen.
Wählen Sie nur die Option Gruppen, die der Anwendung zugewiesen sind aus. Wenn Sie weitere Optionen auswählen, wie Sicherheitsgruppen oder Alle Gruppen (einschließlich Verteilungslisten, jedoch nicht der der Anwendung zugewiesenen Gruppen)), werden diese Optionen die Auswirkung der Option Gruppen, die der Anwendung zugewiesen sind außer Kraft setzen.
Wählen Sie im Abschnitt ID die Option Gruppen-ID aus. Diese Auswahl bewirkt, dass die Microsoft Entra-ID die Objekt-ID der Gruppen sendet, denen der Benutzer in den Gruppenansprüchen des ID-Tokens zugewiesen ist, das Ihre App nach der Anmeldung eines Benutzers erhält.
Wenn Sie eine Web-API mithilfe der Option API verfügbar machen verfügbar machen, können Sie auch die Option Gruppen-ID im Abschnitt Zugriff auswählen. Diese Auswahl bewirkt, dass die Microsoft Entra-ID die Objekt-ID der Gruppen sendet, denen der Benutzer in den Gruppenansprüchen des Zugriffstokens zugewiesen ist, das an die Clientanwendungen Ihrer API ausgegeben wird.
Wählen Sie auf der Registrierungsseite der App im Navigationsbereich die Option Übersicht aus, um den Anwendungsübersichtsbildschirm zu öffnen.
Wählen Sie unter Verwaltete Anwendung in lokalem Verzeichnis den Hyperlink mit dem Namen Ihrer App aus. Dieser Feldtitel kann abgeschnitten werden, z. B. Verwaltete Anwendung in .... Wenn Sie diesen Link auswählen, wechseln Sie zur Seite Übersicht über die Unternehmensanwendung, die dem Dienstprinzipal für Ihre Anwendung in dem Mandanten zugeordnet ist, in dem Sie sie erstellt haben. Über die Schaltfläche „Zurück“ in Ihrem Browser können Sie wieder zur App-Registrierungsseite navigieren.
Wählen Sie im Navigationsbereich Benutzer und Gruppen aus, um die Seite zu öffnen, auf der Sie Ihrer Anwendung Benutzer und Gruppen zuweisen können.
Wählen Sie Benutzer hinzufügen.
Wählen Sie auf dem daraufhin angezeigten Bildschirm Benutzer und Gruppen aus.
Wählen Sie die Gruppen aus, die Sie dieser Anwendung zuweisen möchten.
Klicken Sie auf Auswählen, um die Auswahl der Gruppen abzuschließen.
Wählen Sie Zuweisen aus, um den Gruppenzuweisungsprozess abzuschließen.
Ihre Anwendung empfängt jetzt diese ausgewählten Gruppen in den Gruppenansprüchen, wenn ein Benutzer, der sich bei Ihrer App anmeldet, Mitglied einer oder mehrerer dieser zugewiesenen Gruppen ist.
Wählen Sie im Navigationsbereich Eigenschaften aus, um die Seite zu öffnen, auf der die grundlegenden Eigenschaften Ihrer Anwendung aufgelistet sind. Legen Sie das Flag Benutzerzuweisung erforderlich auf Ja fest.
Wichtig
Wenn Sie Benutzerzuweisung erforderlich? auf Ja festlegen, überprüft Microsoft Entra ID, dass nur die Ihrer Anwendung zugewiesenen Benutzer im Bereich Benutzer und Gruppen sich bei Ihrer App anmelden können. Sie können Benutzer direkt oder durch Zuweisen von Sicherheitsgruppen zuweisen, denen sie angehören, zuweisen.
Konfigurieren des Codebeispiels für die Verwendung ihrer App-Registrierung und der Sicherheitsgruppen (java-spring-webapp-groups)
Führen Sie die folgenden Schritte aus, um die App zu konfigurieren:
Hinweis
In den folgenden Schritten ist ClientID
identisch mit Application ID
oder AppId
.
Öffnen Sie das Projekt in Ihrem IDE.
Öffnen Sie die Datei src\main\resources\application.yml.
Suchen Sie den Platzhalter
Enter_Your_Tenant_ID_Here
, und ersetzen Sie den vorhandenen Wert durch Ihre Microsoft Entra Mandanten-ID.Suchen Sie den Platzhalter
Enter_Your_Client_ID_Here
, und ersetzen Sie den vorhandenen Wert durch die Anwendungs-IDclientId
derjava-spring-webapp-groups
-App, die Sie aus dem Azure-Portal kopiert haben.Suchen Sie den Platzhalter
Enter_Your_Client_Secret_Here
, und ersetzen Sie den vorhandenen Wert durch den Wert, den Sie beim Erstellen vonjava-spring-webapp-groups
aus dem Azure-Portal kopiert haben.Suchen Sie den Platzhalter
Enter_Your_Admin_Group_ID_Here
, und ersetzen Sie den vorhandenen Wert durch denobjectId
-Wert Ihrer AdminGroup.Suchen Sie den Platzhalter
Enter_Your_User_Group_ID_Here
, und ersetzen Sie den vorhandenen Wert durch denobjectId
-Wert Ihrer UserGroup.Öffnen Sie die Datei src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java.
Suchen Sie den Platzhalter
Enter_Your_Admin_Group_ID_Here
, und ersetzen Sie den vorhandenen Wert durch denobjectId
-Wert Ihrer AdminGroup.Suchen Sie den Platzhalter
Enter_Your_User_Group_ID_Here
, und ersetzen Sie den vorhandenen Wert durch denobjectId
-Wert Ihrer UserGroup.
Ausführen des Beispiels
In den folgenden Abschnitten wird gezeigt, wie Sie das Beispiel für Azure Container Apps bereitstellen.
Voraussetzungen
- Ein Azure-Konto. Falls Sie nicht über eine Subscription verfügen, können Sie ein kostenloses Konto erstellen. Sie benötigen die Berechtigung Mitwirkender oder Besitzer für das Azure-Abonnement, um den Vorgang fortzusetzen. Weitere Informationen finden Sie unter Weisen Sie Azure-Rollen über das Azure-Portal zu.
- Die Azure CLI
- Die Azure Container Apps CLI-Erweiterung, Version
0.3.47
oder höher. Zum Installieren der aktuellen Version verwenden Sie den Befehlaz extension add --name containerapp --upgrade --allow-preview
. - Java Development Kit, Version 17 oder höher.
- Maven.
Vorbereiten des Spring-Projekts
Bereiten Sie das Projekt mit den folgenden Schritten vor:
Verwenden Sie den folgenden Maven-Befehl, um das Projekt zu erstellen:
mvn clean verify
Führen Sie das Beispielprojekt mit dem folgenden Befehl lokal aus:
mvn spring-boot:run
Setup
Um sich ausgehend von der CLI bei Azure anzumelden, führen Sie den folgenden Befehl aus und befolgen Sie die Anweisungen, um den Authentifizierungsprozess abzuschließen.
az login
Verwenden Sie den Upgradebefehl, um sicherzustellen, dass Sie die neueste Version der CLI ausführen.
az upgrade
Installieren oder aktualisieren Sie als Nächstes die Azure Container Apps-Erweiterung für die CLI.
Wenn Sie beim Ausführen von az containerapp
-Befehlen in Azure-CLI Fehlermeldungen über fehlende Parameter erhalten, stellen Sie sicher, dass Sie die neueste Version der Erweiterung für Azure-Container-Apps installiert haben.
az extension add --name containerapp --upgrade
Hinweis
Ab Mai 2024 aktivieren Azure CLI-Erweiterungen standardmäßig keine Previewfunktionen mehr. Um auf Previewfunktionen von Container Apps zuzugreifen, installieren Sie die Container Apps-Erweiterung mit --allow-preview true
.
az extension add --name containerapp --upgrade --allow-preview true
Nachdem die aktuelle Erweiterung oder das aktuelle Modul installiert ist, registrieren Sie nun die Namespaces Microsoft.App
und Microsoft.OperationalInsights
.
Hinweis
Azure Container Apps-Ressourcen wurden vom Microsoft.Web
-Namespace zum Microsoft.App
-Namespace migriert. Weitere Informationen finden Sie unter Namespacemigration von Microsoft.Web zu Microsoft.App im März 2022.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Erstellen der Azure Container Apps-Umgebung
Nachdem die Einrichtung Ihrer Azure CLI abgeschlossen ist, können Sie die Umgebungsvariablen definieren, die in diesem Artikel verwendet werden.
Definieren Sie die folgenden Variablen in Ihrer Bash-Shell.
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
Erstellen Sie eine Ressourcengruppe.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
Erstellen Sie eine Umgebung mit einem automatisch generierten Log Analytics-Arbeitsbereich.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Zeigt die Standarddomäne der Container-App-Umgebung an. Notieren Sie sich diese Domäne, um sie in späteren Abschnitten zu verwenden.
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
Vorbereiten der App zur Bereitstellung
Wenn Sie Ihre Anwendung in Azure Container Apps bereitstellen, ändert sich Ihre Umleitungs-URL in die Umleitungs-URL Ihrer bereitgestellten App-Instanz in Azure Container Apps. Führen Sie die folgenden Schritte aus, um diese Einstellungen in der application.yml-Datei zu ändern:
Navigieren Sie zur Datei src\main\resources\application.yml, und ändern Sie den Wert
post-logout-redirect-uri
des Domänennamens Ihrer bereitgestellten App hinzu, wie im folgenden Beispiel gezeigt. Achten Sie darauf, dass Sie<API_NAME>
und<default-domain-of-container-app-environment>
durch die aktuellen Werte ersetzen. Beispielsweise würden Sie mit der Standarddomäne für Ihre Azure Container App-Umgebung aus dem vorherigen Schritt undms-identity-api
für Ihren App-Namenhttps://ms-identity-api.<default-domain>
für denpost-logout-redirect-uri
-Wert verwenden.post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
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. Möglicherweise gehen Sie ein Risiko ein, wenn Sie die Datei in ein Git-Repository übernehmen. Informationen zum empfohlenen Ansatz finden Sie unter Verwalten von geheimen Schlüsseln in Azure Container Apps.
Aktualisieren Sie die Registrierung Ihrer Microsoft Entra ID-App.
Da sich der Umleitungs-URI in Ihrer bereitgestellten App in Azure Container 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:
Navigieren Sie zur Seite App-Registrierungen von Microsoft Identity Platform für Entwickler.
Verwenden Sie das Suchfeld, um nach Ihrer App-Registrierung zu suchen. Beispiel:
java-servlet-webapp-authentication
.Öffnen Sie die App-Registrierung, indem Sie den Namen auswählen.
Wählen Sie im oberen Menü Authentifizierung aus.
Wählen Sie unter Web - Umleitungs-URIs die Option URI hinzufügen aus.
Füllen Sie den URI Ihrer App aus, indem Sie
/login/oauth2/code/
anfügen. Beispiel:https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
.Wählen Sie Speichern.
Bereitstellen der App
Stellen Sie das JAR-Paket für Azure Container Apps bereit.
Hinweis
Falls erforderlich, können Sie die JDK-Version in den Java-Build-Umgebungsvariablen angeben. Weitere Informationen finden Sie unter Erstellen von Umgebungsvariablen für Java in Azure Container Apps.
Jetzt können Sie Ihre WAR-Datei mit dem CLI-Befehl az containerapp up
bereitstellen.
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
Hinweis
Die JDK-Standardversion ist 17. Wenn Sie die JDK-Version für die Kompatibilität mit Ihrer Anwendung ändern müssen, können Sie die Versionsnummer mit dem Argument --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
anpassen.
Weitere Buildumgebungsvariablen finden Sie unter Buildumgebungsvariablen für Java in Azure Container Apps.
Überprüfen der App
In diesem Beispiel enthält der containerapp up
-Befehl das --query properties.configuration.ingress.fqdn
-Argument, das den vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) zurückgibt, der auch als URL der App bezeichnet wird. Verwenden Sie die folgenden Schritte, um die Protokolle der App zu überprüfen, um Bereitstellungsprobleme zu untersuchen:
Greifen Sie auf die URL der Ausgabeanwendung auf der Seite Ausgaben des Abschnitts Bereitstellung zu.
Wählen Sie im Navigationsbereich der Azure Container Apps-Instanz Übersicht die Option Protokolle, um die Protokolle der App zu überprüfen.
Untersuchen des Beispiels
Gehen Sie folgendermaßen vor, um das Beispiel zu erkunden:
- Beachten Sie den angemeldeten oder abgemeldeten Status, der in der Mitte des Bildschirms angezeigt wird.
- Wählen Sie in der Ecke die Schaltfläche „Kontextsensitiv“ aus. Diese Schaltfläche lautet Anmelden, wenn Sie die App zum ersten Mal ausführen. Alternativ können Sie Tokendetails, Nur Administratoren oder Reguläre Benutzer auswählen. Da diese Seiten geschützt sind und eine Authentifizierung erfordern, werden Sie automatisch zur Anmeldeseite umgeleitet.
- Folgen Sie auf der nächsten Seite den Anweisungen, und melden Sie sich mit einem Konto im Microsoft Entra ID-Mandanten an.
- Beachten Sie auf dem Einwilligungsbildschirm die angeforderten Bereiche.
- Nach erfolgreichem Abschluss des Anmeldeflusses sollten Sie auf die Startseite umgeleitet werden, die den Anmeldestatus anzeigt, oder eine der anderen Seiten, je nachdem, welche Schaltfläche ihren Anmeldefluss ausgelöst hat.
- Beachten Sie, dass die kontextsensitive Schaltfläche jetzt Abmelden lautet und Ihren Benutzernamen anzeigt.
- Wenn Sie sich auf der Startseite befinden, wählen Sie ID-Token-Details aus, um einige der decodierten Ansprüche des ID-Tokens einschließlich der Gruppen anzuzeigen.
- Wählen Sie Nur Administratoren aus, um
/admin_only
anzuzeigen. Nur Benutzer, die zurAdminGroup
-Sicherheitsgruppe gehören, können diese Seite anzeigen. Andernfalls wird eine Meldung zu Autorisierungsfehlern angezeigt. - Wählen Sie Reguläre Benutzer aus, um die
/regular_user
-Seite anzuzeigen. Nur Benutzer, die zurUserGroup
-Sicherheitsgruppe gehören, können diese Seite anzeigen. Andernfalls wird eine Meldung zu Autorisierungsfehlern angezeigt. - 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 |
---|---|
pom.xml | Anwendungsabhängigkeiten |
src/main/resources/templates/ | Thymeleaf-Vorlagen für die Benutzeroberfläche. |
src/main/resources/application.yml | Anwendungs- und Microsoft Entra ID Boot Starter-Bibliothekskonfiguration. |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Dieses Verzeichnis enthält den Haupteinstiegspunkt der Anwendung, den Controller und die Konfigurationsklassen. |
.../MsIdentitySpringBootWebappApplication.java | Main-Klasse |
.../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 zum Beispiel. |
LIZENZ | Die Lizenz für das Beispiel. |
ID-Tokenansprüche
Um Tokendetails zu extrahieren, verwendet die App AuthenticationPrincipal
und das OidcUser
-Objekt von Spring Security 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 ID-Tokenansprüchen dokumentiert.
Microsoft Entra ID Boot Starter v3.5 und höher analysiert den Gruppenanspruch automatisch und fügt jede Gruppe den Authorities
des angemeldeten Benutzers hinzu. Mit dieser Konfiguration können Entwickler Gruppen mit Spring PrePost
-Bedingungsanmerkungen 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();
}
Links zum An- und Abmelden
Für die Anmeldung sendet die App eine Anforderung an den Microsoft Entra ID-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ächen-Vorlagenseiten, 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 app.protect.authenticated
-Eigenschaft aus der Datei application.yml. Um die spezifischen Anforderungen Ihrer App zu konfigurieren, können Sie AADWebSecurityConfigurationAdapter
in einer Ihrer Klassen erweitern. 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.
}
}
Der Gruppenüberlastungsanspruch
Um sicherzustellen, dass die Tokengröße die Grenzwerte für HTTP-Header nicht überschreitet, schränkt die Microsoft Identity Platform die Anzahl der im Gruppenanspruch enthaltenen Objekt-IDs ein.
Die Überschreitungsgrenze beträgt 150 für SAML-Token, 200 für JWT-Token und 6 für Single-Page-Anwendungen. Wenn ein Benutzer Mitglied von mehr Gruppen ist, als die Obergrenze zulässt, gibt die Microsoft Identity Platform die Gruppen-IDs nicht im Gruppenanspruch im Token aus. Stattdessen ist ein Überschreitungsanspruch im Token enthalten, der der Anwendung anzeigt, dass die Microsoft Graph-API abgefragt werden soll, 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 den Authorities
des angemeldeten Benutzers hinzu. Der Start behandelt automatisch das Überlastungsszenario für Gruppen.
Hinweis
Wir empfehlen dringend, dass Sie , wenn möglich, die Gruppenfilterfunktion, um Gruppenüberlastung 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 BulkCreateGroups.ps1-Datei im Ordner AppCreationScripts 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 Benutzer-objectId
im Skript BulkCreateGroups.ps1 zu ändern.
Für die Verarbeitung von Überlastungen ist ein Aufruf von Microsoft Graph erforderlich, um die Gruppenmitgliedschaften des angemeldeten Benutzers zu lesen. Daher muss Ihre App über die Berechtigung User.Read und GroupMember.Read.All verfügen, damit die getMemberGroups-Funktion erfolgreich ausgeführt werden kann.
Wichtig
Vergewissern Sie sich für das Überschreitungsszenario, dass Sie die Admin Consent
für den Bereich GroupMember.Read.All
der Microsoft Graph-API sowohl für die Client- als auch für die Service-Apps erteilt haben. Weitere Informationen finden Sie in den App-Registrierungsschritten weiter unten in diesem Artikel.
Aktualisieren der Microsoft Entra ID-App-Registrierung (java-spring-webapp-groups)
Gehen Sie zum Aktualisieren der Web-App-Registrierung folgendermaßen vor:
Navigieren Sie zurück zum Azure-Portal.
Wählen Sie im Navigationsbereich Azure Active Directory und dann App-Registrierungen (Vorschau) aus.
Wählen Sie im daraufhin angezeigten Bildschirm die Anwendung
java-spring-webapp-groups
aus.Wählen Sie auf der Registrierungsseite der App im Menü die Option Authentifizierung aus.
Aktualisieren Sie im Abschnitt Umleitungs-URIs die Antwort-URLs so, dass sie mit der Website-URL Ihrer Azure-Bereitstellung übereinstimmen, z. B.
https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/
.
Wichtig
Wenn Ihre App einen speicherinternen Speicher verwendet, fährt Azure App Services Ihre Website herunter, wenn sie inaktiv ist, und alle Datensätze, die Ihre App gespeichert hat, werden 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
- Dokumentation zu Microsoft Identity Platform
- Übersicht über die Microsoft-Authentifizierungsbibliothek (MSAL)
- Schnellstart: Registrieren einer Anwendung bei Microsoft Identity Platform
- Schnellstart: Konfigurieren einer Clientanwendung für den Zugriff auf Web-APIs
- Grundlegendes zu Einwilligungserfahrungen für Microsoft Entra ID-Anwendungen
- Grundlegendes zur Benutzer- und Administratoreinwilligung
- Anwendungs- und Dienstprinzipalobjekte in Azure Active Directory
- Nationale Clouds
- MSAL-Codebeispiele
Weitere Informationen zur Funktionsweise von OAuth 2.0-Protokollen in diesem Szenario und anderen Szenarien finden Sie unter Authentifizierungsszenarien für Microsoft Entra ID.