Gyakorlat – Felhasználók bejelentkezése MSAL használatával

Befejeződött

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:

  1. Hozzon létre egy mappát az alkalmazáshoz.

    mkdir ~/javawebapp
    
  2. Kló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 ~/javawebapp
    
  3. Vá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.

  1. Nyissa meg a ./src/main/resources/authentication.properties fájlt.

  2. A tulajdonságban aad.authority keresse 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.

  3. A tulajdonságban aad.clientId keresse 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 – az clientId értékre.

    Képernyőkép a Microsoft Entra-azonosítóval regisztrált alkalmazás alkalmazásazonosítójáról az Azure Portalon.

  4. A tulajdonságban aad.secret keresse 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

  1. 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:8080

  2. A projekt fordítása és becsomagolása a Maven használatával:

    cd ~/javawebapp/2-Authorization-I/call-graph
    mvn clean package
    
  3. Keresse 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.

  4. 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:

    A mintaalkalmazásba való sikeres bejelentkezés után a lapon megjelenő felhasználónév képernyőképe.

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

  1. 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>
    
  2. 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ány ConfidentialClientApplication egy 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 az redirectToAuthorizationEndpoint osztályban való AuthHelper megvaló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 egy AuthorizationRequestUrl.
    • 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ör openid profile offline_access elegendő 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.
  3. 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 ConfidentialClientApplication pé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 az processAADCallback osztályban való AuthHelper megvaló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.
  4. Ha acquireToken a jogkivonat sikeres, a rendszer kinyeri a jogkivonat-jogcímeket. Ha a nem megfelelő ellenőrzés sikeres, az eredmények bekerülnek a munkamenetbe context – egy példányba IdentityContextData – és mentve lesznek. Az alkalmazás ezután példányosíthatja ezt a munkamenetből – egy példány IdentityContextAdapterServlet ú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());