Gyakorlat – A Next.js webalkalmazás integrálása az Azure AD-vel

Befejeződött

Ez a gyakorlat végigvezeti egy egyszerű Next.js-alapú alkalmazás konfigurálásának folyamatán, amely integrálható a Microsoft Entra-azonosítóval.

Ebben a gyakorlatban a következőket fogja végrehajtani:

  • Microsoft Entra-alkalmazás regisztrálása.
  • Implementáljon egy egyszerű Microsoft Entra integrált Next.js-alapú alkalmazást.
  • Ellenőrizze a Next.js-alapú alkalmazás Microsoft Entra-integrációját.

Előfeltételek

A gyakorlat elvégzéséhez a következőkre lesz szüksége:

  • Azure-előfizetés.
  • Egy Microsoft-fiók vagy Egy Microsoft Entra-fiók, amely globális Rendszergazda istrator szerepkörrel rendelkezik az Azure-előfizetéshez társított Microsoft Entra-bérlőben, valamint az Azure-előfizetés tulajdonosi vagy közreműködői szerepkörével.
  • A modul első és második gyakorlatának elvégzése.
  • Olyan számítógép, amelyre telepítette vagy telepítheti a Node.js-t és a Gitet.

Megjegyzés:

A Node.js telepítésével kapcsolatos információkért tekintse meg a Node.js letöltéseit. A Gitről további információt a Git-letöltésekben talál. A gyakorlat megkezdése előtt telepítse mindkettőt.

Alkalmazás regisztrálása a Microsoft Entra-azonosítóval

Ha egy Microsoft Entra-hitelesítést használó Next.js-alapú mintaalkalmazást szeretne implementálni egy Azure Database for PostgreSQL-adatbázis eléréséhez, először létre kell hoznia egy Microsoft Entra-alkalmazásobjektumot és a megfelelő biztonsági tagot. Ez lehetővé teszi, hogy a Next.js-alapú alkalmazás megszemélyesítse a Microsoft Entra-felhasználókat adatbázis-objektumok elérésekor.

  1. Szükség esetén indítsa el a webböngészőt, lépjen az Azure Portalra, és jelentkezzen be a modulban használni kívánt Azure-előfizetés eléréséhez.

  2. Az erőforrások, szolgáltatások és dokumentumok keresése szövegmezővel keresse meg a Microsoft Entra-azonosítót, és a találatok listájában válassza a Microsoft Entra-azonosítót.

  3. A Microsoft Entra ID panel függőleges menüjének Kezelés szakaszában válassza a Alkalmazásregisztrációk.

  4. A Alkalmazásregisztrációk panelen válassza az + Új regisztráció lehetőséget.

  5. Az Alkalmazás regisztrálása panel Név szövegmezőjében adja meg a can-nextjs-app kifejezést.

  6. A Támogatott fióktípusok szakaszban győződjön meg arról, hogy a csak ebben a szervezeti címtárban lévő fiókok (csak alapértelmezett címtár – egyetlen bérlő) lehetőség van kiválasztva. Az Átirányítási URI (nem kötelező) szakaszban állítsa be az egyoldalas alkalmazás (SPA) bejegyzést a következőrehttp://localhost:3000, majd válassza a Regisztráció lehetőséget.

    Screenshot of the Register an application blade in the Azure portal.

    Megjegyzés:

    Jelenleg lehetősége van több-bérlős támogatás konfigurálására a Microsoft Entra regisztrált alkalmazásaihoz. Ennek a megközelítésnek a részletes lefedettsége azonban nem tartozik a modul hatókörébe.

    Megjegyzés:

    Az alkalmazás üzembe helyezése után módosítania kell az átirányítási URI (nem kötelező) értékét, hogy tükrözze annak tényleges URL-címét.

  7. A can-nextjs-app panelen tekintse át az eredményként kapott beállításokat, és rögzítse az alkalmazás (ügyfél) azonosítójának és a címtár (bérlő) azonosítójának tulajdonságait.

    Screenshot of the cna-nextjs-app blade in the Azure portal.

  8. A can-nextjs-app panel függőleges menüjének Kezelés szakaszában válassza ki az API-engedélyeket.

    Screenshot of the cna-nextjs-app API permissions blade in the Azure portal.

  9. A can-nextjs-appban | API-engedélyek panelen válassza a + Engedély hozzáadása lehetőséget, a Kérelem API engedély paneljén válassza ki a szervezetem által használt API-kat, a keresőmezőbe írja be az Azure OSSRDBMS-adatbázist, majd a találatok listájában válassza az Azure OSSRDBMS-adatbázist.

    Screenshot of the Request API permissions blade in the Azure portal.

  10. A Kérelem API engedélypaneljén válassza a Delegált engedélyek lehetőséget, jelölje be a user_impersonation jelölőnégyzetet, majd válassza az Engedélyek hozzáadása lehetőséget.

    Screenshot of the Request API permissions blade in the Azure portal, with the Delegated permissions option selected.

  11. Vissza a can-nextjs-apphoz | AZ API-engedélyek panelen válassza az Alapértelmezett címtár rendszergazdai hozzájárulásának megadása lehetőséget, és ha megerősítést kér, válassza az Igen lehetőséget.

    Screenshot of the cna-nextjs-app API permissions blade in the Azure portal, with the prompt to confirm granting of the admin consent.

  12. A can-nextjs-appban | API-engedélyek panelen ellenőrizze, hogy az engedélyek meg lettek-e adva.

    Screenshot of the cna-nextjs-app API permissions blade in the Azure portal, with the consent and permissions granted.

Egyszerű Microsoft Entra integrált Next.js-alapú alkalmazás implementálása

Ha az alkalmazás regisztrálva van a Microsoft Entra-bérlőben, folytathatja annak implementálását. A feladat egyszerűsítése érdekében klónozni fog egy Next.js-kódot tartalmazó GitHub-adattárat, és testre szabja azt a Microsoft Entra-bérlővel való integrációhoz.

  1. Indítsa el a Node.js parancssort a helyi számítógépen.

    Megjegyzés:

    Győződjön meg arról, hogy ezt a Node.js helyi telepítésével futtatja a számítógépen.

  2. A Node.js parancssorban futtassa a következő parancsot a gyakorlatban használt Next.js mintaalkalmazás-kódot tartalmazó GitHub-adattár klónozásához:

    git clone https://github.com/MicrosoftDocs/mslearn-cloud-native-apps.git
    
  3. Futtassa a következő parancsot a GitHub-adattár klónját futtató könyvtárra való váltáshoz:

    cd ./mslearn-cloud-native-apps/m06u07
    
  4. Az előnyben részesített szövegszerkesztővel tekintse át a ./src/App.jsx fájl tartalmát, amely egy hozzáférési jogkivonatot kér le a Microsoft Entra-azonosítóból egy egyoldalas alkalmazáshoz:

    A ./src/App.jsx fájl tartalma a következő:

    import React, { useState } from "react";
    import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from "@azure/msal-react";
    import { loginRequest } from "./authConfig";
    import { PageLayout } from "./components/PageLayout";
    import { ProfileData } from "./components/ProfileData";
    import { callMsGraph } from "./graph";
    import Button from "react-bootstrap/Button";
    import "./styles/App.css";
    
    var accessToken = '';
    
    /**
     * Renders information about the signed-in user or a button to retrieve data about the user
     */
    const ProfileContent = () => {
        const { instance, accounts } = useMsal();
        const [graphData, setGraphData] = useState(null);
    
        function RequestProfileData() {
            // Silently acquires an access token which is then attached to a request for MS Graph data
            instance.acquireTokenSilent({
                ...loginRequest,
                account: accounts[0]
            }).then((response) => {
                accessToken = response.accessToken;
                callMsGraph(response.accessToken).then(response => setGraphData(response));
            });
        }
    
        return (
            <>
                <h5 className="card-title">Welcome {accounts[0].name}</h5>
                {graphData ? 
                    <ProfileData graphData={graphData} />
                    :
                    <Button variant="secondary" onClick={RequestProfileData}>Request Profile Information</Button>
                }
                <p>{accessToken}</p>
            </>
        );
    };
    
    /**
     * If a user is authenticated the ProfileContent component above is rendered. Otherwise, a message indicating a user is not authenticated is rendered.
     */
    const MainContent = () => {    
        return (
            <div className="App">
                <AuthenticatedTemplate>
                    <ProfileContent />
                </AuthenticatedTemplate>
    
                <UnauthenticatedTemplate>
                    <h5 className="card-title">Please sign-in to review your profile information.</h5>
                    </UnauthenticatedTemplate>
            </div>
        );
    };
    
    export default function App() {
        return (
            <PageLayout>
                <MainContent />
            </PageLayout>
        );
    }
    
  5. Az előnyben részesített szövegszerkesztővel tekintse át a ./src/authConfig.js fájl tartalmát, amely a gyakorlat előző feladatában regisztrált Cél Microsoft Entra-alkalmazás azonosításához szükséges információkat tárolja.

    A ./src/authConfig.js fájl tartalma a következő:

    /*
     * Copyright (c) Microsoft Corporation. All rights reserved.
     * Licensed under the MIT License.
     */
    
    import { LogLevel } from "@azure/msal-browser";
    
    /**
     * Configuration object to be passed to MSAL instance on creation. 
     * For a full list of MSAL.js configuration parameters, visit:
     * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md 
     */
    export const msalConfig = {
        auth: {
            clientId: "<client_ID>",
            authority: "https://login.microsoftonline.com/<tenant_ID>",
            redirectUri: "http://localhost:3000"
        },
        cache: {
            cacheLocation: "sessionStorage", // This configures where your cache will be stored
            storeAuthStateInCookie: false, // Set this to "true" if you are having issues on IE11 or Edge
        },
        system: {	
            loggerOptions: {	
                loggerCallback: (level, message, containsPii) => {	
                    if (containsPii) {		
                        return;		
                    }	
                    switch (level) {		
                        case LogLevel.Error:		
                            console.error(message);		
                            return;		
                        case LogLevel.Info:		
                            console.info(message);		
                            return;		
                        case LogLevel.Verbose:		
                            console.debug(message);		
                            return;		
                        case LogLevel.Warning:		
                            console.warn(message);		
                            return;		
                    }	
                }	
            }	
        }
    };
    
    /**
     * Scopes you add here will be prompted for user consent during sign-in.
     * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request.
     * For more information about OIDC scopes, visit: 
     * https://learn.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes
     */
    export const loginRequest = {
        scopes: ["User.Read"]
    };
    
    /**
     * Add here the scopes to request when obtaining an access token for MS Graph API. For more information, review:
     * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/resources-and-scopes.md
     */
    export const graphConfig = {
        graphMeEndpoint: "https://graph.microsoft.com/v1.0/me"
    };
    
  6. A ./src/authConfig.js fájl tartalmát megjelenítő szövegszerkesztőben cserélje le a helyőrzőket a <tenant_ID><client_ID> megfelelő értékekre, amelyeket a gyakorlat előző feladatában azonosított.

  7. A ./src/authConfig.js fájl tartalmát megjelenítő szövegszerkesztőben cserélje le a bejegyzést scopes: ["User.Read"] a következőrescopes: ["User.Read","https://ossrdbms-aad.database.windows.net/user_impersonation"]: .

  8. Mentse a módosításokat, és zárja be a fájlt.

A Next.js-alapú alkalmazás Microsoft Entra-integrációjának ellenőrzése

Készen áll az alkalmazás Microsoft Entra-integrációjának ellenőrzésére. Tárolóba is telepítheti, de az egyszerűség kedvéért először helyileg fogja futtatni a számítógépen, a Node.js fejlesztői környezetben. Ezzel gyorsan ellenőrizheti a funkcióját, és meggyőződhet arról, hogy a tárolók használata életképes megoldás.

  1. A Node.js parancssorban futtassa a következő parancsot a Next.js mintaalkalmazás függőségi csomagjainak telepítéséhez:

    npm install
    

    Megjegyzés:

    Várja meg, amíg a telepítési folyamat befejeződik.

  2. A Node.js parancssorból futtassa a következő parancsot a Next.js alkalmazás létrehozásához:

    npm run-script build
    

    Megjegyzés:

    Várja meg, amíg a buildelési folyamat befejeződik.

  3. A Node.js parancssorából futtassa a következő parancsot a Next.js alkalmazás elindításához:

    npm run-script start
    

    Megjegyzés:

    Ezzel automatikusan megnyílik egy böngészőablak, amelyen megjelenik a JavaScripthez készült Microsoft Authentication Library – React rövid útmutató oldal.

  4. Zárja be a böngészőablakot, és nyissa meg a JavaScripthez készült Microsoft Authentication Library – React rövid útmutatót , inkognitó/InPrivate módban nyisson meg egy másik böngészőablakot, és navigáljon az http://localhost:3000 URL-címre.

  5. A JavaScripthez készült Microsoft Authentication Library – React rövid útmutató lapján válassza a Bejelentkezés lehetőséget, majd a kibővítő menüben válassza a Bejelentkezés az előugró ablak használatával lehetőséget.

    Screenshot of the Welcome to the Microsoft Authentication Library For JavaScript - React Quickstart page with the Sign in using Popup menu option.

  6. Amikor a rendszer kéri a bejelentkezést, hitelesítse magát az adatumuser1userPrincipalName és a pa55w.rd1234 jelszavával.

    Megjegyzés:

    Ezt a felhasználói fiókot a modul első gyakorlatban hozta létre.

  7. A JavaScripthez készült Microsoft Authentication Library – React rövid útmutató lapján válassza a Profiladatok kérése lehetőséget.

    Screenshot of the Welcome to the Microsoft Authentication Library For JavaScript - React Quickstart page with the Request Profile Information button.

    Megjegyzés:

    Ellenőrizze, hogy a kimenet tartalmazza-e az adatumuser1 Microsoft Entra felhasználói fiók e-mail-címét, azonosítóját és hozzáférési jogkivonatát.

    Screenshot of the Welcome to the Microsoft Authentication Library For JavaScript - React Quickstart page with the adatumuser1 profile information.

  8. Nyisson meg egy másik böngészőlapot ugyanabban a böngészőablakban, és keresse meg az előző gyakorlatban üzembe helyezett webalkalmazást.

    Megjegyzés:

    Az URL-cím formátumának a következőnek kell lennie: https://<webapp_name>.azurewebsites.net/auth

    Megjegyzés:

    Ellenőrizze, hogy az eredményként kapott weblap megjeleníti-e az első bérlő leltáradatait.

    Megjegyzés:

    Ha a kezdeti kísérlet sikertelen, próbálkozzon újra.

    Screenshot of the page of the Express.js web app displaying the inventory data.

  9. Zárja be a böngészőablakot inkognitó/InPrivate módban.

    Megjegyzés:

    Most ugyanazt a lépéssorozatot fogja megismételni, mint a contosouser1 , és ellenőrizze, hogy a második bérlőnek megfelelő rekordkészletet is elérheti-e a leltáradatokhoz, és megjelenítheti-e a rekordkészletet.

  10. Inkognitó/InPrivate módban nyisson meg egy másik böngészőablakot, és keresse meg az http://localhost:3000 URL-címet.

  11. A JavaScripthez készült Microsoft Authentication Library – React rövid útmutató lapján válassza a Bejelentkezés lehetőséget, majd a kibővítő menüben válassza a Bejelentkezés az előugró ablak használatával lehetőséget.

  12. Amikor a rendszer arra kéri, hogy jelentkezzen be, hitelesítse magát a contosouser1userPrincipalName és annak Pa55w.rd1234 jelszavával.

    Megjegyzés:

    Ezt a felhasználói fiókot a modul első gyakorlatban hozta létre.

    Megjegyzés:

    Ha a rendszer kéri, fogadja el a hozzáférési kérést, és módosítsa a contosouser1 fiók jelszavát.

  13. A JavaScripthez készült Microsoft Authentication Library – React rövid útmutató lapján válassza a Profiladatok kérése lehetőséget.

    Megjegyzés:

    Ellenőrizze, hogy a kimenet tartalmazza-e a Contosouser1 Microsoft Entra felhasználói fiók e-mail-címét, azonosítóját és hozzáférési jogkivonatát.

  14. Nyisson meg egy másik böngészőlapot ugyanabban a böngészőablakban, és keresse meg az előző gyakorlatban üzembe helyezett webalkalmazást.

    Megjegyzés:

    Ellenőrizze, hogy az eredményként kapott weblap megjeleníti-e a második bérlő leltáradatait.

EREDMÉNY

Gratulálunk! Elvégezte a modul harmadik gyakorlatát. Ebben a gyakorlatban implementált egy egyszerű AD-integrált Next.js-alapú alkalmazást, és ellenőrizte annak működését.

Az erőforrások eltávolítása

Az Azure-erőforrások használatának szükségtelen költségeinek elkerülése érdekében törölje a modul előző gyakorlatában létrehozott postgresql-db-RG és can-aadexpress-RG erőforráscsoportokat. Ehhez az Azure Portalon navigáljon az egyes erőforráscsoportok paneljére, és válassza az eszköztárOn az Erőforráscsoport törlése bejegyzést. Az ERŐFORRÁSCSOPORT NEVE szövegmezőbe írja be az erőforráscsoport nevét, majd válassza a Törlés lehetőséget.