Övning – Logga in användare med MSAL
I den här övningen använder du Microsoft Authentication Library for Java (MSAL4J) för att lägga till autentisering i ett Java-exempelwebbprogram och tillåta användare att logga in med sina Microsoft Entra-konton.
Exempelprogrammet som du ska använda i den här övningen är ett Java servlet-program som gör att användarna kan logga in och visa användarnamn och grundläggande profilinformation. Du kan också anropa Microsoft Graph API för att visa viss användarinformation.
Skapa ett Java-webbprogram
Från gränssnittet eller kommandoraden:
Skapa en mapp för programmet.
mkdir ~/javawebapp
Klona exempelprogrammet från GitHub-lagringsplatsen till den nya mappen.
git clone https://github.com/Azure-Samples/ms-identity-java-servlet-webapp-authentication.git ~/javawebapp
Ändra till mappen där exempelprogrammet för den här övningen finns.
cd ~/javawebapp/ms-identity-java-servlet-webapp-authentication/2-Authorization-I/call-graph
Konfigurera programmet
Om du vill konfigurera koden öppnar du programprojektet i önskad IDE som IntelliJ eller VS Code.
Öppna
./src/main/resources/authentication.properties
-filen.Leta reda på strängen
{enter-your-tenant-id-here}
. Ersätt det befintliga värdet med katalog-ID :t (klientorganisation) (som visas i följande bild), eftersom appen registrerades med alternativet Konton i den här organisationskatalogen.Leta reda på strängen
{enter-your-client-id-here}
och ersätt det befintliga värdet med program-ID (klient)-ID (clientId) för det registrerade programmet som kopierats från Azure-portalen.Leta upp strängen
{enter-your-client-secret-here}
och ersätt det befintliga värdet med den nyckel som du sparade när appen skapades i Azure-portalen.
Kör appen
Kontrollera att Tomcat-servern körs och att du har behörighet att distribuera en webbapp till den. Kontrollera att serverns värdadress är
http://localhost:8080
.Kompilera och paketera projektet med maven:
cd ~/javawebapp/2-Authorization-I/call-graph mvn clean package
Hitta den resulterande
.war
filen i./target/msal4j-servlet-graph.war
. Om du vill distribuera till Tomcat kopierar du den/webapps/
här.war
filen till katalogen i tomcat-installationskatalogen och startar Tomcat-servern.Öppna din webbläsare och gå till
http://localhost:8080/msal4j-servlet-graph/
. Du omdirigeras för att logga in med Microsoft Entra-ID. Vid lyckad inloggning bör du se en sida som liknar följande:Välj knappen ID-tokeninformation för att se några av ID-tokens avkodade anspråk.
Översikt över autentiseringskod
Du hittar det mesta av autentiseringskoden i exempelprogrammet under projektets java/com/microsoft/azuresamples/msal4j/
katalog. Den innehåller flera servletar som tillhandahåller autentiseringsslutpunkterna i programmet för att logga in, logga ut och hantera återanropet från Microsoft Entra-ID. Dessa servletar använder hjälpklasserna i katalogen java/com/microsoft/azuresamples/msal4j/helpers/
för att anropa de autentiseringsmetoder som tillhandahålls av MSAL. Det finns ett servlet-filter definierat i AuthenticationFilter.java
som omdirigerar oautentiserade begäranden till skyddade vägar till en 401-felsida för obehörig HTTP.
Om du vill lägga till autentisering i ditt program måste du inkludera servlet-klasserna under java/com/microsoft/azuresamples/msal4j/authservlets
och java/com/microsoft/azuresamples/msal4j/authwebapp
kataloger, hjälpklasserna i katalogen java/com/microsoft/azuresamples/msal4j/helpers/
och autentiseringsservlet-filtret AuthenticationFilter.java
i dina projekt. Här följer mer information om MSAL-autentiseringskoden.
MSAL4J är tillgängligt på Maven. Du måste lägga till MSAL4J som ett beroende i projektets
pom.xml
fil:<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>msal4j</artifactId> <version>1.9.1</version> </dependency>
Det första steget i inloggningsprocessen är att skicka en begäran till Microsoft Entra-klientorganisationens
/authorize
slutpunkt. MSAL4J-instansenConfidentialClientApplication
används för att skapa en URL för auktoriseringsbegäran. Appen omdirigerar webbläsaren till den här URL:en, där användaren loggar in.final ConfidentialClientApplication client = getConfidentialClientInstance(); AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters .builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES)) .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString(); contextAdapter.redirectUser(authorizeUrl);
- AuthorizationRequestUrlParameters: Parametrar som måste anges för att skapa en AuthorizationRequestUrl.
- REDIRECT_URI: Omdirigerings-URI:n är den URI som identitetsprovidern skickar tillbaka säkerhetstoken till. Microsoft Entra-ID omdirigerar webbläsaren (tillsammans med autentiseringskoden) till den här URI:n när du har samlat in användarautentiseringsuppgifter. Den måste matcha omdirigerings-URI:n i Microsoft Entra-appregistreringen.
- OMFATTNINGAR: Omfång är behörigheter som begärs av programmet. Normalt räcker det med de tre omfången
openid profile offline_access
för att ta emot ett ID-tokensvar för en användarinloggning och anges som standard av MSAL.
Användaren får en inloggningsprompt av Microsoft Entra-ID. Om inloggningsförsöket lyckas omdirigeras användarens webbläsare till appens omdirigeringsslutpunkt med en giltig auktoriseringskod i slutpunkten. ConfidentialClientApplication-instansen utbyter sedan den här auktoriseringskoden mot en ID-token och åtkomsttoken från Microsoft Entra-ID.
// First, validate the state, then parse any error codes in response, then extract the authCode. Then: // build the auth code params: final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build(); // Get a client instance and leverage it to acquire the token: final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance(); final IAuthenticationResult result = client.acquireToken(authParams).get();
- AuthorizationCodeParameters: Parametrar som måste anges för att kunna byta auktoriseringskoden mot ett ID och/eller åtkomsttoken.
- authCode: Auktoriseringskoden som togs emot vid omdirigeringsslutpunkten.
- REDIRECT_URI: Omdirigerings-URI:n som användes i föregående steg måste skickas igen.
- OMFATTNINGAR: Omfången som användes i föregående steg måste skickas igen.
Om
acquireToken
det lyckas extraheras tokenanspråken. Om nonce-kontrollen godkänns placeras resultaten icontext
(en instans avIdentityContextData
) och sparas i sessionen. Programmet kan sedan instansiera detta från sessionen (via en instans avIdentityContextAdapterServlet
) när det behöver åtkomst till den:// 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());