Dela via


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

Den här artikeln visar hur du skapar en Java Tomcat-app som loggar in användare med Microsoft Authentication Library (MSAL) för Java. Appen begränsar också å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 MSAL för Java (MSAL4J) för att logga in användare till en Microsoft Entra ID-klientorganisation och hämta en ID-token från Microsoft Entra ID. ID-token bevisar att en användare autentiseras med den här klientorganisationen. Appen skyddar sina vägar enligt användarens autentiseringsstatus och gruppmedlemskap.

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

Rekommendationer

  • Viss kunskap om Java/Jakarta Servlets.
  • 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 3-java-servlet-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-servlet-webapp-groups)

Registrera först en ny app i Azure Portal genom att följa anvisningarna i Snabbstart: Registrera ett program med Microsofts identitetsplattform.

Använd sedan följande steg för att slutföra registreringen:

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

  2. Välj Ny registrering.

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

    • I avsnittet Namn anger du ett beskrivande programnamn för visning för användare av appen , till exempel java-servlet-webapp-groups.
    • Under Kontotyper som stöds väljer du Endast Konton i den här organisationskatalogen.
    • I avsnittet Omdirigerings-URI väljer du Webb i kombinationsrutan och anger följande omdirigerings-URI: http://localhost:8080/msal4j-servlet-groups/auth/redirect.
  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. Välj Spara för att spara dina ändringar.

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

  8. Under avsnittet Klienthemlighet välj Ny klienthemlighet.

  9. Skriv en beskrivning – till exempel apphemlighet.

  10. Välj en av de tillgängliga varaktigheterna: Om ett år, Om två år eller Aldrig upphör att gälla.

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

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

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

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

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

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

  17. I avsnittet Delegerade behörigheter väljer du User.Read och GroupMember.Read.All i listan. Använd sökrutan om det behövs.

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

  19. GroupMember.Read.All kräver administratörsmedgivande, så välj Bevilja/återkalla administratörsmedgivande för {klientorganisation} och välj sedan Ja när du tillfrågas om du vill bevilja medgivande för de begärda behörigheterna för alla konton i klientorganisationen. Du måste vara klientadministratör för Microsoft Entra-ID för att kunna utföra den här åtgärden.


Konfigurera appen (java-servlet-webapp-groups) för att använda din appregistrering

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/authentication.properties.

  3. Leta reda på strängen {enter-your-tenant-id-here}. Ersätt det befintliga värdet med ditt Microsoft Entra-klient-ID om du har registrerat appen med alternativet Endast konton i den här organisationskatalogen.

  4. Leta upp strängen {enter-your-client-id-here} och ersätt det befintliga värdet med program-ID:t eller clientId programmet java-servlet-webapp-groups som kopierats från Azure Portal.

  5. Leta reda på strängen {enter-your-client-secret-here} och ersätt det befintliga värdet med det värde som du sparade när appen skapades java-servlet-webapp-groups i Azure Portal.

Konfigurera säkerhetsgrupper

Du har följande alternativ tillgängliga för hur du ytterligare kan konfigurera dina program för att ta emot gruppanspråket:

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 ditt program:

  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 alternativet Alla grupper (innehåller distributionslistor men inte grupper som tilldelats till programmet). Om du väljer båda alternativen inaktiveras 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.
  • Ditt program är inte intresserat 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.

    Om du väljer andra alternativ , till exempel Säkerhetsgrupper eller Alla grupper (inklusive distributionslistor men inte grupper som tilldelats till programmet) , negerar du de fördelar som din app får genom att välja att använda det här alternativet.

  4. Under avsnittet ID väljer du Grupp-ID. Det här valet resulterar i att Microsoft Entra-ID skickar objekt-ID :t för de grupper som användaren har tilldelats i gruppanspråket för ID-token.

  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 alternativet resulterar i att Microsoft Entra-ID skickar objekt-ID :t för de grupper som användaren har tilldelats i gruppanspråket för åtkomsttoken.

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

  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 Managed application in .... 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 appen (java-servlet-webapp-groups) för att identifiera grupp-ID:t

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

Viktigt!

Om du väljer något annat alternativ än groupID på sidan Tokenkonfiguration – till exempel DNSDomain\sAMAccountName – bör du ange gruppnamnet i följande steg , till exempel contoso.com\Test Group i stället för objekt-ID:t:

  1. Öppna filen ./src/main/resources/authentication.properties.

  2. Leta upp strängen {enter-your-admins-group-id-here} och ersätt det befintliga värdet med objekt-ID:t för GroupAdmin gruppen som du kopierade från Azure Portal. Ta även bort klammerparenteserna från platshållarvärdet.

  3. Leta upp strängen {enter-your-admins-group-id-here} och ersätt det befintliga värdet med objekt-ID:t för GroupAdmin gruppen som du kopierade från Azure Portal. Ta även bort klammerparenteserna från platshållarvärdet.

Skapa exemplet

Om du vill skapa exemplet med Maven går du till katalogen som innehåller pom.xml-filen för exemplet och kör sedan följande kommando:

mvn clean package

Det här kommandot genererar en .war-fil som du kan köra på olika programservrar.

Kör exemplet

Följande avsnitt visar hur du distribuerar exemplet till Azure App Service.

Förutsättningar

Konfigurera Maven-plugin-programmet

När du distribuerar till Azure App Service använder distributionen automatiskt dina Azure-autentiseringsuppgifter från Azure CLI. Om Azure CLI inte installeras lokalt autentiseras Maven-plugin-programmet med OAuth eller enhetsinloggning. Mer information finns i autentisering med Maven-plugin-program.

Använd följande steg för att konfigurera plugin-programmet:

  1. Kör följande kommando för att konfigurera distributionen. Det här kommandot hjälper dig att konfigurera Azure App Service-operativsystemet, Java-versionen och Tomcat-versionen.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
    
  2. Tryck Y för Skapa ny körningskonfiguration och tryck sedan på Retur.

  3. För Definiera värde för operativsystem trycker du på 1 för Windows eller 2 för Linux och trycker sedan på Retur.

  4. För Definiera värde för javaVersion trycker du på 2 för Java 11 och trycker sedan på Retur.

  5. För Definiera värde för webContainer trycker du på 4 för Tomcat 9.0 och trycker sedan på Retur.

  6. För Definiera värde för pricingTier trycker du på Retur för att välja standardnivån P1v2 .

  7. Tryck Y för Bekräfta och tryck sedan på Retur.

I följande exempel visas utdata från distributionsprocessen:

Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[INFO] ------------------------------------------------------------------------

När du har bekräftat dina val lägger plugin-programmet till det nödvändiga plugin-elementet och inställningarna i projektets pom.xml-fil för att konfigurera appen så att den körs i Azure App Service.

Den relevanta delen av pom.xml-filen bör se ut ungefär som i följande exempel:

<build>
    <plugins>
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>>azure-webapp-maven-plugin</artifactId>
            <version>x.xx.x</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <resourceGroup>your-resourcegroup-name</resourceGroup>
                <appName>your-app-name</appName>
            ...
            </configuration>
        </plugin>
    </plugins>
</build>

Du kan ändra konfigurationerna för App Service direkt i pom.xml. Några vanliga konfigurationer visas i följande tabell:

Property Obligatoriskt Beskrivning
subscriptionId falskt Prenumerations-ID:t.
resourceGroup true Azure-resursgruppen för din app.
appName true Namnet på din app.
region falskt Den region där appen ska vara värd. Standardvärdet är centralus. Giltiga regioner finns i Regioner som stöds.
pricingTier falskt Prisnivån för din app. Standardvärdet är P1v2 för en produktionsarbetsbelastning. Det rekommenderade minimivärdet för Java-utveckling och -testning är B2. Mer information finns i Prissättning för App Service.
runtime falskt Konfigurationen av körningsmiljön. Mer information finns i Konfigurationsinformation.
deployment falskt Distributionskonfigurationen. Mer information finns i Konfigurationsinformation.

En fullständig lista över konfigurationer finns i referensdokumentationen för plugin-programmet. Alla Azure Maven-plugin-program delar en gemensam uppsättning konfigurationer. De här konfigurationerna finns i Vanliga konfigurationer. Konfigurationer som är specifika för Azure App Service finns i Azure-app: Konfigurationsinformation.

Se till att spara värdena appName och resourceGroup för senare användning.

Förbereda appen för distribution

När du distribuerar programmet till App Service ändras omdirigerings-URL:en till omdirigerings-URL:en för din distribuerade appinstans. Använd följande steg för att ändra de här inställningarna i egenskapsfilen:

  1. Navigera till appens authentication.properties-fil och ändra värdet app.homePage för till den distribuerade appens domännamn, som du ser i följande exempel. Om du till exempel valde example-domain för ditt appnamn i föregående steg måste du nu använda https://example-domain.azurewebsites.net för app.homePage värdet. Se till att du också har ändrat protokollet från http till https.

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<your-app-name>.azurewebsites.net
    
  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!

I samma authentication.properties-fil har du en inställning för din aad.secret. Det är inte bra att distribuera det här värdet till App Service. Det är inte heller en bra idé att lämna det här värdet i koden och eventuellt push-överföra det till git-lagringsplatsen. Om du vill ta bort det här hemliga värdet från koden hittar du mer detaljerad vägledning i avsnittet Distribuera till App Service – Ta bort hemlighet . Den här vägledningen lägger till extra steg för att push-överföra det hemliga värdet till Key Vault och för att använda Key Vault-referenser.

Uppdatera din Microsoft Entra ID-appregistrering

Eftersom omdirigerings-URI:n ändras till din distribuerade app till Azure App Service 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 /auth/redirect – till exempel https://<your-app-name>.azurewebsites.net/auth/redirect.

  7. Välj Spara.

Distribuera appen

Nu är du redo att distribuera din app till Azure App Service. Använd följande kommando för att se till att du är inloggad i Azure-miljön för att köra distributionen:

az login

Med all konfiguration klar i din pom.xml-fil kan du nu använda följande kommando för att distribuera din Java-app till Azure:

mvn package azure-webapp:deploy

När distributionen är klar är programmet redo på http://<your-app-name>.azurewebsites.net/. Öppna URL:en med din lokala webbläsare, där du bör se programmets msal4j-servlet-auth startsida.

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.
  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. Observera att den sammanhangskänsliga knappen nu säger Logga ut och visar ditt användarnamn.
  6. Välj ID-tokeninformation för att se några av ID-tokens avkodade anspråk.
  7. Välj Grupper för att se information om medlemskap i säkerhetsgrupper för den inloggade användaren.
  8. Välj Endast administratör eller Vanlig användare för att få åtkomst till gruppernas anspråksskyddade slutpunkter.
    • Om den inloggade användaren finns i GroupAdmin gruppen kan användaren ange båda sidorna.
    • Om den inloggade användaren finns i GroupMember gruppen kan användaren endast ange sidan Vanlig användare .
    • Om den inloggade användaren inte finns i någon av grupperna kan användaren inte komma åt någon av de två sidorna.
  9. Använd knappen i hörnet för att logga ut.
  10. När du har loggat ut väljer du ID-tokeninformation för att observera att appen visar ett 401: unauthorized fel i stället för ID-tokenanspråken när användaren inte har behörighet.

Om koden

Det här exemplet använder MSAL för Java (MSAL4J) för att logga in en användare och hämta en ID-token som kan innehålla gruppanspråket. Om det finns för många grupper för utsläpp i ID-token använder exemplet Microsoft Graph SDK för Java för att hämta gruppmedlemskapsdata från Microsoft Graph. Baserat på de grupper som användaren tillhör kan den inloggade användaren komma åt antingen ingen, en eller båda av de skyddade sidorna Admins Only och Regular Users.

Om du vill replikera det här exemplets beteende måste du lägga till MSAL4J och Microsoft Graph SDK i dina projekt med maven. Du kan kopiera pom.xml-filen och innehållet i hjälpmapparna och authservlets-mapparnai mappen src/main/java/com/microsoft/azuresamples/msal4j. Du behöver också filen authentication.properties . Dessa klasser och filer innehåller allmän kod som du kan använda i en mängd olika program. Du kan också kopiera resten av exemplet, men de andra klasserna och filerna skapas specifikt för att hantera det här exemplets mål.

Innehåll

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

Fil/mapp Beskrivning
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Den här katalogen innehåller de klasser som definierar appens affärslogik för serverdelen.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Den här katalogen innehåller de klasser som används för inloggning och utloggningsslutpunkter.
*Servlet.java Alla tillgängliga slutpunkter definieras i Java-klasser med namn som slutar Servlet.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Hjälpklasser för autentisering.
AuthenticationFilter.java Omdirigerar oautentiserade begäranden till skyddade slutpunkter till en 401-sida.
src/main/resources/authentication.properties Microsoft Entra-ID och programkonfiguration.
src/main/webapp/ Den här katalogen innehåller användargränssnittet – JSP-mallar
CHANGELOG.md Lista över ändringar i exemplet.
CONTRIBUTING.md Riktlinjer för att bidra till exemplet.
LICENS Licensen för exemplet.

Bearbeta ett gruppanspråk i token, inklusive hantering av överförbrukning

I följande avsnitt beskrivs hur appen bearbetar ett gruppanspråk.

Gruppanspråket

Objekt-ID:t för de säkerhetsgrupper som den inloggade användaren är medlem i returneras i gruppanspråket för token, vilket visas i följande exempel:

{
  ...
  "groups": [
    "0bbe91cc-b69e-414d-85a6-a043d6752215",
    "48931dac-3736-45e7-83e8-015e6dfd6f7c",]
  ...
}

Ö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 och 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, enligt följande exempel:

{
  ...
  "_claim_names": {
    "groups": "src1"
    },
    {
   "_claim_sources": {
    "src1": {
        "endpoint":"[Graph Url to get this user's group membership from]"
        }
    }
  ...
}

Skapa överförbrukningsscenariot i det här exemplet för testning

Om du vill skapa överförbrukningsscenariot kan du använda följande steg:

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

  2. När du kör det här exemplet och en överförbrukning inträffar visas _claim_names på startsidan efter att användaren har loggat in.

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

  4. Om du inte kan undvika att stöta på gruppöverförbrukning rekommenderar vi att du använder följande steg för att bearbeta gruppanspråket i din token:

    1. Sök efter kravet _claim_names där ett av värdena är grupper. Det här anspråket anger överförbrukning.
    2. Om det hittas gör du ett anrop till slutpunkten som anges i _claim_sources för att hämta användarens grupper.
    3. Om ingen hittas kan du titta på gruppanspråket för användarens grupper.

Kommentar

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 GroupMember.Read.All-behörighetenför att funktionen getMemberObjects ska kunna köras.

Mer information om programmering för Microsoft Graph finns i videon En introduktion till Microsoft Graph för utvecklare.

ConfidentialClientApplication

En ConfidentialClientApplication instans skapas i AuthHelper.java-filen, som du ser i följande exempel. Det här objektet hjälper dig att skapa Microsoft Entra-auktoriserings-URL:en och hjälper även till att byta ut autentiseringstoken mot en åtkomsttoken.

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                      .builder(CLIENT_ID, secret)
                      .authority(AUTHORITY)
                      .build();

Följande parametrar används för instansiering:

  • Appens klient-ID.
  • Klienthemligheten, som är ett krav för konfidentiella klientprogram.
  • Microsoft Entra ID-utfärdare, som innehåller ditt Klient-ID för Microsoft Entra.

I det här exemplet läss dessa värden från filen authentication.properties med hjälp av en egenskapsläsare i filen Config.java .

Stegvis genomgång

Följande steg innehåller en genomgång av appens funktioner:

  1. Det första steget i inloggningsprocessen är att skicka en begäran till /authorize slutpunkten på för din Microsoft Entra-ID-klientorganisation. MSAL4J-instansen ConfidentialClientApplication används för att skapa en URL för auktoriseringsbegäran. Appen omdirigerar webbläsaren till den här URL:en, där användaren loggar in.

    final ConfidentialClientApplication client = getConfidentialClientInstance();
    AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES))
            .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString();
    contextAdapter.redirectUser(authorizeUrl);
    

    I följande lista beskrivs funktionerna i den här koden:

    • AuthorizationRequestUrlParameters: Parametrar som måste anges för att skapa en AuthorizationRequestUrl.
    • REDIRECT_URI: Där Microsoft Entra omdirigerar webbläsaren – tillsammans med autentiseringskoden – efter att användarens autentiseringsuppgifter har samlats in. Den måste matcha omdirigerings-URI:n i Microsoft Entra ID-appregistreringen i Azure Portal.
    • SCOPES: Omfång är behörigheter som begärs av programmet.
      • Normalt räcker det med de tre omfången openid profile offline_access för att ta emot ett ID-tokensvar.
      • En fullständig lista över omfång som begärs av appen finns i filen authentication.properties . Du kan lägga till fler omfång, till exempel User.Read.
  2. Användaren får en inloggningsprompt av Microsoft Entra-ID. Om inloggningsförsöket lyckas omdirigeras användarens webbläsare till appens omdirigeringsslutpunkt. En giltig begäran till den här slutpunkten innehåller en auktoriseringskod.

  3. Instansen ConfidentialClientApplication utbyter sedan den här auktoriseringskoden mot en ID-token och åtkomsttoken från Microsoft Entra-ID.

    // First, validate the state, then parse any error codes in response, then extract the authCode. Then:
    // build the auth code params:
    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
            .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build();
    
    // Get a client instance and leverage it to acquire the token:
    final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance();
    final IAuthenticationResult result = client.acquireToken(authParams).get();
    

    I följande lista beskrivs funktionerna i den här koden:

    • AuthorizationCodeParameters: Parametrar som måste anges för att kunna byta auktoriseringskoden mot ett ID och/eller en åtkomsttoken.
    • authCode: Auktoriseringskoden som togs emot vid omdirigeringsslutpunkten.
    • REDIRECT_URI: Omdirigerings-URI:n som användes i föregående steg måste skickas igen.
    • SCOPES: Omfången som användes i föregående steg måste skickas igen.
  4. Om acquireToken det lyckas extraheras tokenanspråken. Om nonce-kontrollen godkänns placeras resultatet i context – en instans av IdentityContextData – och sparas i sessionen. Programmet kan sedan instansiera IdentityContextData från sessionen genom en instans av IdentityContextAdapterServlet när det behöver åtkomst till den, som visas i följande kod:

    // parse IdToken claims from the IAuthenticationResult:
    // (the next step - validateNonce - requires parsed claims)
    context.setIdTokenClaims(result.idToken());
    
    // if nonce is invalid, stop immediately! this could be a token replay!
    // if validation fails, throws exception and cancels auth:
    validateNonce(context);
    
    // set user to authenticated:
    context.setAuthResult(result, client.tokenCache().serialize());
    
    // handle groups overage if it has occurred.
    handleGroupsOverage(contextAdapter);
    
  5. Efter föregående steg kan du extrahera gruppmedlemskap genom att anropa context.getGroups() med hjälp av en instans av IdentityContextData.

  6. Om användaren är medlem i för många grupper – mer än 200 – kan ett anrop till context.getGroups() vara tomt om det inte är för anropet till handleGroupsOverage(). context.getGroupsOverage() Under tiden returnerar true, vilket signalerar att ett överförbrukning har inträffat, och att det krävs ett anrop till Microsoft Graph för att få en fullständig lista över grupper. handleGroupsOverage() Se metoden i AuthHelper.java för att se hur det här programmet används context.setGroups() när det finns ett överförbrukning.

Skydda vägarna

Se AuthenticationFilter.java för att se hur exempelappen filtrerar åtkomst till vägar. I filen app.protect.authenticated authentication.properties innehåller egenskapen de kommaavgränsade vägar som endast autentiserade användare kan komma åt, enligt följande exempel:

# for example, /token_details requires any user to be signed in and does not require special groups claim
app.protect.authenticated=/token_details

Alla vägar som anges i kommaavgränsade regeluppsättningar under är också utanför gränserna för icke-autentiserade app.protect.groups autentiserade användare, enligt följande exempel. Dessa vägar innehåller dock också en blankstegsavgränsad lista över gruppmedlemskap. Endast användare som tillhör minst en av motsvarande grupper kan komma åt dessa vägar när de har autentiserats.

# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}

# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/admin_only admin, /regular_user admin user

Omfattningar

Omfång anger för Microsoft Entra-ID vilken åtkomstnivå programmet begär.

Baserat på de begärda omfången presenterar Microsoft Entra-ID en medgivandedialog för användaren vid inloggning. Om användaren samtycker till ett eller flera omfång och hämtar en token kodas scopes-consented-to till i den resulterande access_token.

De omfång som begärs av programmet finns i authentication.properties. Som standard anger programmet omfångsvärdet till GroupMember.Read.All. Det här specifika Microsoft Graph API-omfånget krävs om programmet behöver anropa Graph för att hämta användarens gruppmedlemskap.

Mer information