Oefening: gebruikers aanmelden met MSAL
In deze oefening gebruikt u de Microsoft Authentication Library for Java (MSAL4J) om verificatie toe te voegen in een Java-voorbeeldwebtoepassing en gebruikers toe te staan zich aan te melden met hun Microsoft Entra-account.
De voorbeeldtoepassing die u in deze oefening gebruikt, is een Java-servlet-toepassing waarmee gebruikers zich kunnen aanmelden en de gebruikersnaam en basisprofielgegevens kunnen weergeven. Hiermee kunt u ook de Microsoft Graph API aanroepen om bepaalde gebruikersgegevens weer te geven.
Een Java-webtoepassing maken
Vanuit de shell of vanaf de opdrachtregel:
Maak een map voor de toepassing.
mkdir ~/javawebappKloon de voorbeeldtoepassing uit de GitHub-opslagplaats naar de nieuwe map.
git clone https://github.com/Azure-Samples/ms-identity-java-servlet-webapp-authentication.git ~/javawebappGa naar de map waarin de voorbeeldtoepassing voor deze oefening zich bevindt.
cd ~/javawebapp/ms-identity-java-servlet-webapp-authentication/2-Authorization-I/call-graph
De toepassing configureren
Als u de code wilt configureren, opent u het toepassingsproject in uw favoriete IDE, zoals IntelliJ of VS Code.
Open het bestand ./src/main/resources/authentication.properties .
Zoek de tekenreeks
aad.authorityin de{enter-your-tenant-id-here}eigenschap. Vervang de bestaande waarde door de map-id-waarde (tenant), zoals wordt weergegeven in de volgende afbeelding, omdat de app is geregistreerd bij de accounts in deze organisatiedirectory.Zoek in de
aad.clientIdeigenschap de tekenreeks{enter-your-client-id-here}en vervang de bestaande waarde door de toepassings-id -waarde (declientIdwaarde) van de geregistreerde toepassing die is gekopieerd uit de Azure-portal.
Zoek in de
aad.secreteigenschap de tekenreeks{enter-your-client-secret-here}en vervang de bestaande waarde door de sleutelwaarde die u hebt opgeslagen tijdens het maken van de app in Azure Portal.
De toepassing uitvoeren
Zorg ervoor dat uw Tomcat-server wordt uitgevoerd en u beschikt over bevoegdheden voor het implementeren van een web-app. Zorg ervoor dat uw serverhostadres is
http://localhost:8080.Compileer en verpakt het project met behulp van Maven:
cd ~/javawebapp/2-Authorization-I/call-graph mvn clean packageZoek het resulterende WAR-bestand op ./target/msal4j-servlet-graph.war. Als u wilt implementeren naar Tomcat, kopieert u dit WAR-bestand naar de map /webapps/ in uw Tomcat-installatiemap en start u de Tomcat-server.
Open uw browser en ga naar
http://localhost:8080/msal4j-servlet-graph/. U wordt omgeleid om u aan te melden met Microsoft Entra ID. Als u zich hebt aangemeld, ziet u een pagina zoals hieronder:
Selecteer de knop Details id-token om enkele van de gedecodeerde claims van het id-token weer te geven.
Overzicht van verificatiecode
U vindt de meeste verificatiecode in de voorbeeldtoepassing in de map van java/com/microsoft/azuresamples/msal4j/ het project. Het bevat meerdere servlets die de verificatie-eindpunten in de toepassing bieden voor het aanmelden, afmelden en verwerken van de omleidingsaanroep van Microsoft Entra-id. Deze servlets gebruiken de helperklassen in de directory java/com/microsoft/azuresamples/msal4j/helpers/ om de verificatiemethoden van MSAL aan te roepen. Er is een servlet-filter gedefinieerd waarin AuthenticationFilter.java niet-geverifieerde aanvragen worden omgeleid naar beveiligde routes naar een 401 niet-geautoriseerde HTTP-foutpagina.
Als u verificatie wilt toevoegen aan uw toepassing, moet u de servlet-klassen onder java/com/microsoft/azuresamples/msal4j/authservlets en java/com/microsoft/azuresamples/msal4j/authwebapp mappen, de helperklassen in de directory java/com/microsoft/azuresamples/msal4j/helpers/ en het verificatieservlet-filter AuthenticationFilter.java in uw projecten opnemen. Hier vindt u meer informatie over de MSAL-verificatiecode.
MSAL4J is beschikbaar op Maven. U moet MSAL4J toevoegen als een afhankelijkheid in het pom.xml-bestand van het project:
<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>msal4j</artifactId> <version>1.17.2</version> </dependency>De eerste stap van het aanmeldingsproces is het verzenden van een aanvraag naar het eindpunt van
/authorizede Microsoft Entra-tenant. Het MSAL4J-exemplaarConfidentialClientApplicationwordt gebruikt om een AUTORISATIEaanvraag-URL te maken. De app leidt de browser om naar deze URL, waar de gebruiker zich aanmeldt. De volgende code is een fragment uit de implementatie van deredirectToAuthorizationEndpointmethode in deAuthHelperklasse.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);-
AuthorizationRequestUrlParameters: Parameters die moeten worden ingesteld om eenAuthorizationRequestUrl. -
REDIRECT_URI: De omleidings-URI is de URI waar de id-provider de beveiligingstokens weer naar stuurt. Microsoft Entra ID leidt de browser , samen met verificatiecode, om naar deze URI na het verzamelen van gebruikersreferenties. Deze moet overeenkomen met de omleidings-URI in de registratie van de Microsoft Entra-app. -
SCOPES: Bereiken zijn machtigingen die door de toepassing worden aangevraagd. Normaal gesproken zijn de drie bereikenopenid profile offline_accessvoldoende voor het ontvangen van een id-tokenantwoord voor een gebruiker die zich aanmeldt en standaard worden ingesteld door MSAL.
-
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 onze app met een geldige autorisatiecode in het eindpunt. Het
ConfidentialClientApplicationexemplaar wisselt deze autorisatiecode vervolgens uit voor een id-token en toegangstoken van Microsoft Entra-id. De volgende code is een fragment uit de implementatie van deprocessAADCallbackmethode in deAuthHelperklasse.// 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();-
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.
-
Als
acquireTokendit lukt, worden de tokenclaims geëxtraheerd. Als de nonce-controle is geslaagd, worden de resultaten geplaatst incontext- een exemplaar vanIdentityContextData- en opgeslagen in de sessie. De toepassing kan dit vervolgens instantiëren vanuit de sessie, door middel van een exemplaar vanIdentityContextAdapterServlet: wanneer deze toegang nodig heeft:// 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());