Gyakorlat – Felhasználók bejelentkezése MSAL használatával
Ebben a gyakorlatban a Microsoft Authentication Library for Java (MSAL4J) használatával ad hozzá hitelesítést egy Java-minta webalkalmazáshoz, és lehetővé teszi a felhasználók számára, hogy bejelentkezhessenek a Microsoft Entra-fiókjukkal.
A gyakorlatban használt mintaalkalmazás egy Java servlet-alkalmazás, amely lehetővé teszi a felhasználók számára a bejelentkezést, és megjeleníti a felhasználónevet és az alapvető profiladatokat. Emellett meghívhatja a Microsoft Graph API-t, hogy megjelenítsen néhány felhasználói információt.
Java-webalkalmazás létrehozása
A rendszerhéjból vagy a parancssorból:
Hozzon létre egy mappát az alkalmazáshoz.
mkdir ~/javawebappKlónozza a mintaalkalmazást a GitHub-adattárból az új mappába.
git clone https://github.com/Azure-Samples/ms-identity-java-servlet-webapp-authentication.git ~/javawebappVáltson arra a mappára, ahol a gyakorlat mintaalkalmazása található.
cd ~/javawebapp/ms-identity-java-servlet-webapp-authentication/2-Authorization-I/call-graph
Az alkalmazás konfigurálása
A kód konfigurálásához nyissa meg az alkalmazásprojektet az előnyben részesített IDE-ben, például az IntelliJ-ben vagy a VS Code-ban.
Nyissa meg a ./src/main/resources/authentication.properties fájlt.
A tulajdonságban
aad.authoritykeresse meg a sztringet{enter-your-tenant-id-here}. Cserélje le a meglévő értéket a címtár (bérlő) azonosítójának értékére – az alábbi képen látható módon –, mert az alkalmazás csak ebben a szervezeti címtárban lévő fiókokhoz lett regisztrálva.A tulajdonságban
aad.clientIdkeresse meg a sztringet{enter-your-client-id-here}, és cserélje le a meglévő értéket az Azure Portalról másolt regisztrált alkalmazás (ügyfél) azonosítójának értékére – azclientIdértékre.
A tulajdonságban
aad.secretkeresse meg a sztringet{enter-your-client-secret-here}, és cserélje le a meglévő értéket az alkalmazás létrehozása során az Azure Portalon mentett kulcsértékre .
Az alkalmazás futtatása
Győződjön meg arról, hogy a Tomcat-kiszolgáló fut, és rendelkezik jogosultságokkal egy webalkalmazás üzembe helyezéséhez. Győződjön meg arról, hogy a kiszolgáló gazdagépének címe .
http://localhost:8080A projekt fordítása és becsomagolása a Maven használatával:
cd ~/javawebapp/2-Authorization-I/call-graph mvn clean packageKeresse meg az eredményül kapott .war fájlt a ./target/msal4j-servlet-graph.war címen. A Tomcatben való üzembe helyezéshez másolja ezt a .war fájlt a Tomcat telepítési könyvtárában lévő /webapps/ könyvtárba, és indítsa el a Tomcat-kiszolgálót.
Nyissa meg a böngészőt, és keresse meg a következőt
http://localhost:8080/msal4j-servlet-graph/: . A rendszer átirányítja a Microsoft Entra-azonosítóval való bejelentkezéshez. A sikeres bejelentkezéskor az alábbihoz hasonló lapnak kell megjelennie:
Az azonosító jogkivonat részletei gombra kattintva megtekintheti az azonosító jogkivonat dekódolt jogcímeit.
A hitelesítési kód áttekintése
A hitelesítési kód nagy része a mintaalkalmazásban található a projekt könyvtárában java/com/microsoft/azuresamples/msal4j/ . Több olyan servletet tartalmaz, amelyek biztosítják az alkalmazás hitelesítési végpontjait a bejelentkezéshez, a kijelentkezéshez és az átirányítási visszahívás kezeléséhez a Microsoft Entra ID-ból. Ezek a servletek a java/com/microsoft/azuresamples/msal4j/helpers/ könyvtár segédosztályait használják az MSAL által biztosított hitelesítési módszerek meghívásához. Van egy olyan servlet-szűrő, AuthenticationFilter.java amely a nem hitelesített kéréseket átirányítja a védett útvonalakra egy 401 jogosulatlan HTTP-hibaoldalra.
Ha hitelesítést szeretne hozzáadni az alkalmazáshoz, be kell vonnia a servlet-osztályokat java/com/microsoft/azuresamples/msal4j/authservlets és java/com/microsoft/azuresamples/msal4j/authwebapp a könyvtárakat, a segédosztályokat a java/com/microsoft/azuresamples/msal4j/helpers/ könyvtárba, valamint a hitelesítési servlet szűrőt AuthenticationFilter.java a projektekbe. Az alábbiakban további részleteket talál az MSAL hitelesítési kódról.
Az MSAL4J elérhető a Mavenben. Az MSAL4J-t függőségként kell hozzáadnia a projekt pom.xml fájljában:
<dependency> <groupId>com.microsoft.azure</groupId> <artifactId>msal4j</artifactId> <version>1.17.2</version> </dependency>A bejelentkezési folyamat első lépése egy kérés küldése a Microsoft Entra-bérlő végpontjára
/authorize. Az MSAL4J-példányConfidentialClientApplicationegy engedélyezési kérelem URL-címének létrehozásához használható. Az alkalmazás átirányítja a böngészőt erre az URL-címre, ahol a felhasználó bejelentkezik. Az alábbi kód egy részlet a metódusnak azredirectToAuthorizationEndpointosztályban valóAuthHelpermegvalósításából.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: Paraméterek, amelyeket be kell állítani egyAuthorizationRequestUrl. -
REDIRECT_URI: Az átirányítási URI az az URI, amelybe az identitásszolgáltató visszaküldi a biztonsági jogkivonatokat. A Microsoft Entra ID átirányítja a böngészőt - a hitelesítési kóddal együtt - erre az URI-ra a felhasználói hitelesítő adatok gyűjtése után. Meg kell egyeznie a Microsoft Entra alkalmazásregisztráció átirányítási URI-jának. -
SCOPES: A hatókörök az alkalmazás által kért engedélyek. Általában a három hatóköropenid profile offline_accesselegendő egy azonosító jogkivonat-válasz fogadására a felhasználói bejelentkezéshez, és alapértelmezés szerint az MSAL állítja be.
-
A microsoft Entra ID egy bejelentkezési kérést jelenít meg a felhasználó számára. Ha a bejelentkezési kísérlet sikeres, a rendszer átirányítja a felhasználó böngészőjét az alkalmazás átirányítási végpontjára egy érvényes engedélyezési kóddal a végponton. A
ConfidentialClientApplicationpéldány ezután kicseréli ezt az engedélyezési kódot egy azonosító jogkivonatra és hozzáférési jogkivonatra a Microsoft Entra ID-ból. Az alábbi kód egy részlet a metódusnak azprocessAADCallbackosztályban valóAuthHelpermegvalósításából.// 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: Olyan paraméterek, amelyeket be kell állítani az engedélyezési kód azonosítóra és/vagy hozzáférési jogkivonatra való cseréjéhez. -
authCode: Az átirányítási végponton kapott engedélyezési kód. -
REDIRECT_URI: Az előző lépésben használt átirányítási URI-t ismét át kell adni. -
SCOPES: Az előző lépésben használt hatóköröket ismét át kell adni.
-
Ha
acquireTokena jogkivonat sikeres, a rendszer kinyeri a jogkivonat-jogcímeket. Ha a nem megfelelő ellenőrzés sikeres, az eredmények bekerülnek a munkamenetbecontext– egy példánybaIdentityContextData– és mentve lesznek. Az alkalmazás ezután példányosíthatja ezt a munkamenetből – egy példányIdentityContextAdapterServletútján –, amikor hozzá kell férnie:// 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());