Java Spring Boot-apps beveiligen met behulp van groepen en groepsclaims
In dit artikel wordt een Java Spring Boot-web-app gedemonstreert die gebruikmaakt van de Microsoft Entra ID Spring Boot Starter-clientbibliotheek voor Java voor verificatie, autorisatie en het verkrijgen van tokens. De app maakt gebruik van het OpenID Connect-protocol om gebruikers aan te melden en beperkt de toegang tot pagina's op basis van het lidmaatschap van de Microsoft Entra ID-beveiligingsgroep.
In het volgende diagram ziet u de topologie van de app:
Diagram met de topologie van de app.
De client-app maakt gebruik van de Microsoft Entra ID Spring Boot Starter-clientbibliotheek voor Java om gebruikers aan te melden in een Microsoft Entra ID-tenant en een id-token te verkrijgen van Microsoft Entra ID.
Het id-token bevat de groepsclaim. De toepassing laadt claims in de Spring-lijst GrantedAuthorities
voor de aangemelde gebruiker. Deze waarden bepalen welke pagina's de gebruiker mag openen.
Zie Autorisatie implementeren in uw toepassingen met behulp van app-rollen, beveiligingsgroepen, bereiken en directoryrollen voor een video waarin dit scenario wordt behandeld.
Vereisten
- JDK versie 15. Dit voorbeeld is ontwikkeld op een systeem met Java 15, maar is mogelijk compatibel met andere versies.
- Maven 3
- Java Extension Pack voor Visual Studio Code wordt aanbevolen voor het uitvoeren van dit voorbeeld in Visual Studio Code.
- Een Microsoft Entra ID-tenant. Zie quickstart: Een tenant instellen voor meer informatie.
- Een gebruikersaccount in uw Microsoft Entra ID-tenant. Dit voorbeeld werkt niet met een persoonlijk Microsoft-account. Als u zich met een persoonlijk account hebt aangemeld bij Azure Portal en u geen gebruikersaccount in uw directory hebt, moet u er nu een maken.
- Twee beveiligingsgroepen, benoemd
AdminGroup
enUserGroup
, met de gebruiker of gebruikers die u wilt ondertekenen en testen dit voorbeeld. U kunt de gebruiker ook toevoegen aan twee bestaande beveiligingsgroepen in uw tenant. Als u ervoor kiest om bestaande groepen te gebruiken, moet u de voorbeeldconfiguratie wijzigen om de naam en object-id van uw bestaande beveiligingsgroepen te gebruiken. - Visual Studio Code
- Azure Tools voor Visual Studio Code
Aanbevelingen
- Enige bekendheid met het Spring Framework.
- Enige bekendheid met Linux/OSX-terminal.
- jwt.ms voor het controleren van uw tokens.
- Fiddler voor het bewaken van uw netwerkactiviteit en het oplossen van problemen.
- Volg de Microsoft Entra ID-blog om op de hoogte te blijven van 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 4-spring-web-app/3-Authorization-II/groups
U kunt ook naar de opslagplaats ms-identity-msal-java-samples navigeren, het downloaden als een .zip-bestand en het extraheren naar uw harde schijf.
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:
Meld u aan bij het Azure-portaal.
Als uw account aanwezig is in meer dan één Microsoft Entra ID-tenant, selecteert u uw profiel in de hoek van Azure Portal en selecteert u vervolgens Schakelen tussen mappen om uw sessie te wijzigen in de gewenste Microsoft Entra ID-tenant.
De app registreren (java-spring-webapp-groups)
Voer de volgende stappen uit om de app te registreren:
Navigeer naar Azure Portal en selecteer Microsoft Entra-id.
Selecteer App-registraties in het navigatiedeelvenster en selecteer vervolgens Nieuwe registratie.
Voer op de pagina Een toepassing registreren die wordt weergegeven de volgende toepassingsregistratiegegevens in:
- Voer in de sectie Naam een beschrijvende toepassingsnaam in om weer te geven aan gebruikers van de app,
java-spring-webapp-groups
bijvoorbeeld. - Onder Ondersteunde accounttypen selecteert u Enkel accounts in deze organisatieadreslijst.
- Selecteer in de sectie Omleidings-URI (optioneel) web in de keuzelijst met invoervak en voer de volgende omleidings-URI in:
http://localhost:8080/login/oauth2/code/
.
- Voer in de sectie Naam een beschrijvende toepassingsnaam in om weer te geven aan gebruikers van de app,
Selecteer Registreren om de toepassing te maken.
Zoek en kopieer op de registratiepagina van de app de waarde van de toepassings-id (client) om later te gebruiken. U gebruikt deze waarde in het configuratiebestand of de bestanden van uw app.
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.
Selecteer in de sectie Clientgeheimen de optie Nieuw clientgeheim.
Typ een beschrijving, bijvoorbeeld app-geheim.
Selecteer een van de beschikbare duur: 6 maanden, 12 maanden of Aangepast.
Selecteer Toevoegen. De gegenereerde waarde wordt weergegeven.
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.
Selecteer op de registratiepagina van de app API-machtigingen in het navigatiedeelvenster om de pagina te openen waar u toegang kunt toevoegen aan de API's die uw toepassing nodig heeft.
Selecteer Een machtiging toevoegen.
Zorg ervoor dat het tabblad Microsoft-API's is geselecteerd.
Selecteer in de sectie Veelgebruikte Microsoft-API's de optie Microsoft Graph.
Selecteer GroupMember.Read.All in de lijst in de sectie Gedelegeerde machtigingen. Gebruik het zoekvak indien nodig. Deze machtiging is nodig voor het ophalen van groepslidmaatschappen via Graph als het overschrijdingsscenario zich voordoet.
Selecteer de knop om beheerderstoestemming te verlenen voor
GroupMember.Read.All
.Selecteer Machtigingen toevoegen.
Beveiligingsgroepen maken
Gebruik de volgende stappen om beveiligingsgroepen te maken:
Navigeer naar Azure Portal en selecteer Microsoft Entra-id.
Selecteer Groepen in het navigatiedeelvenster.
Selecteer nieuwe groep in het deelvenster Groepen en geef de volgende informatie op:
- Selecteer Beveiliging voor groepstype.
- Voer AdminGroup in bij Groepsnaam.
- Voer voor groepsbeschrijving de beveiligingsgroep voor beheerders in.
- Voeg groepseigenaren en groepsleden toe die u in dit voorbeeld wilt gebruiken en testen.
- Selecteer Maken.
Selecteer nieuwe groep in het deelvenster Groepen en geef de volgende informatie op:
- Selecteer Beveiliging voor groepstype.
- Voer UserGroup in als groepsnaam.
- Voer voor groepsbeschrijving de gebruikersbeveiligingsgroep in.
- Voeg groepseigenaren en groepsleden toe die u in dit voorbeeld wilt gebruiken en testen.
- Selecteer Maken.
Raadpleeg Microsoft Entra-groepen en groepslidmaatschap beheren voor meer informatie.
Beveiligingsgroepen configureren
U hebt de volgende opties voor het verder configureren van uw toepassing voor het ontvangen van de groepsclaim:
Alle groepen ontvangen waaraan de aangemelde gebruiker is toegewezen in een Microsoft Entra ID-tenant, opgenomen geneste groepen. Zie de sectie Uw toepassing configureren voor het ontvangen van alle groepen 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 de sectie Uw toepassing configureren voor het ontvangen van de claimwaarden van groepen uit een gefilterde set groepen waaraan een gebruiker mogelijk is toegewezen voor meer informatie. Deze optie is niet beschikbaar in de gratis versie van Microsoft Entra ID.
Notitie
Als u de on-premises groep samAccountName
of On Premises Group Security Identifier
in plaats van de groeps-id wilt ophalen, 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
Gebruik de volgende stappen om de app te configureren:
Selecteer op de registratiepagina van de app tokenconfiguratie in het navigatiedeelvenster om de pagina te openen waar u de claims kunt configureren die aan uw toepassing zijn uitgegeven.
Selecteer Groepenclaim toevoegen om het scherm Groepen claim bewerken te openen.
Selecteer Beveiligingsgroepen OF Alle groepen (inclusief distributielijsten, maar niet aan de toepassing toegewezen groepen). Als u beide kiest, wordt het effect van de optie Beveiligingsgroepen genegeerd.
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 groepsclaim van het id-token dat uw app ontvangt na het aanmelden van een gebruiker.
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 app is niet geïnteresseerd in elke beveiligingsgroep waaraan deze gebruiker is toegewezen in de tenant.
Deze optie helpt uw toepassing het overschrijdingsprobleem te voorkomen.
Notitie
Deze functie is niet beschikbaar in de gratis versie van Microsoft Entra ID.
Geneste groepstoewijzingen zijn niet beschikbaar wanneer u deze optie gebruikt.
Gebruik de volgende stappen om deze optie in te schakelen in uw app:
Selecteer op de registratiepagina van de app tokenconfiguratie in het navigatiedeelvenster om de pagina te openen waar u de claims kunt configureren die aan uw toepassing zijn uitgegeven.
Selecteer Groepenclaim toevoegen om het scherm Groepen claim bewerken te openen.
Selecteer Groepen die zijn toegewezen aan de toepassing en selecteer geen andere opties. Als u meer opties kiest, zoals beveiligingsgroepen of alle groepen (inclusief distributielijsten, maar geen groepen die zijn toegewezen aan de toepassing), worden met deze opties het effect van de groepen die aan de toepassingsoptie zijn toegewezen, verminkt.
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 groepsclaim van het id-token dat uw app ontvangt na het aanmelden van een gebruiker.
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 selectie zorgt ervoor dat Microsoft Entra ID de object-id verzendt van de groepen waaraan de gebruiker is toegewezen in de groepsclaim van het toegangstoken dat is uitgegeven aan de clienttoepassingen van uw API.
Selecteer Op de registratiepagina van de app Overzicht in het navigatiedeelvenster om het scherm Toepassingsoverzicht te openen.
Selecteer de hyperlink met de naam van uw toepassing in beheerde toepassing in de lokale map. Deze veldtitel kan worden afgekapt, bijvoorbeeld een beheerde toepassing in .... Wanneer u deze koppeling selecteert, gaat u naar de pagina Overzicht van bedrijfstoepassingen die is gekoppeld aan de service-principal voor uw toepassing in de tenant waar u deze hebt gemaakt. U kunt teruggaan naar de pagina voor app-registratie met behulp van de knop Vorige van uw browser.
Selecteer Gebruikers en groepen in het navigatiedeelvenster om de pagina te openen waar u gebruikers en groepen aan uw toepassing kunt toewijzen.
Selecteer Gebruiker toevoegen.
Selecteer Gebruiker en Groepen in het resulterende scherm.
Kies de groepen die u aan deze toepassing wilt toewijzen.
Selecteer Selecteren om de groepen te selecteren.
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.
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.
Uw codevoorbeeld configureren voor het gebruik van uw app-registratie en beveiligingsgroepen (java-spring-webapp-groups)
Gebruik de volgende stappen om de app te configureren:
Notitie
In de volgende stappen ClientID
is dit hetzelfde als Application ID
of AppId
.
Open het project in uw IDE.
Open het bestand src\main\resources\application.yml .
Zoek de tijdelijke aanduiding
Enter_Your_Tenant_ID_Here
en vervang de bestaande waarde door uw Microsoft Entra-tenant-id.Zoek de tijdelijke aanduiding
Enter_Your_Client_ID_Here
en vervang de bestaande waarde door de toepassings-id ofclientId
dejava-spring-webapp-groups
app die is gekopieerd uit Azure Portal.Zoek de tijdelijke aanduiding
Enter_Your_Client_Secret_Here
en vervang de bestaande waarde door de waarde die u hebt opgeslagen tijdens het maken vanjava-spring-webapp-groups
de kopie uit Azure Portal.Zoek de tijdelijke aanduiding
Enter_Your_Admin_Group_ID_Here
en vervang de bestaande waarde door deobjectId
waarde van uw AdminGroup.Zoek de tijdelijke aanduiding
Enter_Your_User_Group_ID_Here
en vervang de bestaande waarde door deobjectId
waarde van uw UserGroup.Open het bestand src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java .
Zoek de tijdelijke aanduiding
Enter_Your_Admin_Group_ID_Here
en vervang de bestaande waarde door deobjectId
waarde van uw AdminGroup.Zoek de tijdelijke aanduiding
Enter_Your_User_Group_ID_Here
en vervang de bestaande waarde door deobjectId
waarde van uw UserGroup.
De voorbeeldtoepassing uitvoeren
In de volgende secties ziet u hoe u het voorbeeld implementeert in Azure Container Apps.
Vereisten
- Een Azure-account. Als u nog geen account hebt, kunt u een gratis account maken. U hebt de machtiging
Contributor
ofOwner
voor het Azure-abonnement nodig om door te gaan. Zie voor meer informatie Azure-rollen toewijzen met behulp van de Azure-portal. - De Azure CLI.
- De CLI-extensie, versie
0.3.47
of hoger van Azure Container Apps. Gebruik deaz extension add --name containerapp --upgrade --allow-preview
opdracht om de nieuwste versie te installeren. - De Java Development Kit, versie 17 of hoger.
- Maven.
Het Spring-project voorbereiden
Gebruik de volgende stappen om het project voor te bereiden:
Gebruik de volgende Maven-opdracht om het project te bouwen:
mvn clean verify
Voer het voorbeeldproject lokaal uit met behulp van de volgende opdracht:
mvn spring-boot:run
Instellingen
Als u zich wilt aanmelden bij Azure vanuit de CLI, voert u de volgende opdracht uit en volgt u de aanwijzingen om het verificatieproces te voltooien.
az login
Voer de upgradeopdracht uit om ervoor te zorgen dat u de nieuwste versie van de CLI uitvoert.
az upgrade
Installeer of werk vervolgens de Azure Container Apps-extensie voor de CLI bij.
Als u fouten ontvangt over ontbrekende parameters wanneer u opdrachten uitvoert az containerapp
in Azure CLI, moet u ervoor zorgen dat de nieuwste versie van de Azure Container Apps-extensie is geïnstalleerd.
az extension add --name containerapp --upgrade
Notitie
Vanaf mei 2024 schakelen Azure CLI-extensies standaard geen preview-functies meer in. Als u toegang wilt krijgen tot de preview-functies van Container Apps, installeert u de Container Apps-extensie met --allow-preview true
.
az extension add --name containerapp --upgrade --allow-preview true
Nu de huidige extensie of module is geïnstalleerd, registreert u de Microsoft.App
en Microsoft.OperationalInsights
naamruimten.
Notitie
Azure Container Apps-resources zijn gemigreerd van de Microsoft.Web
naamruimte naar de Microsoft.App
naamruimte. Raadpleeg de naamruimtemigratie van Microsoft.Web naar Microsoft.App in maart 2022 voor meer informatie.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
De Azure Container Apps-omgeving maken
Nu uw Azure CLI-installatie is voltooid, kunt u de omgevingsvariabelen definiëren die in dit artikel worden gebruikt.
Definieer de volgende variabelen in uw bash-shell.
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
Maak een resourcegroep.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
Maak een omgeving met een automatisch gegenereerde Log Analytics-werkruimte.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Het standaarddomein van de container-app-omgeving weergeven. Noteer dit domein voor gebruik in latere secties.
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
De app voorbereiden voor implementatie
Wanneer u uw toepassing implementeert in Azure Container Apps, verandert uw omleidings-URL in de omleidings-URL van uw geïmplementeerde app-exemplaar in Azure Container Apps. Gebruik de volgende stappen om deze instellingen in uw application.yml-bestand te wijzigen:
Navigeer naar het bestand src\main\resources\application.yml van uw app en wijzig de waarde van de domeinnaam van
post-logout-redirect-uri
uw geïmplementeerde app, zoals wordt weergegeven in het volgende voorbeeld. Zorg ervoor dat u de werkelijke waarden vervangt<API_NAME>
en<default-domain-of-container-app-environment>
vervangt. Met het standaarddomein voor uw Azure Container App-omgeving uit de vorige stap enms-identity-api
voor de naam van uw app gebruikt uhttps://ms-identity-api.<default-domain>
bijvoorbeeld voor depost-logout-redirect-uri
waarde.post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
Nadat u dit bestand hebt opgeslagen, gebruikt u de volgende opdracht om uw app opnieuw te bouwen:
mvn clean package
Belangrijk
Het application.yml-bestand van de toepassing bevat momenteel de waarde van uw clientgeheim in de client-secret
parameter. Het is niet raadzaam om deze waarde in dit bestand te bewaren. Mogelijk neemt u ook een risico als u het bestand doorvoert in een Git-opslagplaats. Zie Geheimen beheren in Azure Container Apps voor de aanbevolen aanpak.
De registratie van uw Microsoft Entra ID-app bijwerken
Omdat de omleidings-URI wordt gewijzigd in uw geïmplementeerde app in Azure Container Apps, moet u ook de omleidings-URI wijzigen in de registratie van uw Microsoft Entra ID-app. Gebruik de volgende stappen om deze wijziging aan te brengen:
Ga naar de pagina App-registraties in het Microsoft identity platform voor ontwikkelaars.
Gebruik het zoekvak om te zoeken naar uw app-registratie,
java-servlet-webapp-authentication
bijvoorbeeld.Open uw app-registratie door de naam te selecteren.
Selecteer in het menu de optie Verificatie.
Selecteer URI toevoegen in de sectie Webomleidings-URI's - .
Vul de URI van uw app in, bijvoorbeeld
/login/oauth2/code/
https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
.Selecteer Opslaan.
De app implementeren
Implementeer het JAR-pakket in Azure Container Apps.
Notitie
Indien nodig kunt u de JDK-versie opgeven in de omgevingsvariabelen van de Java-build. Zie Omgevingsvariabelen bouwen voor Java in Azure Container Apps voor meer informatie.
U kunt nu uw WAR-bestand implementeren met de az containerapp up
CLI-opdracht.
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
Notitie
De standaardversie van JDK is 17. Als u de JDK-versie wilt wijzigen voor compatibiliteit met uw toepassing, kunt u het --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
argument gebruiken om het versienummer aan te passen.
Zie Omgevingsvariabelen bouwen voor Java in Azure Container Apps voor meer omgevingsvariabelen.
De app valideren
In dit voorbeeld bevat de containerapp up
opdracht het --query properties.configuration.ingress.fqdn
argument, dat de FQDN (Fully Qualified Domain Name) retourneert, ook wel de URL van de app genoemd. Gebruik de volgende stappen om de logboeken van de app te controleren om een implementatieprobleem te onderzoeken:
Open de URL van de uitvoertoepassing op de pagina Uitvoer van de sectie Implementatie .
Selecteer in het navigatiedeelvenster van de overzichtspagina van het Azure Container Apps-exemplaar logboeken om de logboeken van de app te controleren.
Het voorbeeld verkennen
Gebruik de volgende stappen om het voorbeeld te verkennen:
- U ziet dat de status van de aangemelde of afgemelde status wordt weergegeven in het midden van het scherm.
- Selecteer de contextgevoelige knop in de hoek. Met deze knop wordt Aanmelden gelezen wanneer u de app voor het eerst uitvoert. U kunt ook tokengegevens, alleen beheerders of gewone gebruikers selecteren. Omdat deze pagina's zijn beveiligd en verificatie vereisen, wordt u automatisch omgeleid naar de aanmeldingspagina.
- Volg op de volgende pagina de instructies en meld u aan met een account in de Microsoft Entra ID-tenant.
- In het toestemmingsscherm ziet u de bereiken die worden aangevraagd.
- Wanneer de aanmeldingsstroom is voltooid, wordt u omgeleid naar de startpagina, waarin de aanmeldingsstatus wordt weergegeven, of een van de andere pagina's, afhankelijk van de knop die uw aanmeldingsstroom heeft geactiveerd.
- U ziet dat de contextgevoelige knop nu afmeldt en uw gebruikersnaam weergeeft.
- Als u zich op de startpagina bevindt, selecteert u Details van id-token om enkele van de gedecodeerde claims van het id-token , inclusief groepen, te zien.
- Selecteer Alleen beheerders om de
/admin_only
. Alleen gebruikers die tot deAdminGroup
beveiligingsgroep behoren, kunnen deze pagina bekijken. Anders wordt een autorisatiefoutbericht weergegeven. - Selecteer Normale gebruikers om de
/regular_user
pagina weer te geven. Alleen gebruikers die tot deAdminGroup
beveiligingsgroep behoren, kunnen deze pagina bekijken. Anders wordt een autorisatiefoutbericht weergegeven. - Gebruik de knop in de hoek om u af te melden. De statuspagina geeft de nieuwe status weer.
Over de code
In dit voorbeeld ziet u hoe u de Microsoft Entra ID Spring Boot Starter-clientbibliotheek voor Java gebruikt om gebruikers aan te melden bij uw Microsoft Entra ID-tenant. Het voorbeeld maakt ook gebruik van de Spring Oauth2-client en Spring Web Boot Starters. In het voorbeeld worden claims gebruikt van het id-token dat is verkregen van Microsoft Entra ID om de details van de aangemelde gebruiker weer te geven en om de toegang tot sommige pagina's te beperken met behulp van de groepsclaim voor autorisatie.
Inhoud
In de volgende tabel ziet u de inhoud van de voorbeeldprojectmap:
Bestand/map | Beschrijving |
---|---|
pom.xml | Toepassingsafhankelijkheden. |
src/main/resources/templates/ | Thymeleaf-sjablonen voor de gebruikersinterface. |
src/main/resources/application.yml | Configuratie van de microsoft-entra-id Boot Starter-bibliotheek. |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Deze map bevat het ingangspunt, de controller en de configuratieklassen van de hoofdtoepassing. |
.../MsIdentitySpringBootWebappApplication.java | Hoofdklasse. |
.../SampleController.java | Controller met eindpunttoewijzingen. |
.../SecurityConfig.java | Beveiligingsconfiguratie: voor welke routes bijvoorbeeld verificatie is vereist. |
.../Utilities.java | Hulpprogrammaklasse: bijvoorbeeld filter-id-tokenclaims. |
CHANGELOG.md | Lijst met wijzigingen in het voorbeeld. |
CONTRIBUTING.md | Richtlijnen voor bijdragen aan het voorbeeld. |
LICENTIE | De licentie voor het voorbeeld. |
Id-tokenclaims
Voor het extraheren van tokendetails maakt de app gebruik van Spring Security AuthenticationPrincipal
en OidcUser
het object in een aanvraagtoewijzing, zoals wordt weergegeven in het volgende voorbeeld. Zie de voorbeeldcontroller voor de volledige details van hoe deze app gebruikmaakt van id-tokenclaims.
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();
}
Een groepsclaim verwerken in het id-token
De groepsclaim van het token bevat de namen van de groepen waaraan de aangemelde gebruiker is toegewezen, zoals wordt weergegeven in het volgende voorbeeld:
{
...
"groups": [
"xyz-id-xyz",
"xyz-id-xyz",]
...
}
Een veelgebruikte manier om toegang te krijgen tot de groepsnamen wordt beschreven in de sectie Id-tokenclaims .
Microsoft Entra ID Boot Starter v3.5 en hoger parseert de groepen claim automatisch en voegt elke groep toe aan de aangemelde gebruiker Authorities
. Met deze configuratie kunnen ontwikkelaars gebruikmaken van groepen met Spring-voorwaardenaantekeningen PrePost
met behulp van de hasAuthority
methode. U kunt bijvoorbeeld de volgende @PreAuthorize
voorwaarden vinden die worden weergegeven in SampleController.java:
@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
// restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
// restrict to users who belong to any of UserGroup or AdminGroup
}
Met de volgende code wordt een volledige lijst met bronvermeldingen voor een bepaalde gebruiker weergegeven:
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}
Aanmeldings- en afmeldingskoppelingen
Voor aanmelding doet de app een aanvraag naar het microsoft Entra ID-aanmeldingseindpunt dat automatisch is geconfigureerd door de Microsoft Entra ID Spring Boot Starter-clientbibliotheek voor Java, zoals wordt weergegeven in het volgende voorbeeld:
<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>
Voor afmelden doet de app een POST-aanvraag naar het logout
eindpunt, zoals wordt weergegeven in het volgende voorbeeld:
<form action="#" th:action="@{/logout}" method="post">
<input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
Verificatieafhankelijke UI-elementen
De app heeft een aantal eenvoudige logica op de pagina's van de gebruikersinterfacesjabloon voor het bepalen van de inhoud die moet worden weergegeven op basis van of de gebruiker is geverifieerd, zoals wordt weergegeven in het volgende voorbeeld met spring Security Thymeleaf-tags:
<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>
Routes beveiligen met AADWebSecurityConfigurerAdapter
Standaard beveiligt de app de pagina's Id-tokengegevens, Alleen beheerders en Normale gebruikers , zodat alleen aangemelde gebruikers toegang hebben tot deze pagina's. De app configureert deze routes met behulp van de app.protect.authenticated
eigenschap uit het application.yml-bestand . Als u de specifieke vereisten van uw app wilt configureren, kunt u uitbreiden AADWebSecurityConfigurationAdapter
in een van uw klassen. Zie voor een voorbeeld de SecurityConfig-klasse van deze app, weergegeven in de volgende code:
@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.
}
}
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, 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 een overschrijdingsclaim in het token dat aangeeft aan de toepassing om een query uit te voeren op de Microsoft Graph API om het groepslidmaatschap van de gebruiker op te halen.
Microsoft Entra ID Boot Starter v3.5 en hoger parseert de groepen claim automatisch en voegt elke groep toe aan de aangemelde gebruiker Authorities
. De starter verwerkt automatisch het groepsoverschrijdingsscenario.
Notitie
We raden u ten zeerheid aan de groepsfilterfunctie te gebruiken, indien mogelijk, om te voorkomen dat er groepsoverschrijdingen worden uitgevoerd. Zie de sectie Uw toepassing configureren voor het ontvangen van de claimwaarden van groepen uit een gefilterde set groepen waaraan een gebruiker mogelijk is toegewezen voor meer informatie.
Het overschrijdingsscenario maken voor testen
U kunt het bestand BulkCreateGroups.ps1 in de map AppCreationScripts gebruiken om een groot aantal groepen te maken en gebruikers aan hen toe te wijzen. Dit bestand helpt bij het testen van overschrijdingsscenario's tijdens de ontwikkeling. Vergeet niet om de gebruiker te wijzigen die objectId
is opgegeven in het script BulkCreateGroups.ps1 .
Voor het afhandelen van overschrijding is een aanroep van Microsoft Graph vereist om de groepslidmaatschappen van de aangemelde gebruiker te lezen, zodat uw app de machtigingen User.Read en GroupMember.Read.All heeft om de functie getMemberGroups te kunnen uitvoeren.
Belangrijk
Voor het overschrijdingsscenario moet u ervoor zorgen dat u het bereik van GroupMember.Read.All
de Microsoft Graph API hebt verleend Admin Consent
voor zowel de client- als service-apps. Zie de stappen voor app-registratie eerder in dit artikel voor meer informatie.
De registratie van de Microsoft Entra ID-app bijwerken (java-spring-webapp-groups)
Voer de volgende stappen uit om de app-registratie bij te werken:
Ga terug naar Azure Portal.
Selecteer Azure Active Directory in het navigatiedeelvenster en selecteer vervolgens App-registraties (preview).a0>
Selecteer de
java-spring-webapp-groups
toepassing in het resulterende scherm.Selecteer verificatie in het menu op de registratiepagina van de app.
Werk in de sectie Omleidings-URI's de antwoord-URL's bij zodat deze overeenkomen met de site-URL van uw Azure-implementatie,
https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/
bijvoorbeeld.
Belangrijk
Als uw app een in-memory opslag gebruikt, draait Azure App Services uw website af als deze inactief is en alle records die uw app bewaard, worden geleegd. Als u ook het aantal exemplaren van uw website verhoogt, worden aanvragen verdeeld over de exemplaren. Uw apps-records zijn dus niet hetzelfde op elk exemplaar.
Meer informatie
- Documentatie voor Microsoft Identity Platform
- Overzicht van Microsoft Authentication Library (MSAL)
- Snelstart: Een toepassing registreren op het Microsoft-identiteitsplatform
- Quickstart: Een clienttoepassing configureren voor toegang tot web-API's
- Informatie over toestemmingservaringen voor Microsoft Entra ID-toepassingen
- Toestemming van gebruiker en beheerder
- Toepassings- en service-principal-objecten in Azure Active Directory
- Nationale clouds
- MSAL-codevoorbeelden
Zie Verificatiescenario's voor Microsoft Entra-id voor meer informatie over de werking van OAuth 2.0-protocollen in dit scenario en andere scenario's.