Java WebSphere-apps beveiligen met behulp van groepen en groepsclaims

In dit artikel wordt uitgelegd hoe u een Java WebSphere-app maakt waarmee u gebruikers aanmeldt met Microsoft Authentication Library (MSAL) voor Java. De app beperkt ook de toegang tot pagina's op basis van het lidmaatschap van de beveiligingsgroep Microsoft Entra ID.

In het volgende diagram ziet u de topologie van de app:

Diagram dat de topologie van de app toont.

De client-app gebruikt MSAL voor Java (MSAL4J) om gebruikers aan te melden bij een Microsoft Entra ID-tenant en een ID token op te halen bij Microsoft Entra ID. Het id-token bewijst dat een gebruiker is geverifieerd met deze tenant. De app beveiligt de routes op basis van de verificatiestatus en het groepslidmaatschap van de gebruiker.

Zie Autorisatie in uw toepassingen implementeren met behulp van app-rollen, beveiligingsgroepen, machtigingen en directoryrollen voor een video waarin dit scenario wordt behandeld.

Vereisten

  • JDK versie 8 of hoger
  • Maven 3
  • Een Microsoft Entra ID-tenant. Zie Een Microsoft Entra ID-tenant verkrijgen voor meer informatie.
  • Een gebruikersaccount in uw eigen Microsoft Entra ID-tenant.
  • Twee beveiligingsgroepen, en , die gebruikers bevatten met wie u wilt testen.
  • WebSphere
  • Visual Studio Code
  • Azure Tools voor Visual Studio Code

Aanbevelingen

  • Enige vertrouwdheid met de Java / Jakarta Servlets.
  • Enige bekendheid met Linux/OSX-terminal.
  • jwt.ms om uw tokens te inspecteren.
  • Fiddler om uw netwerkactiviteit te controleren en problemen op te lossen.
  • Volg de Microsoft Entra-blog om up-to-date te blijven met de nieuwste ontwikkelingen.

Het voorbeeld instellen

In de volgende secties ziet u hoe u de voorbeeldtoepassing instelt.

De voorbeeldopslagplaats klonen of downloaden

Als u het voorbeeld wilt klonen, opent u een Bash-venster en gebruikt u de volgende opdracht:

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

U kunt ook naar de ms-identity-msal-java-samples-repository gaan, deze vervolgens als een .zip-bestand downloaden en op uw harde schijf uitpakken.

Belangrijk

Om beperkingen voor bestandspadlengten in Windows te voorkomen, kloont of extraheert u de opslagplaats in een map in de buurt van de hoofdmap van uw harde schijf.

De voorbeeldtoepassing registreren bij uw Microsoft Entra ID-tenant

Er is één project in dit voorbeeld. In de volgende secties ziet u hoe u de app registreert met behulp van Azure Portal.

Kies de Microsoft Entra ID-tenant waar u uw toepassingen wilt maken

Gebruik de volgende stappen om uw tenant te kiezen:

  1. Meld u aan bij de Azure Portal.

  2. Als uw account zich in meer dan één Microsoft Entra ID-tenant bevindt, selecteert u uw profiel in de hoek van de Azure-portal en selecteert u vervolgens Switch directory om uw sessie over te schakelen naar de gewenste Microsoft Entra ID-tenant.

App registreren (java-servlet-webapp-groups)

Registreer eerst een nieuwe app in de Azure-portal door de instructies te volgen in Quickstart: Een toepassing registreren met het Microsoft-identiteitsplatform.

Gebruik vervolgens de volgende stappen om de registratie te voltooien:

  1. Ga naar de pagina App-registraties in het Microsoft identity platform voor ontwikkelaars.

  2. Selecteer Nieuwe registratie.

  3. Voer op de pagina Een toepassing registreren die wordt weergegeven de volgende app-registratiegegevens in:

    • Voer in het gedeelte Name een betekenisvolle toepassingsnaam in die aan gebruikers van de app wordt weergegeven - bijvoorbeeld .
    • Onder Ondersteunde accounttypen selecteert u Enkel accounts in deze organisatieadreslijst.
    • In de sectie Redirect-URI selecteert u Web in de keuzelijst en voert u de volgende redirect-URI in: .
  4. Selecteer Registreren om de toepassing te maken.

  5. Ga op de registratiepagina van de app naar de waarde van Toepassings-id (client) en kopieer deze om later te gebruiken. U gebruikt deze waarde in het configuratiebestand of de bestanden van uw app.

  6. Selecteer Opslaan om uw wijzigingen op te slaan.

  7. Selecteer certificaten en geheimen op de registratiepagina van de app in het navigatiedeelvenster om de pagina te openen waar u geheimen kunt genereren en certificaten kunt uploaden.

  8. Selecteer in de sectie Clientgeheimen de optie Nieuw clientgeheim.

  9. Typ een beschrijving, bijvoorbeeld app-geheim.

  10. Selecteer een vervaldatum voor het geheim of geef een aangepaste levensduur op. Clientgeheimen zijn beperkt tot een maximale levensduur van 24 maanden en Microsoft adviseert een vervaldatum van minder dan 12 maanden. Voor productie-apps gebruikt u bij voorkeur een certificaat of federatieve identiteitsreferentie in plaats van een clientgeheim.

  11. Selecteer Toevoegen. De gegenereerde waarde wordt weergegeven.

  12. Kopieer en sla de gegenereerde waarde op voor gebruik in latere stappen. U hebt deze waarde nodig voor de configuratiebestanden van uw code. Deze waarde wordt niet opnieuw weergegeven en u kunt deze niet op een andere manier ophalen. Zorg er dus voor dat u deze opslaat in Azure Portal voordat u naar een ander scherm of deelvenster navigeert.

  13. Selecteer op de registratiepagina van de app API-machtigingen in het navigatiedeelvenster om de pagina te openen waarop u toegang kunt toevoegen tot de API's die uw app nodig heeft.

  14. Selecteer Een machtiging toevoegen.

  15. Zorg ervoor dat het tabblad Microsoft-API's is geselecteerd.

  16. Selecteer in de sectie Veelgebruikte Microsoft-API's de optie Microsoft Graph.

  17. Selecteer in de sectie Gedelegeerde machtigingen User.Read en GroupMember.Read.All in de lijst. Gebruik het zoekvak indien nodig.

  18. Selecteer Machtigingen toevoegen.

  19. vereist beheerderstoestemming, dus selecteer Beheerderstoestemming verlenen/intrekken voor {tenant} en selecteer vervolgens Ja wanneer u wordt gevraagd of u toestemming wilt verlenen voor de aangevraagde machtigingen voor alle accounts in de tenant. U moet een tenantbeheerder van Microsoft Entra ID zijn om deze actie uit te voeren.


De app (java-servlet-webapp-groups) configureren om uw app-registratie te gebruiken

Gebruik de volgende stappen om de app te configureren:

Notitie

In de volgende stappen is hetzelfde als of .

  1. Open het project in uw IDE.

  2. Open het bestand ./src/main/resources/authentication.properties.

  3. Zoek de tekenreeks . Vervang de bestaande waarde door uw Microsoft Entra-tenant-id als u uw app hebt geregistreerd met de optie Accounts in deze organisatiemap alleen.

  4. Zoek de tekenreeks en vervang de bestaande waarde door de toepassings-id of van de -toepassing die u vanuit Azure Portal hebt gekopieerd.

  5. Zoek de tekenreeks en vervang de bestaande waarde door de waarde die u hebt opgeslagen tijdens het maken van de -app in de Azure-portal.

Beveiligingsgroepen configureren

U hebt de volgende opties beschikbaar voor het verder configureren van uw toepassingen voor het ontvangen van de groepsclaim:

  • Alle groepen ophalen waaraan de aangemelde gebruiker is toegewezen in een Microsoft Entra ID-tenant, inclusief geneste groepen. Zie de sectie Uw toepassing zodanig configureren dat deze alle groepen ontvangt waaraan de aangemelde gebruiker is toegewezen, inclusief geneste groepen voor meer informatie.

  • Ontvang de groepsclaimwaarden van een gefilterde set groepen waarmee uw toepassing is geprogrammeerd om mee te werken. Zie voor meer informatie de sectie Uw toepassing zodanig configureren dat deze de claimwaarden van groepen ontvangt uit een gefilterde set groepen waaraan een gebruiker kan zijn toegewezen. Deze optie is niet beschikbaar in de Microsoft Entra ID Free edition.

Notitie

Als u de of van de on-premises-groep wilt ophalen in plaats van de groeps-id, raadpleegt u de sectie Vereisten voor het gebruik van groepskenmerken die zijn gesynchroniseerd vanuit Active Directory in Groepsclaims configureren voor toepassingen met behulp van Microsoft Entra ID.

Configureer uw toepassing om alle groepen te ontvangen waaraan de aangemelde gebruiker is toegewezen, inclusief geneste groepen

Voer de volgende stappen uit om uw toepassing te configureren:

  1. Selecteer op de registratiepagina van de app Token Configuration in het navigatievenster om de pagina te openen waar u de claims kunt configureren die worden verstrekt in tokens die aan uw toepassing zijn uitgegeven.

  2. Selecteer Groepsclaim toevoegen om het scherm Groepsclaim bewerken te openen.

  3. Selecteer Beveiligingsgroepen OF de optie Alle groepen (inclusief distributielijsten, maar niet groepen die zijn toegewezen aan de toepassing). Als u beide opties kiest, wordt het effect van de optie Beveiligingsgroepen genegeerd.

  4. Selecteer in de sectie Id de optie Groeps-id. Deze selectie zorgt ervoor dat Microsoft Entra ID de object-id's verzendt van de groepen waaraan de gebruiker is toegewezen in de groepsclaim van het ID-token dat uw app ontvangt nadat een gebruiker zich heeft aangemeld.

Configureer uw toepassing voor het ontvangen van de claimwaarden van groepen uit een gefilterde set groepen waaraan een gebruiker mogelijk is toegewezen

Deze optie is handig als de volgende gevallen waar zijn:

  • Uw toepassing is geïnteresseerd in een geselecteerde set groepen waaraan een aanmeldingsgebruiker kan worden toegewezen.
  • Uw toepassing is niet geïnteresseerd in elke beveiligingsgroep waaraan deze gebruiker is toegewezen in de tenant.

Deze optie helpt uw toepassing om het probleem met overschrijding te voorkomen.

Notitie

Deze functie is niet beschikbaar in de Microsoft Entra ID Free-editie.

Geneste groepstoewijzingen zijn niet beschikbaar wanneer u deze optie gebruikt.

Gebruik de volgende stappen om deze optie in te schakelen in uw app:

  1. Selecteer op de registratiepagina van de app Token Configuration in het navigatievenster om de pagina te openen waar u de claims kunt configureren die worden verstrekt in tokens die aan uw toepassing zijn uitgegeven.

  2. Selecteer Groepsclaim toevoegen om het scherm Groepsclaim bewerken te openen.

  3. Selecteer Groepen die zijn toegewezen aan de toepassing.

    Als u andere opties kiest, zoals beveiligingsgroepen of alle groepen (inclusief distributielijsten, maar geen groepen die zijn toegewezen aan de toepassing), worden de voordelen die uw app heeft afgeleid van het kiezen van deze optie wegneemt.

  4. Selecteer in de sectie Id de optie Groeps-id. Deze selectie zorgt ervoor dat Microsoft Entra ID de object-ID verzendt van de groepen waaraan de gebruiker is toegewezen in de claim groups van het ID-token.

  5. Als u een web-API beschikbaar maakt met behulp van de optie Een API beschikbaar maken, kunt u ook de optie Groeps-id kiezen onder de sectie Access . Deze optie zorgt ervoor dat Microsoft Entra ID de object ID verzendt van de groepen waaraan de gebruiker is toegewezen in de groepsclaim van het toegangstoken.

  6. Selecteer op de registratiepagina van de app Overzicht in het navigatiedeelvenster om het overzichtsscherm van de toepassing te openen.

  7. Selecteer de hyperlink met de naam van uw toepassing in beheerde toepassing in de lokale map. De titel van dit veld kan bijvoorbeeld worden afgekapt - . Wanneer u deze koppeling selecteert, gaat u naar de pagina Overzicht van de bedrijfstoepassing die is gekoppeld aan de service-principal voor uw toepassing in de tenant waarin u deze hebt gemaakt. U kunt teruggaan naar de pagina voor app-registratie met behulp van de knop Vorige van uw browser.

  8. Selecteer Gebruikers en groepen in het navigatiedeelvenster om de pagina te openen waar u gebruikers en groepen aan uw toepassing kunt toewijzen.

  9. Selecteer Gebruiker toevoegen.

  10. Selecteer Gebruiker en Groepen in het resulterende scherm.

  11. Kies de groepen die u aan deze toepassing wilt toewijzen.

  12. Selecteer Selecteren om het selecteren van de groepen te voltooien.

  13. Selecteer Toewijzen om het groepstoewijzingsproces te voltooien.

    Uw toepassing ontvangt nu deze geselecteerde groepen in de groepenclaim wanneer een gebruiker die zich aanmeldt bij uw app lid is van een of meer van deze toegewezen groepen.

  14. Selecteer Eigenschappen in het navigatiedeelvenster om de pagina te openen met de basiseigenschappen van uw toepassing. Stel de vereiste gebruikerstoewijzing in opJa.

Belangrijk

Wanneer u gebruikerstoewijzing hebt ingesteld ? op Ja, controleert Microsoft Entra ID of alleen gebruikers die zijn toegewezen aan uw toepassing in het deelvenster Gebruikers en groepen zich kunnen aanmelden bij uw app. U kunt gebruikers rechtstreeks toewijzen of door beveiligingsgroepen toe te wijzen waartoe ze behoren.

De app (java-servlet-webapp-groups) configureren om groeps-id's te herkennen

Gebruik de volgende stappen om de app te configureren:

Belangrijk

Op de pagina Tokenconfiguratie geldt: als u een andere optie dan groupID hebt gekozen, zoals DNSDomain\sAMAccountName, moet u in de volgende stappen de groepsnaam invoeren, bijvoorbeeld , in plaats van de object-ID:

  1. Open het bestand ./src/main/resources/authentication.properties.

  2. Zoek de reeks en vervang de bestaande waarde door de object-ID van de -groep, die u uit de Azure-portal hebt gekopieerd. Verwijder ook de accolades uit de tijdelijke aanduidingswaarde.

  3. Zoek de reeks en vervang de bestaande waarde door de object-ID van de -groep, die u uit de Azure-portal hebt gekopieerd. Verwijder ook de accolades uit de tijdelijke aanduidingswaarde.

Compileer het voorbeeld

Als u het voorbeeld wilt bouwen met behulp van Maven, gaat u naar de map met het pom.xml-bestand voor het voorbeeld en voert u de volgende opdracht uit:

mvn clean package

Met deze opdracht wordt een WAR-bestand gegenereerd dat u op verschillende toepassingsservers kunt uitvoeren.

De voorbeeldtoepassing uitvoeren

In deze instructies wordt ervan uitgegaan dat u WebSphere hebt geïnstalleerd en een server hebt ingesteld. U kunt de richtlijnen in Deploy WebSphere Application Server (traditional) Cluster on Azure Virtuele Machines gebruiken voor een basisserverconfiguratie.

Voordat u naar WebSphere kunt implementeren, gebruikt u de volgende stappen om enkele configuratiewijzigingen aan te brengen in het voorbeeld zelf en vervolgens het pakket te bouwen of opnieuw te bouwen:

  1. Navigeer naar het bestand authentication.properties van uw app en wijzig de waarde van in de URL en het poortnummer van uw server die u wilt gebruiken, zoals weergegeven in het volgende voorbeeld:

    # 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://<server-url>:<port-number>/msal4j-servlet-auth/
    
  2. Nadat u dit bestand hebt opgeslagen, gebruikt u de volgende opdracht om uw app opnieuw te bouwen:

    mvn clean package
    
  3. Nadat het bouwen van de code is voltooid, kopieert u het bestand .war naar het bestandssysteem van uw doelserver.

U moet ook dezelfde wijziging aanbrengen in de registratie van de Azure-app, waarbij u deze instelt in Azure Portal als de waarde voor omleidings-URI op het tabblad Verificatie.

  1. Ga naar de pagina App-registraties in het Microsoft identity platform voor ontwikkelaars.

  2. Gebruik het zoekvak om naar uw app-registratie te zoeken - bijvoorbeeld .

  3. Open uw app-registratie door de naam te selecteren.

  4. Selecteer in het menu de optie Verificatie.

  5. Selecteer in de sectie WebOmleidings-URI's URI toevoegen.

  6. Vul de URI van uw app in en voeg /auth/redirect toe, bijvoorbeeld: .

  7. Selecteer Opslaan.

Gebruik de volgende stappen om het voorbeeld te implementeren met behulp van de Geïntegreerde oplossingenconsole van WebSphere:

  1. Selecteer op het tabblad Toepassingen de optie Nieuwe toepassing en vervolgens Nieuwe ondernemingstoepassing.

  2. Kies het bestand .war dat u hebt gemaakt en klik vervolgens op Volgende totdat u bij de installatiestap Contextroots toewijzen voor webmodules bent. De andere standaardinstellingen moeten goed zijn.

  3. Voor de context-root stelt u dezelfde waarde in als die na het poortnummer in de 'Redirect URI' die u hebt ingesteld in de voorbeeldconfiguratie/Azure-app-registratie. Dat wil zeggen, als de redirect-URI is, dan moet de contextroot zijn.

  4. Selecteer Voltooien.

  5. Nadat de installatie van de toepassing is voltooid, gaat u naar de sectie Bedrijfstoepassingen van WebSphere van het tabblad Toepassingen .

  6. Selecteer het WAR-bestand dat u hebt geïnstalleerd in de lijst met toepassingen en selecteer vervolgens Starten om te implementeren.

  7. Nadat de implementatie is voltooid, navigeert u naar en zou u de toepassing moeten kunnen zien.

Het voorbeeld verkennen

Gebruik de volgende stappen om het voorbeeld te verkennen:

  1. Merk op dat de aanmeldings- of afmeldstatus in het midden van het scherm wordt weergegeven.
  2. Selecteer de contextgevoelige knop in de hoek. Op deze knop staat Sign In wanneer u de app voor het eerst opent.
  3. Volg op de volgende pagina de instructies en meld u aan met een account in de Microsoft Entra ID-tenant.
  4. Let op de machtigingen die op het toestemmingsscherm worden gevraagd.
  5. Merk op dat de contextgevoelige knop nu Afmelden zegt en uw gebruikersnaam weergeeft.
  6. Selecteer Details van id-token om enkele van de gedecodeerde claims van het id-token weer te geven.
  7. Selecteer Groepen om informatie over lidmaatschap van beveiligingsgroepen voor de aangemelde gebruiker weer te geven.
  8. Selecteer Alleen beheerder of Gewone gebruiker om toegang te krijgen tot de eindpunten die worden beveiligd door de groups-claim.
    • Als uw aangemelde gebruiker zich in de -groep bevindt, kan die beide pagina's openen.
    • Als uw aangemelde gebruiker zich in de -groep bevindt, kan de gebruiker alleen de pagina Standaardgebruiker openen.
    • Als uw aangemelde gebruiker zich in geen van beide groepen bevindt, heeft de gebruiker geen toegang tot een van de twee pagina's.
  9. Gebruik de knop in de hoek om u af te melden.
  10. Nadat u zich hebt afgemeld, selecteert u ID-tokendetails om te zien dat de app een -fout weergeeft in plaats van de claims van het ID-token wanneer de gebruiker niet is geautoriseerd.

Over de code

In dit voorbeeld wordt MSAL voor Java (MSAL4J) gebruikt om een gebruiker aan te melden en een id-token te verkrijgen dat de groepsclaim kan bevatten. Als er te veel groepen zijn om in het ID-token op te nemen, gebruikt het voorbeeld Microsoft Graph SDK voor Java om de gegevens over groepslidmaatschap op te halen uit Microsoft Graph. Afhankelijk van de groepen waartoe de gebruiker behoort, kan de aangemelde gebruiker geen van beide, één of beide beveiligde pagina's openen: en .

Als u het gedrag van dit voorbeeld wilt repliceren, moet u MSAL4J en Microsoft Graph SDK toevoegen aan uw projecten met behulp van Maven. U kunt het bestand pom.xml en de inhoud van de mappen helpers en authservlets in de map src/main/java/com/microsoft/azuresamples/msal4j kopiëren. U hebt ook het bestand authentication.properties nodig. Deze klassen en bestanden bevatten algemene code die u kunt gebruiken in een breed scala aan toepassingen. U kunt ook de rest van het voorbeeld kopiëren, maar de andere klassen en bestanden zijn specifiek ontworpen om aan het doel van dit voorbeeld te voldoen.

Inhoud

In de volgende tabel ziet u de inhoud van de voorbeeldprojectmap:

Bestand/map Beschrijving
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Deze map bevat de klassen die de bedrijfslogica van de back-end van de app definiëren.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Deze map bevat de klassen die worden gebruikt voor aanmeldings- en afmeldingseindpunten.
*Servlet.java Alle beschikbare eindpunten worden gedefinieerd in Java-klassen met namen die eindigen op Servlet.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Helperklassen voor verificatie.
AuthenticationFilter.java Leidt niet-geverifieerde verzoeken naar beveiligde eindpunten om naar een 401-pagina.
src/main/resources/authentication.properties Configuratie van Microsoft Entra-id en -programma.
src/main/webapp/ Deze map bevat de gebruikersinterface - JSP-sjablonen
CHANGELOG.md Lijst met wijzigingen in het voorbeeld.
CONTRIBUTING.md Richtlijnen voor bijdragen aan het voorbeeld.
LICENTIE De licentie voor het voorbeeld.

Een groepsclaim in tokens verwerken, inclusief het afhandelen van overloop

In de volgende secties wordt beschreven hoe de app een groepsclaim verwerkt.

De groepsclaim

De object-id van de beveiligingsgroepen waarvan de aangemelde gebruiker lid is, wordt geretourneerd in de groepsclaim van het token, zoals wordt weergegeven in het volgende voorbeeld:

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

De overschrijdingsclaim voor groepen

Om ervoor te zorgen dat de grootte van het token niet groter is dan de limieten voor HTTP-headers, beperkt het Microsoft Identity Platform het aantal object-id's dat het bevat in de groepsclaim.

De overschrijdingslimiet is 150 voor SAML-tokens, 200 voor JWT-tokens en 6 voor toepassingen met één pagina. Als een gebruiker lid is van meer groepen dan de overschrijdingslimiet, verzendt het Microsoft Identity Platform de groeps-id's niet in de groepsclaim in het token. In plaats daarvan bevat het token een overage-claim die aangeeft dat de toepassing een query moet uitvoeren op de Microsoft Graph API om het groepslidmaatschap van de gebruiker op te halen, zoals in het volgende voorbeeld wordt weergegeven:

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

Maak het overschrijdingsscenario in dit voorbeeld om te testen

Als u het overschrijdingsscenario wilt maken, kunt u de volgende stappen uitvoeren:

  1. U kunt het bestand BulkCreateGroups.ps1 gebruiken dat zich in de map AppCreationScripts bevindt om een groot aantal groepen te maken en gebruikers eraan toe te wijzen. Dit bestand helpt bij het testen van overschrijdingsscenario's tijdens de ontwikkeling. Vergeet niet de van de gebruiker te wijzigen die is opgegeven in het script BulkCreateGroups.ps1.

  2. Wanneer u dit voorbeeld uitvoert en er een overschot plaatsvindt, ziet u de _claim_names op de startpagina nadat de gebruiker is ingelogd.

  3. We raden u ten zeere aan de groepsfilterfunctie, indien mogelijk, te gebruiken om te voorkomen dat er groepsoverschrijdingen worden uitgevoerd. Zie de sectie Uw toepassing configureren om groepen-claimwaarden te ontvangen uit een gefilterde set groepen waaraan een gebruiker mogelijk is toegewezen voor meer informatie.

  4. Als u niet kunt voorkomen dat er groepsoverschrijding optreedt, raden we u aan de volgende stappen te gebruiken om de groepsclaim in uw token te verwerken:

    1. Controleer de claim _claim_names, waarbij een van de waarden groepenis. Deze claim geeft overschrijding aan.
    2. Indien gevonden, roept u het eindpunt aan dat is opgegeven in _claim_sources om de groepen van gebruikers op te halen.
    3. Als er geen gevonden is, kijkt u naar de groepsclaim voor gebruikersgroepen.

Notitie

Voor het afhandelen van een overschrijding is een aanroep naar Microsoft Graph vereist om de groepslidmaatschappen van de aangemelde gebruiker te lezen, dus moet uw app beschikken over de machtiging GroupMember.Read.All zodat de functie getMemberObjects succesvol kan worden uitgevoerd.

Zie de video Een inleiding tot Microsoft Graph voor ontwikkelaars voor meer informatie over programmeren voor Microsoft Graph.

ConfidentialClientApplication

Er wordt een exemplaar van gemaakt in het bestand AuthHelper.java, zoals in het volgende voorbeeld wordt weergegeven. Dit object helpt bij het maken van de Autorisatie-URL van Microsoft Entra en helpt ook bij het uitwisselen van het verificatietoken voor een toegangstoken.

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

De volgende parameters worden gebruikt voor instantiëring:

  • De client-id van de app.
  • Het clientgeheim, dat vereist is voor Vertrouwelijke clienttoepassingen.
  • De Microsoft Entra-id-autoriteit, die uw Microsoft Entra-tenant-id bevat.

In dit voorbeeld worden deze waarden gelezen uit het bestand authentication.properties met behulp van een eigenschappenlezer in het bestand Config.java .

Stapsgewijze handleiding

De volgende stappen bieden een overzicht van de functionaliteit van de app:

  1. De eerste stap van het aanmeldproces is het verzenden van een aanvraag naar het -eindpunt voor uw Microsoft Entra ID-tenant. Het MSAL4J-exemplaar wordt gebruikt om een URL voor een autorisatieaanvraag op te bouwen. De app leidt de browser om naar deze URL, waar de gebruiker zich aanmeldt.

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

    In de volgende lijst worden de functies van deze code beschreven:

    • : Parameters die moeten worden ingesteld om een AuthorizationRequestUrl op te bouwen.
    • : Waar Microsoft Entra de browser naartoe omleidt, samen met de autorisatiecode, nadat de gebruikersgegevens zijn verzameld. Deze moet overeenkomen met de omleidings-URI in de app-registratie voor Microsoft Entra ID in de Azure-portal.
    • : Scopes zijn machtigingen die door de applicatie worden aangevraagd.
      • Normaal gesproken volstaan de drie scopes voor het ontvangen van een ID-tokenreactie.
      • De volledige lijst met door de app aangevraagde machtigingen is te vinden in het bestand authentication.properties. U kunt meer machtigingen toevoegen, zoals .
  2. De gebruiker krijgt een aanmeldingsprompt van Microsoft Entra ID. Als de aanmeldingspoging is geslaagd, wordt de browser van de gebruiker omgeleid naar het omleidingseindpunt van de app. Een geldig verzoek aan dit eindpunt bevat een autorisatiecode.

  3. Het -exemplaar wisselt deze autorisatiecode vervolgens uit voor een ID-token en toegangstoken van 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();
    

    In de volgende lijst worden de functies van deze code beschreven:

    • : Parameters die moeten worden ingesteld om de autorisatiecode voor een ID-token en/of toegangstoken uit te wisselen.
    • : De autorisatiecode die is ontvangen bij het omleidingseindpunt.
    • : De redirect-URI die in de vorige stap is gebruikt, moet opnieuw worden meegegeven.
    • : De scopes die in de vorige stap zijn gebruikt, moeten opnieuw worden doorgegeven.
  4. Als slaagt, worden de tokenclaims geëxtraheerd. Als de nonce-controle slaagt, worden de resultaten in geplaatst — een exemplaar van — en in de sessie opgeslagen. De toepassing kan vervolgens de uit de sessie instantiëren via een exemplaar van wanneer zij er toegang toe nodig heeft, zoals in de volgende code wordt weergegeven:

    // 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. Na de vorige stap kunt u groepslidmaatschappen extraheren door aan te roepen met een exemplaar van .

  6. Als de gebruiker lid is van te veel groepen - meer dan 200 - kan een aanroep naar leeg zijn zonder de aanroep naar . Ondertussen retourneert , wat aangeeft dat er een overschrijding is opgetreden en dat voor het ophalen van de volledige lijst met groepen een aanroep naar Microsoft Graph nodig is. Zie de -methode in AuthHelper.java om te zien hoe deze toepassing gebruikt wanneer er sprake is van overloop.

De routes beveiligen

Zie AuthenticationFilter.java om te zien hoe de voorbeeld-app de toegang tot routes filtert. In het bestand authentication.properties bevat de -eigenschap de door komma's gescheiden routes waartoe alleen geverifieerde gebruikers toegang hebben, zoals in het volgende voorbeeld wordt weergegeven:

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

Alle routes die worden vermeld in de door komma’s gescheiden regelsets onder de , zijn ook niet toegankelijk voor niet-geverifieerde gebruikers, zoals in het volgende voorbeeld wordt weergegeven. Deze routes bevatten echter ook een door spaties gescheiden lijst met groepslidmaatschappen. Alleen gebruikers die tot ten minste één van de bijbehorende groepen behoren, hebben na verificatie toegang tot deze routes.

# 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

Scopes

Scopes geven Microsoft Entra ID aan welk toegangsniveau de applicatie aanvraagt.

Op basis van de aangevraagde machtigingen toont Microsoft Entra ID de gebruiker een toestemmingsvenster wanneer deze zich aanmeldt. Als de gebruiker instemt met een of meer scopes en een token verkrijgt, worden de scopes waarvoor toestemming is gegeven gecodeerd in de resulterende .

Zie authentication.properties voor de machtigingen die door de toepassing zijn aangevraagd. Standaard stelt de applicatie de waarde van scopes in op . Dit specifieke Microsoft Graph API-bereik is vereist voor het geval de toepassing Graph moet aanroepen om de groepslidmaatschappen van de gebruiker op te halen.

Meer informatie

  • Microsoft Authentication Library (MSAL) voor Java
  • Microsoft identity platform (Microsoft Entra ID voor ontwikkelaars)
  • Snelstart: een toepassing registreren bij het Microsoft identity platform
  • Inzicht in toestemmingservaringen voor toepassingen in Microsoft Entra ID
  • Begrijp de toestemming van gebruikers en beheerders
  • MSAL-codevoorbeelden

Volgende stap

Java WebSphere-apps implementeren naar Traditional WebSphere op Virtuele Azure-machines