Dela via


Skydda Java Spring Boot-appar med hjälp av grupper och gruppanspråk

Den här artikeln visar en Java Spring Boot-webbapp som använder Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java för autentisering, auktorisering och tokenförvärv. Appen använder OpenID Connect-protokollet för att logga in användare och begränsar åtkomsten till sidor baserat på Microsoft Entra ID-medlemskap för säkerhetsgrupper.

Följande diagram visar appens topologi:

Diagram that shows the topology of the app.Diagram som visar appens topologi.

Klientappen använder Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java för att logga in användare i en Microsoft Entra-ID-klientorganisation och hämta en ID-token från Microsoft Entra-ID.

ID-token innehåller gruppanspråket. Programmet läser in anspråk i Spring-listan GrantedAuthorities för den inloggade användaren. Dessa värden avgör vilka sidor som användaren har behörighet att komma åt.

En video som beskriver det här scenariot finns i Implementera auktorisering i dina program med hjälp av approller, säkerhetsgrupper, omfång och katalogroller.

Förutsättningar

  • JDK version 15. Det här exemplet har utvecklats på ett system med Java 15, men det kan vara kompatibelt med andra versioner.
  • Maven 3
  • Java-tilläggspaketet för Visual Studio Code rekommenderas för att köra det här exemplet i Visual Studio Code.
  • En Microsoft Entra-ID-klientorganisation. Mer information finns i Snabbstart: Konfigurera en klientorganisation.
  • Ett användarkonto i din Microsoft Entra-ID-klientorganisation. Det här exemplet fungerar inte med ett personligt Microsoft-konto. Om du loggade in på Azure Portal med ett personligt konto och du inte har något användarkonto i din katalog måste du därför skapa ett nu.
  • Två säkerhetsgrupper med namnet AdminGroup och UserGroup, som innehåller den användare eller de användare som du vill signera och testa det här exemplet. Du kan också lägga till användaren i två befintliga säkerhetsgrupper i klientorganisationen. Om du väljer att använda befintliga grupper måste du ändra exempelkonfigurationen så att den använder dina befintliga säkerhetsgruppers namn och objekt-ID.
  • Visual Studio Code
  • Azure Tools för Visual Studio Code

Rekommendationer

  • Viss kunskap om Spring Framework.
  • Viss kunskap om Linux/OSX-terminalen.
  • jwt.ms för att inspektera dina token.
  • Fiddler för övervakning av nätverksaktivitet och felsökning.
  • Följ Microsoft Entra-bloggen för att hålla dig up-to-date med den senaste utvecklingen.

Konfigurera exemplet

I följande avsnitt visas hur du konfigurerar exempelprogrammet.

Klona eller ladda ned exempellagringsplatsen

Om du vill klona exemplet öppnar du ett Bash-fönster och använder följande kommando:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/groups

Du kan också gå till lagringsplatsen ms-identity-msal-java-samples och sedan ladda ned den som en .zip fil och extrahera den till hårddisken.

Viktigt!

För att undvika begränsningar för filsökvägslängd i Windows klonar eller extraherar du lagringsplatsen till en katalog nära hårddiskens rot.

Registrera exempelprogrammet med din Microsoft Entra ID-klientorganisation

Det finns ett projekt i det här exemplet. Följande avsnitt visar hur du registrerar appen med hjälp av Azure Portal.

Välj den Microsoft Entra-ID-klientorganisation där du vill skapa dina program

Använd följande steg för att välja klientorganisation:

  1. Logga in på Azure-portalen.

  2. Om ditt konto finns i mer än en Microsoft Entra-ID-klientorganisation väljer du din profil i hörnet av Azure Portal och väljer sedan Växla katalog för att ändra sessionen till önskad Microsoft Entra ID-klientorganisation.

Registrera appen (java-spring-webapp-groups)

Använd följande steg för att registrera appen:

  1. Gå till Azure Portal och välj Microsoft Entra-ID.

  2. Välj Appregistreringar i navigeringsfönstret och välj sedan Ny registrering.

  3. På sidan Registrera ett program som visas anger du följande programregistreringsinformation:

    • I avsnittet Namn anger du ett beskrivande programnamn för visning för användare av appen , till exempel java-spring-webapp-groups.
    • Under Kontotyper som stöds väljer du Endast Konton i den här organisationskatalogen.
    • I avsnittet Omdirigerings-URI (valfritt) väljer du Webb i kombinationsrutan och anger följande omdirigerings-URI: http://localhost:8080/login/oauth2/code/.
  4. Välj Registrera för att skapa programmet.

  5. På appens registreringssida letar du upp och kopierar värdet program-ID (klient) för senare användning. Du använder det här värdet i appens konfigurationsfil eller filer.

  6. På appens registreringssida väljer du Certifikat och hemligheter i navigeringsfönstret för att öppna sidan där du kan generera hemligheter och ladda upp certifikat.

  7. Under avsnittet Klienthemlighet välj Ny klienthemlighet.

  8. Skriv en beskrivning – till exempel apphemlighet.

  9. Välj en av de tillgängliga varaktigheterna: 6 månader, 12 månader eller Anpassad.

  10. Markera Lägga till. Det genererade värdet visas.

  11. Kopiera och spara det genererade värdet för användning i senare steg. Du behöver det här värdet för kodens konfigurationsfiler. Det här värdet visas inte igen och du kan inte hämta det på något annat sätt. Se därför till att spara den från Azure Portal innan du går till någon annan skärm eller ett annat fönster.

  12. På appens registreringssida väljer du API-behörigheter i navigeringsfönstret för att öppna sidan där du kan lägga till åtkomst till de API:er som ditt program behöver.

  13. Välj Lägg till behörighet.

  14. Kontrollera att fliken Microsoft-API:er är markerad.

  15. I avsnittet Vanliga Microsoft-API:er väljer du Microsoft Graph.

  16. I avsnittet Delegerade behörigheter väljer du GroupMember.Read.All i listan. Använd sökrutan om det behövs. Den här behörigheten är nödvändig för att hämta gruppmedlemskap via Graph om överförbrukningsscenariot inträffar.

  17. Välj knappen för att bevilja administratörsmedgivande för GroupMember.Read.All.

  18. Välj Lägg till behörigheter.

Skapa säkerhetsgrupper

Använd följande steg för att skapa säkerhetsgrupper:

  1. Gå till Azure Portal och välj Microsoft Entra-ID.

  2. Välj Grupper i navigeringsfönstret.

  3. I fönstret Grupper väljer du Ny grupp och anger sedan följande information:

    • För Grupptyp väljer du Säkerhet.
    • Som Gruppnamn anger du AdminGroup.
    • Som Gruppbeskrivning anger du Administratörssäkerhetsgrupp.
    • Lägg till gruppägare och gruppmedlemmar som du vill använda och testa i det här exemplet.
    • Välj Skapa.
  4. I fönstret Grupper väljer du Ny grupp och anger sedan följande information:

    • För Grupptyp väljer du Säkerhet.
    • För Gruppnamn anger du UserGroup.
    • För Gruppbeskrivning anger du Användarsäkerhetsgrupp.
    • Lägg till gruppägare och gruppmedlemmar som du vill använda och testa i det här exemplet.
    • Välj Skapa.

Mer information finns i Hantera Microsoft Entra-grupper och gruppmedlemskap.

Konfigurera säkerhetsgrupper

Du har följande alternativ för hur du kan konfigurera programmet så att det tar emot gruppanspråket ytterligare:

Kommentar

Information om hur du hämtar den lokala gruppen samAccountName eller On Premises Group Security Identifier i stället för grupp-ID finns i avsnittet Förutsättningar för att använda gruppattribut som synkroniserats från Active Directory i Konfigurera gruppanspråk för program med hjälp av Microsoft Entra-ID.

Konfigurera ditt program för att ta emot alla grupper som den inloggade användaren har tilldelats, inklusive kapslade grupper

Använd följande steg för att konfigurera appen:

  1. På appens registreringssida väljer du Tokenkonfiguration i navigeringsfönstret för att öppna sidan där du kan konfigurera de anspråk som tillhandahålls token som utfärdats till ditt program.

  2. Välj Lägg till gruppanspråk för att öppna skärmen Redigera gruppanspråk .

  3. Välj Säkerhetsgrupper ELLER Alla grupper (inkluderar distributionslistor men inte grupper som tilldelats till programmet). Om du väljer båda negerar effekten av alternativet Säkerhetsgrupper .

  4. Under avsnittet ID väljer du Grupp-ID. Det här valet gör att Microsoft Entra-ID:t skickar objekt-ID :t för de grupper som användaren har tilldelats i gruppanspråket för den ID-token som appen tar emot efter inloggningen av en användare.

Konfigurera ditt program för att ta emot gruppers anspråksvärden från en filtrerad uppsättning grupper som en användare kan tilldelas till

Det här alternativet är användbart när följande fall är sanna:

  • Ditt program är intresserat av en vald uppsättning grupper som en inloggningsanvändare kan tilldelas till.
  • Din app är inte intresserad av alla säkerhetsgrupper som den här användaren har tilldelats till i klientorganisationen.

Det här alternativet hjälper ditt program att undvika överförbrukningsproblemet.

Kommentar

Den här funktionen är inte tillgänglig i Microsoft Entra ID Free Edition.

Kapslade grupptilldelningar är inte tillgängliga när du använder det här alternativet.

Om du vill aktivera det här alternativet i din app använder du följande steg:

  1. På appens registreringssida väljer du Tokenkonfiguration i navigeringsfönstret för att öppna sidan där du kan konfigurera de anspråk som tillhandahålls token som utfärdats till ditt program.

  2. Välj Lägg till gruppanspråk för att öppna skärmen Redigera gruppanspråk .

  3. Välj Grupper som tilldelats programmet och välj inte några andra alternativ. Om du väljer fler alternativ, till exempel Säkerhetsgrupper eller Alla grupper (inkluderar distributionslistor men inte grupper som tilldelats till programmet), negerar dessa alternativ effekten av de grupper som tilldelats till programalternativet.

  4. Under avsnittet ID väljer du Grupp-ID. Det här valet gör att Microsoft Entra-ID:t skickar objekt-ID :t för de grupper som användaren har tilldelats i gruppanspråket för den ID-token som appen tar emot efter inloggningen av en användare.

  5. Om du exponerar ett webb-API med alternativet Exponera ett API kan du också välja alternativet Grupp-ID under avsnittet Åtkomst . Det här valet gör att Microsoft Entra-ID:t skickar objekt-ID :t för de grupper som användaren har tilldelats i gruppanspråket för den åtkomsttoken som utfärdas till klientprogrammen i ditt API.

  6. På appens registreringssida väljer du Översikt i navigeringsfönstret för att öppna skärmen Programöversikt.

  7. Välj hyperlänken med namnet på ditt program i Hanterat program i den lokala katalogen. Den här fältrubriken kan trunkeras , till exempel Hanterat program i .... När du väljer den här länken navigerar du till sidan Översikt över företagsprogram som är associerad med tjänstens huvudnamn för ditt program i klientorganisationen där du skapade den. Du kan gå tillbaka till appregistreringssidan med hjälp av bakåtknappen i webbläsaren.

  8. Välj Användare och grupper i navigeringsfönstret för att öppna sidan där du kan tilldela användare och grupper till ditt program.

  9. Välj Lägg till användare.

  10. Välj Användare och grupper på den resulterande skärmen.

  11. Välj de grupper som du vill tilldela det här programmet.

  12. Välj Välj för att slutföra valet av grupper.

  13. Välj Tilldela för att slutföra grupptilldelningsprocessen.

    Ditt program tar nu emot dessa valda grupper i gruppanspråket när en användare som loggar in på din app är medlem i en eller flera av dessa tilldelade grupper.

  14. Välj Egenskaper i navigeringsfönstret för att öppna sidan som visar de grundläggande egenskaperna för ditt program. Ange flaggan Användartilldelning krävs? till Ja.

Viktigt!

När du anger Användartilldelning krävs? till Ja, Kontrollerar Microsoft Entra-ID att endast användare som tilldelats ditt program i fönstret Användare och grupper kan logga in på din app. Du kan tilldela användare direkt eller genom att tilldela säkerhetsgrupper som de tillhör.


Konfigurera kodexemplet så att du använder appregistrerings- och säkerhetsgrupper (java-spring-webapp-groups)

Använd följande steg för att konfigurera appen:

Kommentar

I följande steg ClientID är samma som Application ID eller AppId.

  1. Öppna projektet i din IDE.

  2. Öppna filen src\main\resources\application.yml.

  3. Leta upp platshållaren Enter_Your_Tenant_ID_Here och ersätt det befintliga värdet med ditt Klient-ID för Microsoft Entra.

  4. Leta upp platshållaren Enter_Your_Client_ID_Here och ersätt det befintliga värdet med program-ID:t eller clientId appen java-spring-webapp-groups som kopierades från Azure Portal.

  5. Leta upp platshållaren Enter_Your_Client_Secret_Here och ersätt det befintliga värdet med det värde som du sparade när java-spring-webapp-groups du skapade kopierade från Azure Portal.

  6. Leta upp platshållaren Enter_Your_Admin_Group_ID_Here och ersätt det befintliga värdet med värdet för objectId din AdminGroup.

  7. Leta upp platshållaren Enter_Your_User_Group_ID_Here och ersätt det befintliga värdet med värdet för objectId din UserGroup.

  8. Öppna filen src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java.

  9. Leta upp platshållaren Enter_Your_Admin_Group_ID_Here och ersätt det befintliga värdet med värdet för objectId din AdminGroup.

  10. Leta upp platshållaren Enter_Your_User_Group_ID_Here och ersätt det befintliga värdet med värdet för objectId din UserGroup.

Kör exemplet

Följande avsnitt visar hur du distribuerar exemplet till Azure Container Apps.

Förutsättningar

Förbereda Spring-projektet

Använd följande steg för att förbereda projektet:

  1. Använd följande Maven-kommando för att skapa projektet:

    mvn clean verify
    
  2. Kör exempelprojektet lokalt med hjälp av följande kommando:

    mvn spring-boot:run
    

Ställ in

Om du vill logga in på Azure från CLI kör du följande kommando och följer anvisningarna för att slutföra autentiseringsprocessen.

az login

Kör uppgraderingskommandot för att säkerställa att du kör den senaste versionen av CLI.

az upgrade

Installera eller uppdatera sedan Azure Container Apps-tillägget för CLI.

Om du får fel om saknade parametrar när du kör az containerapp kommandon i Azure CLI kontrollerar du att den senaste versionen av Azure Container Apps-tillägget är installerad.

az extension add --name containerapp --upgrade

Kommentar

Från och med maj 2024 aktiverar Azure CLI-tillägg inte längre förhandsversionsfunktioner som standard. Om du vill komma åt förhandsversionsfunktioner för Container Apps installerar du containerapptillägget med --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Nu när det aktuella tillägget eller modulen har installerats registrerar du Microsoft.App namnrymderna och Microsoft.OperationalInsights .

Kommentar

Azure Container Apps-resurser har migrerats från Microsoft.Web namnområdet till Microsoft.App namnområdet. Mer information finns i Namnområdesmigrering från Microsoft.Web till Microsoft.App i mars 2022.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Skapa Azure Container Apps-miljön

Nu när azure CLI-installationen är klar kan du definiera de miljövariabler som används i hela den här artikeln.

Definiera följande variabler i bash-gränssnittet.

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"

Skapa en resursgrupp.

az group create  \
    --name $RESOURCE_GROUP \
    --location $LOCATION \

Skapa en miljö med en automatiskt genererad Log Analytics-arbetsyta.

az containerapp env create \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION

Visa standarddomänen för containerappmiljön. Anteckna den här domänen som ska användas i senare avsnitt.

az containerapp env show \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --query properties.defaultDomain

Förbereda appen för distribution

När du distribuerar ditt program till Azure Container Apps ändras omdirigerings-URL:en till omdirigerings-URL:en för din distribuerade appinstans i Azure Container Apps. Använd följande steg för att ändra de här inställningarna i din application.yml-fil :

  1. Gå till appens src\main\resources\application.yml-fil och ändra värdet post-logout-redirect-uri för till den distribuerade appens domännamn, som du ser i följande exempel. Se till att ersätta <API_NAME> och <default-domain-of-container-app-environment> med dina faktiska värden. Med standarddomänen för din Azure Container App-miljö från föregående steg och ms-identity-api för ditt appnamn använder https://ms-identity-api.<default-domain> du till exempel värdet post-logout-redirect-uri .

    post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
    
  2. När du har sparat den här filen använder du följande kommando för att återskapa din app:

    mvn clean package
    

Viktigt!

Den application.yml filen för programmet innehåller för närvarande värdet för din klienthemlighet i parametern client-secret . Det är inte bra att behålla det här värdet i den här filen. Du kan också ta en risk om du checkar in filen på en Git-lagringsplats. Den rekommenderade metoden finns i Hantera hemligheter i Azure Container Apps.

Uppdatera din Microsoft Entra ID-appregistrering

Eftersom omdirigerings-URI:n ändras till din distribuerade app i Azure Container Apps måste du också ändra omdirigerings-URI:n i din Microsoft Entra ID-appregistrering. Gör den här ändringen med hjälp av följande steg:

  1. Gå till sidan Microsofts identitetsplattform för utvecklare Appregistreringar.

  2. Använd sökrutan för att söka efter din appregistrering – till exempel java-servlet-webapp-authentication.

  3. Öppna appregistreringen genom att välja dess namn.

  4. Markera Autentisering på kommandomenyn.

  5. I avsnittet Omdirigerings-URI:er för webben - väljer du Lägg till URI.

  6. Fyll i URI:n för din app och lägg till /login/oauth2/code/ – till exempel https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/.

  7. Välj Spara.

Distribuera appen

Distribuera JAR-paketet till Azure Container Apps.

Kommentar

Om det behövs kan du ange JDK-versionen i Miljövariablerna för Java-kompilering. Mer information finns i Skapa miljövariabler för Java i Azure Container Apps.

Nu kan du distribuera WAR-filen med az containerapp up CLI-kommandot.

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

Kommentar

JDK-standardversionen är 17. Om du behöver ändra JDK-versionen för kompatibilitet med ditt program kan du använda --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> argumentet för att justera versionsnumret.

Mer information om hur du skapar miljövariabler finns i Skapa miljövariabler för Java i Azure Container Apps.

Verifiera appen

I det här exemplet containerapp up innehåller --query properties.configuration.ingress.fqdn kommandot argumentet, som returnerar det fullständigt kvalificerade domännamnet (FQDN), även kallat appens URL. Använd följande steg för att kontrollera appens loggar för att undersöka eventuella distributionsproblem:

  1. Öppna url:en för utdataprogrammet från sidan Utdata i avsnittet Distribution .

  2. I navigeringsfönstret på sidan Översikt över Azure Container Apps-instansen väljer du Loggar för att kontrollera appens loggar.

Utforska exemplet

Använd följande steg för att utforska exemplet:

  1. Observera den inloggade eller utloggade statusen som visas i mitten av skärmen.
  2. Välj den sammanhangskänsliga knappen i hörnet. Den här knappen läser Logga in när du först kör appen. Du kan också välja tokeninformation, endast administratörer eller vanliga användare. Eftersom dessa sidor är skyddade och kräver autentisering omdirigeras du automatiskt till inloggningssidan.
  3. På nästa sida följer du anvisningarna och loggar in med ett konto i Microsoft Entra ID-klientorganisationen.
  4. Observera de omfång som begärs på medgivandeskärmen.
  5. När inloggningsflödet har slutförts bör du omdirigeras till startsidan – som visar inloggningsstatusen – eller någon av de andra sidorna, beroende på vilken knapp som utlöste inloggningsflödet.
  6. Observera att den sammanhangskänsliga knappen nu säger Logga ut och visar ditt användarnamn.
  7. Om du är på startsidan väljer du ID-tokeninformation för att se några av ID-tokens avkodade anspråk, inklusive grupper.
  8. Välj Endast administratörer för att visa /admin_only. Endast användare som tillhör AdminGroup säkerhetsgruppen kan visa den här sidan. Annars visas ett meddelande om auktoriseringsfel.
  9. Välj Vanliga användare för att visa sidan /regular_user . Endast användare som tillhör AdminGroup säkerhetsgruppen kan visa den här sidan. Annars visas ett meddelande om auktoriseringsfel.
  10. Använd knappen i hörnet för att logga ut. Statussidan visar det nya tillståndet.

Om koden

Det här exemplet visar hur du använder Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java för att logga in användare i din Microsoft Entra-ID-klientorganisation. Exemplet använder även Spring Oauth2-klienten och Spring Web-startstartarna. Exemplet använder anspråk från den ID-token som hämtats från Microsoft Entra-ID:t för att visa information om den inloggade användaren och för att begränsa åtkomsten till vissa sidor med hjälp av gruppanspråket för auktorisering.

Innehåll

I följande tabell visas innehållet i exempelprojektmappen:

Fil/mapp beskrivning
pom.xml Programberoenden.
src/main/resources/templates/ Thymeleaf-mallar för användargränssnittet.
src/main/resources/application.yml Program- och Microsoft Entra ID Boot Starter-bibliotekskonfiguration.
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ Den här katalogen innehåller huvudprogrammets startpunkt, styrenhet och konfigurationsklasser.
.../MsIdentitySpringBootWebappApplication.java Huvudklass.
.../SampleController.java Styrenhet med slutpunktsmappningar.
.../SecurityConfig.java Säkerhetskonfiguration – till exempel vilka vägar som kräver autentisering.
.../Utilities.java Verktygsklass – till exempel filter-ID-tokenanspråk.
CHANGELOG.md Lista över ändringar i exemplet.
CONTRIBUTING.md Riktlinjer för att bidra till exemplet.
LICENS Licensen för exemplet.

ID-tokenanspråk

För att extrahera tokeninformation använder appen Spring Securitys AuthenticationPrincipal och OidcUser objektet i en begärandemappning, som du ser i följande exempel. Se Exempelkontrollanten för fullständig information om hur den här appen använder ID-tokenanspråk.

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

Bearbeta ett gruppanspråk i ID-token

Gruppanspråket för token innehåller namnen på de grupper som den inloggade användaren har tilldelats, enligt följande exempel:

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

Ett vanligt sätt att komma åt gruppnamnen dokumenteras i avsnittet ID-tokenanspråk .

Microsoft Entra ID Boot Starter v3.5 och senare parsar gruppanspråket automatiskt och lägger till varje grupp i den inloggade användarens Authorities. Med den här konfigurationen kan utvecklare använda grupper med Spring-villkorsanteckningar PrePost med hjälp av hasAuthority metoden . Du kan till exempel hitta följande @PreAuthorize villkor som visas i 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
}

Följande kod hämtar en fullständig lista över myndigheter för en viss användare:

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

För inloggning skickar appen en begäran till Microsoft Entra ID-inloggningsslutpunkten automatiskt konfigurerad av Microsoft Entra ID Spring Boot Starter-klientbiblioteket för Java, enligt följande exempel:

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

För utloggning gör appen en POST-begäran till logout slutpunkten, som du ser i följande exempel:

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

Autentiseringsberoende gränssnittselement

Appen har lite enkel logik på mallsidorna för användargränssnittet för att bestämma innehåll som ska visas baserat på om användaren autentiseras, som du ser i följande exempel med Hjälp av Spring Security Thymeleaf-taggar:

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

Skydda vägar med AADWebSecurityConfigurerAdapter

Som standard skyddar appen sidorna ID-tokeninformation, Endast administratörer och Vanliga användare så att endast inloggade användare kan komma åt dem. Appen konfigurerar dessa vägar med hjälp av app.protect.authenticated egenskapen från filen application.yml . Om du vill konfigurera appens specifika krav kan du utöka AADWebSecurityConfigurationAdapter i någon av dina klasser. Ett exempel finns i den här appens SecurityConfig-klass , som visas i följande kod:

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

Överförbrukningsanspråket för grupper

För att säkerställa att tokenstorleken inte överskrider storleksgränserna för HTTP-huvuden begränsar Microsofts identitetsplattform antalet objekt-ID:t som den innehåller i gruppanspråket.

Överförbrukningsgränsen är 150 för SAML-token, 200 för JWT-token, 6 för ensidesprogram. Om en användare är medlem i fler grupper än överförbrukningsgränsen genererar Microsofts identitetsplattform inte grupp-ID:t i gruppanspråket i token. I stället innehåller den ett överförbrukningsanspråk i token som anger för programmet att fråga Microsoft Graph-API:et för att hämta användarens gruppmedlemskap.

Microsoft Entra ID Boot Starter v3.5 och senare parsar gruppanspråket automatiskt och lägger till varje grupp i den inloggade användarens Authorities. Startprogrammet hanterar automatiskt överförbrukningsscenariot för grupper.

Kommentar

Vi rekommenderar starkt att du använder funktionen för gruppfiltrering, om möjligt, för att undvika att stöta på gruppöverförbrukning. Mer information finns i avsnittet Konfigurera ditt program för att ta emot gruppers anspråksvärden från en filtrerad uppsättning grupper som en användare kan tilldelas till.

Skapa överförbrukningsscenariot för testning

Du kan använda filen BulkCreateGroups.ps1 i mappen AppCreationScripts för att skapa ett stort antal grupper och tilldela användare till dem. Den här filen hjälper till att testa överförbrukningsscenarier under utvecklingen. Kom ihåg att ändra användarens objectId angivna i skriptet BulkCreateGroups.ps1 .

Hantering av överförbrukning kräver ett anrop till Microsoft Graph för att läsa den inloggade användarens gruppmedlemskap, så appen måste ha behörigheten User.Read och GroupMember.Read.All för att funktionen getMemberGroups ska kunna köras korrekt.

Viktigt!

För överförbrukningsscenariot kontrollerar du att du har beviljat Admin Consent för Microsoft Graph API:ets GroupMember.Read.All omfång för både klient- och tjänstapparna. Mer information finns i stegen för appregistrering tidigare i den här artikeln.

Uppdatera appregistreringen för Microsoft Entra-ID (java-spring-webapp-groups)

Använd följande steg för att uppdatera appregistreringen:

  1. Gå tillbaka till Azure Portal.

  2. I navigeringsfönstret väljer du Azure Active Directory och sedan Appregistreringar (förhandsversion).

  3. Välj programmet på java-spring-webapp-groups den resulterande skärmen.

  4. På appens registreringssida väljer du Autentisering på menyn.

  5. I avsnittet Omdirigerings-URI:er uppdaterar du svars-URL:erna så att de matchar webbplats-URL:en för din Azure-distribution , till exempel https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/.

Viktigt!

Om din app använder ett minnesinternt lagringsutrymme, snurrar Azure App Services ned din webbplats om den är inaktiv och alla poster som appen har sparat töms. Om du ökar antalet instanser av din webbplats distribueras även begäranden mellan instanserna. Därför är dina appposter inte samma på varje instans.

Mer information

Mer information om hur OAuth 2.0-protokoll fungerar i det här scenariot och andra scenarier finns i Autentiseringsscenarier för Microsoft Entra-ID.