Delen via


Java JBoss EAP-apps beveiligen met behulp van rollen en rolclaims

In dit artikel wordt een Java JBoss EAP-app gedemonstreert die gebruikmaakt van OpenID Connect om gebruikers aan te melden en Microsoft Entra ID-toepassingsrollen (app-rollen) voor autorisatie.

Deze toepassing implementeert op rollen gebaseerd toegangsbeheer (RBAC) met behulp van de toepassingsrollen en functie voor rolclaims van Microsoft Entra ID. Een andere benadering is het gebruik van Microsoft Entra-id-groepen en groepsclaims. Microsoft Entra ID-groepen en toepassingsrollen sluiten elkaar niet wederzijds uit. U kunt ze beide gebruiken om gedetailleerd toegangsbeheer te bieden.

U kunt RBAC ook gebruiken met toepassingsrollen en rolclaims om veilig autorisatiebeleid af te dwingen.

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

Zie Verificatie versus autorisatie voor meer informatie over de werking van de protocollen in dit scenario en in andere scenario's.

Deze toepassing maakt gebruik van MSAL voor Java (MSAL4J) om een gebruiker aan te melden en een id-token op te halen van Microsoft Entra ID.

In dit voorbeeld wordt eerst MSAL voor Java (MSAL4J) gebruikt om de gebruiker aan te melden. Op de startpagina wordt een optie weergegeven voor de gebruiker om de claims in hun id-tokens weer te geven. Met deze toepassing kunnen gebruikers ook een bevoegde beheerderspagina of een gewone gebruikerspagina bekijken, afhankelijk van de app-rol waaraan ze zijn toegewezen. Het idee is om een voorbeeld te geven van hoe toegang binnen een toepassing tot bepaalde functionaliteit of pagina's wordt beperkt tot subsets van gebruikers, afhankelijk van de rol waartoe ze behoren.

Dit type autorisatie wordt geïmplementeerd met RBAC. Met RBAC verleent een beheerder machtigingen aan rollen, niet aan afzonderlijke gebruikers of groepen. De beheerder kan vervolgens rollen toewijzen aan verschillende gebruikers en groepen om te bepalen wie toegang heeft tot bepaalde inhoud en functionaliteit.

Deze voorbeeldtoepassing definieert de volgende twee toepassingsrollen:

  • PrivilegedAdmin: Alleen gemachtigd voor toegang tot de beheerderspagina's en de pagina's Normale gebruikers .
  • RegularUser: Geautoriseerd voor toegang tot de pagina Normale gebruikers .

Deze toepassingsrollen worden gedefinieerd in Azure Portal in het registratiemanifest van de toepassing. Wanneer een gebruiker zich aanmeldt bij de toepassing, verzendt Microsoft Entra ID een rolclaim voor elke rol die afzonderlijk aan de gebruiker wordt verleend in de vorm van rollidmaatschap.

U kunt gebruikers en groepen toewijzen aan rollen via Azure Portal.

Notitie

Rolclaims zijn niet aanwezig voor gastgebruikers in een tenant als het https://login.microsoftonline.com/common/ eindpunt wordt gebruikt als de autoriteit om gebruikers aan te melden. U moet een gebruiker aanmelden bij een tenant-eindpunt, zoals https://login.microsoftonline.com/tenantid.

Vereisten

  • JDK versie 8 of hoger
  • Maven 3
  • Een Microsoft Entra ID-tenant. Zie Een Microsoft Entra ID-tenant ophalen voor meer informatie.
  • Een gebruikersaccount in uw eigen Microsoft Entra ID-tenant als u alleen met accounts in uw organisatiedirectory wilt werken, dat wil zeggen de modus voor één tenant. Als u nog geen gebruikersaccount in uw tenant hebt gemaakt, moet u dit doen voordat u doorgaat. Zie Gebruikers maken, uitnodigen en verwijderen voor meer informatie.

Aanbevelingen

  • Enige bekendheid met de Java / Jakarta Servlets.
  • 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 3-java-servlet-web-app/3-Authorization-II/roles

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:

  1. Meld u aan bij het Azure-portaal.

  2. 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-servlet-webapp-roles)

Registreer eerst een nieuwe app in Azure Portal door de instructies in quickstart te volgen: Een toepassing registreren bij het Microsoft Identity Platform.

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 de sectie Naam een beschrijvende toepassingsnaam in om weer te geven aan gebruikers van de app, java-servlet-webapp-rolesbijvoorbeeld.

    • Selecteer onder Ondersteunde accounttypen een van de volgende opties:

      • Selecteer Alleen accounts in deze organisatiemap als u een toepassing bouwt voor alleen gebruik door gebruikers in uw tenant, dat wil gezegd een toepassing met één tenant.
    • Selecteer in de sectie Omleidings-URI het web in de keuzelijst met invoervak en voer de volgende omleidings-URI in: http://localhost:8080/msal4j-servlet-roles/auth/redirect.

  4. Selecteer Registreren om de toepassing te maken.

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

  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 van de beschikbare duur: in 1 jaar, in 2 jaar of nooit verloopt.

  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.

De toepassingsrollen definiëren

Gebruik de volgende stappen om de app-rollen te definiëren:

  1. Selecteer app-rollen in het navigatiedeelvenster terwijl u zich nog steeds bij dezelfde app-registratie bevindt.

  2. Selecteer App-rol maken en voer vervolgens de volgende waarden in:

    • Voer voor Weergavenaam een geschikte naam in, bijvoorbeeld PrivilegedAdmin.
    • Kies Gebruiker voor toegestane lidtypen.
    • Voer PrivilegedAdmin in als waarde.
    • Voer voor Beschrijving PrivilegedAdmins in die de beheerpagina kan bekijken.
  3. Selecteer App-rol maken en voer vervolgens de volgende waarden in:

    • Voer voor Weergavenaam een geschikte naam in, bijvoorbeeld RegularUser.
    • Kies Gebruiker voor toegestane lidtypen.
    • Voer Voor Waarde RegularUser in.
    • Voer voor Beschrijving RegularUsers in die de gebruikerspagina kunnen bekijken.
  4. Selecteer Toepassen om uw wijzigingen op te slaan.

Gebruikers toewijzen aan de toepassingsrollen

Als u gebruikers wilt toevoegen aan de app-rol die eerder is gedefinieerd, volgt u de richtlijnen hier: Gebruikers en groepen toewijzen aan rollen.


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

Gebruik de volgende stappen om de app te configureren:

Notitie

In de volgende stappen ClientID is dit hetzelfde als Application ID of AppId.

  1. Open het project in uw IDE.

  2. Open het bestand authentication.properties .

  3. Zoek de tekenreeks {enter-your-tenant-id-here}. Vervang de bestaande waarde door de tenant-id van Microsoft Entra ID.

  4. Zoek de tekenreeks {enter-your-client-id-here} en vervang de bestaande waarde door de toepassings-id of clientId de java-servlet-webapp-call-graph toepassing die is gekopieerd uit Azure Portal.

  5. Zoek de tekenreeks {enter-your-client-secret-here} en vervang de bestaande waarde door de waarde die u hebt opgeslagen tijdens het maken van de java-servlet-webapp-roles app in Azure Portal.

  6. Zoek de app.roles eigenschap en zorg ervoor dat de waarde is ingesteld op app.roles=admin PrivilegedAdmin, user RegularUser, of vervang de namen van uw specifieke rollen.

Bouw het sample

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 de volgende secties ziet u hoe u het voorbeeld implementeert in Azure-app Service.

Vereisten

De Maven-invoegtoepassing configureren

Het implementatieproces voor Azure-app Service maakt automatisch gebruik van uw Azure-referenties uit de Azure CLI. Als de Azure CLI niet lokaal is geïnstalleerd, verifieert de Maven-invoegtoepassing zich met OAuth of apparaataanmelding. Zie verificatie met Maven-invoegtoepassingen voor meer informatie.

Gebruik de volgende stappen om de invoegtoepassing te configureren:

  1. Voer de Maven-opdracht uit die wordt weergegeven naast het configureren van de implementatie. Met deze opdracht kunt u het App Service-besturingssysteem, de Java-versie en de Tomcat-versie instellen.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
    
  2. Als u een nieuwe uitvoeringsconfiguratie wilt maken, drukt u op Y en vervolgens op Enter.

  3. Voor De waarde Definiëren voor het besturingssysteem drukt u op 2 voor Linux en drukt u vervolgens op Enter.

  4. Druk voor De waarde definiëren voor javaVersion op 2 voor Java 11 en druk vervolgens op Enter.

  5. Druk voor De waarde definiëren voor webContainer op 1 voor JBosseap7 en druk vervolgens op Enter.

  6. Voor Waarde definiëren voor pricingTier drukt u op Enter om de standaard P1v3-laag te selecteren.

  7. Voor Bevestigen drukt u op Y en drukt u vervolgens op Enter.

In het volgende voorbeeld ziet u de uitvoer van het implementatieproces:

Please confirm webapp properties
AppName : msal4j-servlet-auth-1707220080695
ResourceGroup : msal4j-servlet-auth-1707220080695-rg
Region : centralus
PricingTier : P1v3
OS : Linux
Java Version: Java 11
Web server stack: JBosseap 7
Deploy to slot : false
Confirm (Y/N) [Y]:
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  26.196 s
[INFO] Finished at: 2024-02-06T11:48:16Z
[INFO] ------------------------------------------------------------------------

Nadat u uw keuzes hebt bevestigd, voegt de invoegtoepassing de configuratie van de invoegtoepassing en de vereiste instellingen toe aan het pom.xml-bestand van uw project om uw app te configureren voor uitvoering in Azure-app Service.

Het relevante gedeelte van het pom.xml-bestand moet er ongeveer uitzien als in het volgende voorbeeld:

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

U kunt de configuraties voor App Service rechtstreeks in uw pom.xml wijzigen. Enkele algemene configuraties worden vermeld in de volgende tabel:

Eigenschappen Vereist Beschrijving Versie
schemaVersion false De versie van het configuratieschema. Ondersteunde waarden zijn v1 en v2. 1.5.2
subscriptionId false De abonnements-id. 0.1.0+
resourceGroup true De Azure-resourcegroep voor uw app. 0.1.0+
appName true De naam van uw app. 0.1.0+
region false De regio waarin u uw app wilt hosten. De standaardwaarde is centralus. Zie Ondersteunde regio's voor geldige regio's. 0.1.0+
pricingTier false De prijscategorie voor uw app. De standaardwaarde is P1v2 voor een productieworkload. De aanbevolen minimumwaarde voor Java-ontwikkeling en -tests is B2. Zie App Service-prijzen voor meer informatie 0.1.0+
runtime false De configuratie van de runtime-omgeving. Zie Configuratiedetails voor meer informatie. 0.1.0+
deployment false De implementatieconfiguratie. Zie Configuratiedetails voor meer informatie. 0.1.0+

Zie de referentiedocumentatie van de invoegtoepassing voor de volledige lijst met configuraties. Alle Azure Maven-invoegtoepassingen delen een algemene set configuraties. Zie Common Configurations voor deze configuraties. Zie de Azure-app: Configuratiedetails voor configuraties die specifiek zijn voor Azure-app Service.

Zorg ervoor dat u de appName waarden en resourceGroup waarden opslaat voor later gebruik.

De app voorbereiden voor implementatie

Wanneer u uw toepassing implementeert in App Service, verandert uw omleidings-URL in de omleidings-URL van uw geïmplementeerde app-exemplaar. Gebruik de volgende stappen om deze instellingen in het eigenschappenbestand te wijzigen:

  1. Navigeer naar het bestand authentication.properties van uw app en wijzig de waarde van de domeinnaam van app.homePage uw geïmplementeerde app, zoals wordt weergegeven in het volgende voorbeeld. Als u bijvoorbeeld in de vorige stap voor uw app-naam hebt gekozen example-domain , moet u deze nu gebruiken https://example-domain.azurewebsites.net voor de app.homePage waarde. Zorg ervoor dat u ook het protocol hebt gewijzigd van http in 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. Nadat u dit bestand hebt opgeslagen, gebruikt u de volgende opdracht om uw app opnieuw te bouwen:

    mvn clean package
    

Belangrijk

In hetzelfde bestand authentication.properties hebt u een instelling voor uw aad.secret. Het is geen goede gewoonte om deze waarde in App Service te implementeren. Het is ook geen goed idee om deze waarde in uw code te laten staan en deze mogelijk naar uw Git-opslagplaats te pushen. Voor het verwijderen van deze geheime waarde uit uw code vindt u gedetailleerdere richtlijnen in de sectie Implementeren in App Service - Geheim verwijderen. Met deze richtlijnen worden extra stappen toegevoegd voor het pushen van de geheime waarde naar Key Vault en het gebruik van Key Vault-verwijzingen.

De registratie van uw Microsoft Entra ID-app bijwerken

Omdat de omleidings-URI wordt gewijzigd in uw geïmplementeerde app in Azure-app Service, 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:

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

  2. Gebruik het zoekvak om te zoeken naar uw app-registratie, java-servlet-webapp-authenticationbijvoorbeeld.

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

  4. Selecteer in het menu de optie Verificatie.

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

  6. Vul de URI van uw app in, bijvoorbeeld /auth/redirecthttps://<your-app-name>.azurewebsites.net/auth/redirect.

  7. Selecteer Opslaan.

De app implementeren

U bent nu klaar om uw app te implementeren in Azure-app Service. Gebruik de volgende opdracht om ervoor te zorgen dat u bent aangemeld bij uw Azure-omgeving om de implementatie uit te voeren:

az login

Nu alle configuraties klaar zijn in uw pom.xml-bestand , kunt u nu de volgende opdracht gebruiken om uw Java-app in Azure te implementeren:

mvn package azure-webapp:deploy

Nadat de implementatie is voltooid, is uw toepassing gereed op http://<your-app-name>.azurewebsites.net/. Open de URL met uw lokale webbrowser, waar u de startpagina van de msal4j-servlet-auth toepassing zou moeten zien.

Het voorbeeld verkennen

Gebruik de volgende stappen om het voorbeeld te verkennen:

  1. U ziet dat de status van de aangemelde of afgemelde status wordt weergegeven in het midden van het scherm.
  2. Selecteer de contextgevoelige knop in de hoek. Met deze knop wordt Aanmelden gelezen wanneer u de app voor het eerst uitvoert.
  3. Volg op de volgende pagina de instructies en meld u aan met een account in de Microsoft Entra ID-tenant.
  4. In het toestemmingsscherm ziet u de bereiken die worden aangevraagd.
  5. U ziet dat de contextgevoelige knop nu afmeldt 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 Alleen beheerders om de /admin_only pagina weer te geven. Alleen gebruikers met een app-rol PrivilegedAdmin kunnen deze pagina bekijken. Anders wordt een autorisatiefoutbericht weergegeven.
  8. Selecteer Normale gebruikers om de /regular_user pagina weer te geven. Alleen gebruikers met app-rol RegularUser of PrivilegedAdmin kunnen deze pagina bekijken. Anders wordt een autorisatiefoutbericht weergegeven.
  9. Gebruik de knop in de hoek om u af te melden.

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 rolclaim kan bevatten. Op basis van de rollenclaim die aanwezig is, heeft de aangemelde gebruiker toegang tot geen, één of beide beveiligde pagina's Admins Only en Regular Users.

Als u het gedrag van dit voorbeeld wilt repliceren, kunt u het pom.xml-bestand en de inhoud van de helpers en authservlets-mappen kopiëren in de map src/main/java/com/microsoft/azuresamples/msal4j . 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 gebouwd om het doel van dit voorbeeld te verhelpen.

Inhoud

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

Bestand/map Beschrijving
src/main/java/com/microsoft/azuresamples/msal4j/roles/ 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 aanvragen om naar beveiligde eindpunten 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 rollenclaim verwerken in het id-token

De rollenclaim van het token bevat de namen van de rollen waaraan de aangemelde gebruiker is toegewezen, zoals wordt weergegeven in het volgende voorbeeld:

{
  ...
  "roles": [
    "Role1",
    "Role2",]
  ...
}

ConfidentialClientApplication

Er ConfidentialClientApplication wordt een exemplaar gemaakt in het AuthHelper.java-bestand , zoals wordt weergegeven in het volgende voorbeeld. 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-instantie, 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 procedure

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

  1. De eerste stap van het aanmeldingsproces is het verzenden van een aanvraag naar het /authorize eindpunt voor uw Microsoft Entra ID-tenant. Het MSAL4J-exemplaar ConfidentialClientApplication wordt gebruikt om een AUTORISATIEaanvraag-URL samen te stellen. 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:

    • AuthorizationRequestUrlParameters: Parameters die moeten worden ingesteld om een AuthorizationRequestUrl te bouwen.
    • REDIRECT_URI: Waar Microsoft Entra ID de browser omleidt, samen met de verificatiecode, na het verzamelen van gebruikersreferenties. Deze moet overeenkomen met de omleidings-URI in de registratie van de Microsoft Entra ID-app in Azure Portal.
    • SCOPES: Bereiken zijn machtigingen die door de toepassing worden aangevraagd.
      • Normaal gesproken volstaan openid profile offline_access de drie bereiken voor het ontvangen van een id-tokenantwoord.
      • De volledige lijst met bereiken die door de app zijn aangevraagd, vindt u in het bestand authentication.properties . U kunt meer bereiken toevoegen, zoals User.Read.
  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 geldige aanvraag voor dit eindpunt bevat een autorisatiecode.

  3. Het ConfidentialClientApplication 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:

    • AuthorizationCodeParameters: Parameters die moeten worden ingesteld om de autorisatiecode voor een id en/of toegangstoken uit te wisselen.
    • authCode: De autorisatiecode die is ontvangen op het omleidingseindpunt.
    • REDIRECT_URI: De omleidings-URI die in de vorige stap is gebruikt, moet opnieuw worden doorgegeven.
    • SCOPES: De bereiken die in de vorige stap worden gebruikt, moeten opnieuw worden doorgegeven.
  4. Als acquireToken dit lukt, worden de tokenclaims geëxtraheerd. Als de nonce-controle is geslaagd, worden de resultaten geplaatst in context - een exemplaar van IdentityContextData - en opgeslagen in de sessie. De toepassing kan de sessie vervolgens instantiëren IdentityContextData via een exemplaar van IdentityContextAdapterServlet wanneer deze toegang nodig heeft, zoals wordt weergegeven in de volgende code:

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

De routes beveiligen

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

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

Alle routes die worden vermeld in de door komma's gescheiden regelsets onder de app.protect.roles regels, zijn ook niet-geverifieerde geverifieerde gebruikers, zoals wordt weergegeven in het volgende voorbeeld. Deze routes bevatten echter ook een door spaties gescheiden lijst met app-rollidmaatschappen: alleen gebruikers met ten minste één van de bijbehorende rollen hebben toegang tot deze routes na verificatie.

# local short names for app roles - for example, sets admin to mean PrivilegedAdmin (useful for long rule sets defined in the next key, app.protect.roles)
app.roles=admin PrivilegedAdmin, user RegularUser

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

Bereiken

Bereiken vertellen Microsoft Entra ID het toegangsniveau dat de toepassing aanvraagt.

Op basis van de aangevraagde bereiken geeft Microsoft Entra ID een toestemmingsdialoog aan de gebruiker bij het aanmelden. Als de gebruiker toestemming verleent voor een of meer bereiken en een token verkrijgt, worden de bereiken waarvoor toestemming is gegeven, gecodeerd in het resulterende access_tokenbereik.

Zie authentication.properties voor de bereiken die door de toepassing zijn aangevraagd. Deze drie bereiken worden standaard aangevraagd door MSAL en opgegeven door Microsoft Entra-id.

Meer informatie