Java Tomcat-alkalmazások védelme csoportok és csoportjogcímek használatával

Ez a cikk bemutatja, hogyan hozhat létre olyan Java Tomcat-alkalmazást, amely a felhasználókat a Microsoft Authentication Library (MSAL) for Java használatával jelentkezteti be. Az alkalmazás a Microsoft Entra ID biztonsági csoporttagságon alapuló lapokhoz való hozzáférést is korlátozza.

Az alábbi ábrán az alkalmazás topológiája látható:

Az alkalmazás topológiáját bemutató diagram.

Az ügyfélalkalmazás a felhasználók Microsoft Entra ID-bérlőbe való bejelentkeztetéséhez és a Microsoft Entra ID-tól származó azonosító jogkivonat lekéréséhez a Java-hoz készült MSAL-t (MSAL4J) használja. Az ID-jogkivonat igazolja, hogy a felhasználó hitelesítve van ebben a bérlőben. Az alkalmazás a felhasználó hitelesítési állapota és a csoporttagság alapján védi az útvonalakat.

Az ezt a forgatókönyvet bemutató videóért lásd a következőt: Az alkalmazások engedélyezésének megvalósítása alkalmazásszerepkörök, biztonsági csoportok, hatókörök és címtárszerepkörök használatával.

Előfeltételek

  • JDK 8-as vagy újabb verzió
  • Maven 3
  • Egy Microsoft Entra ID-bérlő. További információért lásd: Microsoft Entra ID-bérlő beszerzése.
  • Egy felhasználói fiók a saját Microsoft Entra ID-bérlőben.
  • Két biztonsági csoport, és , amelyek a tesztelni kívánt felhasználókat tartalmazzák.
  • Tomcat 9
  • Visual Studio Code
  • Azure-eszközök a Visual Studio Code-hoz

Ajánlások

  • Némi ismeret a Java / Jakarta szervletek terén.
  • A Linux/OSX terminál ismerete.
  • jwt.ms a tokenjei vizsgálatához.
  • A Fiddler a hálózati tevékenység figyelésére és hibaelhárításra.
  • Kövesse a Microsoft Entra Blogot, hogy naprakész maradjon a legújabb fejleményekről.

A minta beállítása

Az alábbi szakaszok bemutatják, hogyan állíthatja be a mintaalkalmazást.

A mintaadattár klónozása vagy letöltése

A minta klónozásához nyisson meg egy Bash-ablakot, és használja a következő parancsot:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/3-Authorization-II/groups

Alternatív megoldásként keresse meg a ms-identity-msal-java-samples tárházat, majd töltse le .zip fájlként, és csomagolja ki a merevlemezére.

Fontos

A Windows fájlelérési útvonalának korlátozásainak elkerülése érdekében klónozza vagy bontsa ki az adattárat a merevlemez gyökerének közelében található könyvtárba.

A mintaalkalmazás regisztrálása a Microsoft Entra ID-bérlőben

Ebben a mintában egy projekt szerepel. Az alábbi szakaszok bemutatják, hogyan regisztrálhatja az alkalmazást az Azure Portalon.

Válassza ki azt a Microsoft Entra ID-bérlőt, ahol létre szeretné hozni az alkalmazásokat

A bérlő kiválasztásához kövesse az alábbi lépéseket:

  1. Jelentkezzen be az Azure Portalra.

  2. Ha a fiókja több Microsoft Entra ID-bérlőben is megtalálható, válassza ki a profilját az Azure Portal sarkában, majd válassza a Címtár váltása lehetőséget a munkamenet kívánt Microsoft Entra ID-bérlőre való módosításához.

Az alkalmazás regisztrálása (java-servlet-webapp-groups)

Először regisztráljon egy új alkalmazást az Azure Portalon a Rövid útmutató: Alkalmazás regisztrálása a Microsoft identitásplatformon című cikkben található utasításokat követve.

Ezután a következő lépésekkel fejezze be a regisztrációt:

  1. Lépjen a Microsoft fejlesztői identitásplatform Alkalmazásregisztrációk oldalára.

  2. Válassza az Új regisztráció lehetőséget.

  3. A megjelenő Alkalmazás regisztrálása lapon adja meg az alábbi alkalmazásregisztrációs adatokat:

    • A Name szakaszban adjon meg egy beszédes alkalmazásnevet, amely az alkalmazás felhasználói számára jelenik meg – például: .
    • A Támogatott fióktípusok alatt válassza a Csak ebben a szervezeti címtárban lévő fiókok lehetőséget.
    • A Átirányítási URI szakaszban válassza a Web lehetőséget a kombinált listában, majd adja meg a következő átirányítási URI-t: .
  4. Válassza a Regisztráció elemet az alkalmazás létrehozásához.

  5. Az alkalmazás regisztrációs oldalán keresse meg és másolja ki az alkalmazás (ügyfél) azonosítójának értékét, amelyet később használni szeretne. Ezt az értéket az alkalmazás konfigurációs fájljában vagy fájljaiban használja.

  6. Válassza a Mentés lehetőséget a módosítások mentéséhez.

  7. Az alkalmazás regisztrációs oldalán válassza a Tanúsítványok > titkos kulcsok lehetőséget a navigációs panelen a titkos kulcsok létrehozására és tanúsítványok feltöltésére szolgáló lap megnyitásához.

  8. A Ügyfél titkos kulcsai szakaszban válassza az Új ügyfél-titkos kulcs lehetőséget.

  9. Írja be a leírást – például az alkalmazás titkos kódját.

  10. Válasszon lejáratot a titkos kódhoz, vagy adjon meg egy egyéni élettartamot. Az ügyfél titkos kulcsainak maximális élettartama 24 hónap, és Microsoft 12 hónapnál rövidebb lejáratot javasol. Éles alkalmazások esetén előnyben részesítse a tanúsítványt vagy az összevont identitás hitelesítő adatait az ügyfél titkos kulcsával szemben.

  11. Válassza a Hozzáadás lehetőséget. Megjelenik a létrehozott érték.

  12. Másolja és mentse a létrehozott értéket a későbbi lépésekben való használatra. Szüksége van erre az értékre a kód konfigurációs fájljaihoz. Ez az érték nem jelenik meg újra, és más módon nem kérhető le. Ezért mindenképpen mentse az Azure Portalról, mielőtt bármilyen más képernyőre vagy panelre navigálna.

  13. Az alkalmazás regisztrációs oldalán válassza ki az API-engedélyeket a navigációs panelen a lap megnyitásához, hogy hozzáférést adjon az alkalmazás által igényelt API-khoz.

  14. Válassza az Engedély hozzáadása lehetőséget.

  15. Győződjön meg arról, hogy a Microsoft API-k lap ki van jelölve.

  16. A Gyakran használt Microsoft API-k szakaszban válassza a Microsoft Graph lehetőséget.

  17. A Delegált engedélyek szakaszban válassza ki a listából a User.Read és a GroupMember.Read.All lehetőséget. Szükség esetén használja a keresőmezőt.

  18. Jelölje be az Engedélyek hozzáadása lehetőséget.

  19. rendszergazdai jóváhagyást igényel, ezért válassza ki a Rendszergazdai jóváhagyás megadása/visszavonása ehhez: {tenant} lehetőséget, majd válassza az Igen lehetőséget, amikor a rendszer megkérdezi, hogy meg szeretné-e adni a kért engedélyekhez a jóváhagyást a bérlő összes fiókja számára. A művelet végrehajtásához Microsoft Entra-azonosítójú bérlői rendszergazdának kell lennie.


Konfigurálja az alkalmazást (java-servlet-webapp-groups) úgy, hogy a saját alkalmazásregisztrációját használja

Az alkalmazás konfigurálásához kövesse az alábbi lépéseket:

Megjegyzés

A következő lépésekben a ugyanaz, mint a vagy a .

  1. Nyissa meg a projektet az IDE-ben.

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

  3. Keresse meg a(z) karakterláncot. Cserélje le a meglévő értéket a Microsoft Entra-bérlőazonosítójára, ha az alkalmazást a Csak ebben a szervezeti címtárban lévő fiókok beállítással regisztrálta.

  4. Keresse meg a(z) karakterláncot, és cserélje le a meglévő értéket a(z) Azure Portalból kimásolt alkalmazás alkalmazásazonosítójára vagy értékére.

  5. Keresse meg a(z) karakterláncot, és cserélje le a meglévő értéket az Azure Portalon a alkalmazás létrehozásakor mentett értékre.

Biztonsági csoportok konfigurálása

Az alábbi lehetőségek állnak rendelkezésre arra, hogyan konfigurálhatja tovább az alkalmazásokat a csoportok igénylésének fogadásához:

  • Lekéri az összes csoportot, amelyhez a bejelentkezett felhasználó hozzá van rendelve egy Microsoft Entra ID-bérlőben, a beágyazott csoportokat is beleértve. További információkért lásd a Az alkalmazás konfigurálása úgy, hogy megkapja az összes csoportot, amelyhez a bejelentkezett felhasználó hozzá van rendelve, beleértve a beágyazott csoportokat is című szakaszt.

  • Fogadja a csoportok jogcímértékeit a csoportok egy szűrt halmazából, amelyek használatára az alkalmazás fel van készítve. További információért lásd a következő szakaszt: Az alkalmazás konfigurálása a csoportjogcím-értékek fogadására azon csoportok szűrt halmazából, amelyekhez egy felhasználó hozzá lehet rendelve. Ez a lehetőség nem érhető el a Microsoft Entra ID ingyenes kiadásban.

Megjegyzés

A csoportazonosító helyett a helyszíni csoport vagy értékének lekéréséhez lásd az A csoportjogcímek konfigurálása alkalmazásokhoz a Microsoft Entra ID használatával című cikk Az Active Directoryból szinkronizált csoportattribútumok használatának előfeltételei című szakaszát.

Konfigurálja az alkalmazást úgy, hogy megkapja a bejelentkezett felhasználóhoz rendelt összes csoportot, beleértve a beágyazott csoportokat is

Az alkalmazás konfigurálásához kövesse az alábbi lépéseket:

  1. Az alkalmazás regisztrációs oldalán a navigációs ablaktáblán válassza a Token Configuration elemet annak a lapnak a megnyitásához, amelyen konfigurálhatja az alkalmazás számára kibocsátott tokenekben megadott jogcímeket.

  2. Válassza a Csoportjogcím hozzáadása lehetőséget a Csoportjogcím szerkesztése képernyő megnyitásához.

  3. Válassza a Biztonsági csoportok vagy a Minden csoport (beleértve a terjesztési listákat, de az alkalmazáshoz rendelt csoportokat nem) lehetőséget. Ha mindkét beállítást választja, az nem befolyásolja a Biztonsági csoportok beállítást.

  4. A ID szakaszban válassza a Group ID lehetőséget. Ez a beállítás azt eredményezi, hogy a Microsoft Entra ID elküldi azoknak a csoportoknak a objektumazonosítóját, amelyekhez a felhasználó hozzá van rendelve, az alkalmazás által a felhasználó bejelentkezése után fogadott ID-jogkivonat groups jogcímében.

Konfigurálja úgy az alkalmazását, hogy az a csoportjogcím értékeit a csoportok azon szűrt halmazából kapja meg, amelyekhez a felhasználót hozzárendelhetik

Ez a beállítás akkor hasznos, ha a következő esetek teljesülnek:

  • Az alkalmazás olyan csoportokra van kíváncsi, amelyekhez egy bejelentkező felhasználó hozzárendelhető.
  • Az alkalmazást nem érdekli minden olyan biztonsági csoport, amelyhez a felhasználó hozzá van rendelve a bérlőben.

Ez a lehetőség segít az alkalmazásának elkerülni a túllépési problémát.

Megjegyzés

Ez a funkció nem érhető el a Microsoft Entra ID ingyenes kiadásában.

A beágyazott csoporthozzárendelések nem érhetők el, ha ezt a beállítást használja.

Ha engedélyezni szeretné ezt a beállítást az alkalmazásban, kövesse az alábbi lépéseket:

  1. Az alkalmazás regisztrációs oldalán a navigációs ablaktáblán válassza a Token Configuration elemet annak a lapnak a megnyitásához, amelyen konfigurálhatja az alkalmazás számára kibocsátott tokenekben megadott jogcímeket.

  2. Válassza a Csoportjogcím hozzáadása lehetőséget a Csoportjogcím szerkesztése képernyő megnyitásához.

  3. Válassza ki az alkalmazáshoz rendelt csoportokat.

    Más beállítások – például biztonsági csoportok vagy minden csoport (beleértve a terjesztési listákat, de az alkalmazáshoz rendelt csoportokat nem) kiválasztásakor az alkalmazás nem fogja tudni használni ezt a lehetőséget.

  4. A ID szakaszban válassza a Group ID lehetőséget. Ez a beállítás azt eredményezi, hogy a Microsoft Entra ID elküldi azon csoportok objektumazonosítóját, amelyekhez a felhasználó hozzá van rendelve, a ID-jogkivonat groups jogcímében.

  5. Ha webes API-t tesz közzé az API elérhetővé tétele lehetőséggel, akkor a Hozzáférés szakaszban a Csoportazonosító lehetőséget is kiválaszthatja. Ez a beállítás azt eredményezi, hogy a Microsoft Entra ID elküldi azoknak a csoportoknak a objektumazonosítóját, amelyekhez a felhasználó hozzá van rendelve, a hozzáférési token csoportjogcímében.

  6. Az alkalmazás regisztrációs oldalán válassza az Áttekintés lehetőséget a navigációs panelen az alkalmazás áttekintési képernyőjének megnyitásához.

  7. Válassza ki az alkalmazása nevét tartalmazó hivatkozást a(z) Helyi címtárban felügyelt alkalmazás elemben. Ennek a mezőnek a címe csonkolva jelenhet meg – például: . Ha ezt a hivatkozást választja, arra a Vállalati alkalmazás áttekintése lapra navigál, amely az alkalmazás szolgáltatásnevéhez tartozik abban a bérlőben, ahol létrehozta. Az alkalmazásregisztrációs lapra a böngésző vissza gombjával léphet vissza.

  8. A navigációs panelEn a Felhasználók és csoportok lehetőséget választva megnyithatja azt a lapot, amelyen felhasználókat és csoportokat rendelhet az alkalmazáshoz.

  9. Válassza a Felhasználó hozzáadása lehetőséget.

  10. Válassza ki a felhasználót és a csoportokat az eredményül kapott képernyőn.

  11. Válassza ki az alkalmazáshoz hozzárendelni kívánt csoportokat.

  12. Válassza a Kijelölés lehetőséget a csoportok kijelölésének befejezéséhez.

  13. Válassza a Hozzárendelés lehetőséget a csoport-hozzárendelési folyamat befejezéséhez.

    Az alkalmazás mostantól megkapja ezeket a kiválasztott csoportokat a csoportokra vonatkozó jogcímben, amikor az alkalmazásba bejelentkező felhasználó e hozzárendelt csoportok közül egynek vagy többnek a tagja.

  14. A navigációs panel Tulajdonságok elemét választva megnyithatja az alkalmazás alapvető tulajdonságait listázó lapot. Állítsa a szükséges felhasználói hozzárendelést? jelzőt Igen értékre.

Fontos

Amikor kötelezővé teszi a felhasználói hozzárendelést? Igen értékre állítja, a Microsoft Entra-azonosító ellenőrzi, hogy csak a Felhasználók és csoportok panelen az alkalmazáshoz rendelt felhasználók tudnak-e bejelentkezni az alkalmazásba. A felhasználókat közvetlenül vagy a hozzájuk tartozó biztonsági csoportok hozzárendelésével rendelheti hozzá.

Az alkalmazás (java-servlet-webapp-groups) konfigurálása csoportazonosítók felismeréséhez

Az alkalmazás konfigurálásához kövesse az alábbi lépéseket:

Fontos

A Token Configuration oldalon, ha a groupID beállítástól eltérő bármely lehetőséget választotta – például a DNSDomain\sAMAccountName értéket –, akkor az objektumazonosító helyett a következő lépésekben a csoport nevét kell megadnia – például: –.

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

  2. Keresse meg a(z) karakterláncot, és cserélje le a meglévő értéket a(z) csoport objektumazonosítójára, amelyet az Azure Portalról másolt. Távolítsa el a kapcsos zárójeleket a helyőrző értékből is.

  3. Keresse meg a karakterláncot, és cserélje le a meglévő értéket a csoport objektumazonosítójára, amelyet az Azure Portalról másolt. Távolítsa el a kapcsos zárójeleket a helyőrző értékből is.

A minta összeállítása

Ha a mintát a Maven használatával szeretné létrehozni, keresse meg a minta pom.xml fájljának könyvtárát, majd futtassa a következő parancsot:

mvn clean package

Ez a parancs létrehoz egy .war fájlt, amelyet különböző alkalmazáskiszolgálókon futtathat.

A példa futtatása

  • Üzembe helyezés az Azure App Service-be
  • Futtatás helyileg

Az alábbi szakaszok bemutatják, hogyan helyezheti üzembe a mintát Azure-alkalmazás szolgáltatásban.

Előfeltételek

  • Maven-bővítmény Azure App Service-alkalmazásokhoz

    Ha nem a Maven az előnyben részesített fejlesztési eszköz, tekintse meg az alábbi hasonló oktatóanyagokat, amelyek más eszközöket használnak:

    • IntelliJ IDEA
    • Eclipse
    • Visual Studio Code

A Maven beépülő moduljának konfigurálása

A Azure-alkalmazás Szolgáltatásban való üzembe helyezéskor az üzembe helyezés automatikusan az Azure CLI-ből származó Azure-hitelesítő adatokat használja. Ha az Azure CLI nincs helyileg telepítve, akkor a Maven beépülő modul az OAuth vagy az eszköz bejelentkezésével hitelesít. További információért lásd: hitelesítés a Maven beépülőmodulokkal.

A beépülő modul konfigurálásához kövesse az alábbi lépéseket:

  1. Futtassa a következő parancsot az üzembe helyezés konfigurálásához. Ez a parancs segít a Azure-alkalmazás szolgáltatás operációs rendszerének, a Java-verziónak és a Tomcat-verziónak a beállításában.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
    
  2. A Új futtatási konfiguráció létrehozása lehetőséghez nyomja meg a Y billentyűt, majd nyomja meg az Enter billentyűt.

  3. Az operációs rendszer értékének megadásához Windows esetén nyomja meg a 1-et, Linux esetén pedig a 2-t, majd nyomja meg az Enter billentyűt.

  4. A Define value for javaVersion lehetőségnél nyomja meg a 2 billentyűt a Java 11 kiválasztásához, majd nyomja meg az Enter billentyűt.

  5. A(z) Define value for webContainer résznél nyomja meg a 4-et a Tomcat 9.0 kiválasztásához, majd nyomja meg az Enter billentyűt.

  6. A pricingTier értékének meghatározásához nyomja le az Enter billentyűt az alapértelmezett P1v2 szint kiválasztásához.

  7. A Megerősítés lehetőséghez nyomja meg a Y billentyűt, majd nyomja meg az Enter billentyűt.

Az alábbi példa az üzembehelyezési folyamat kimenetét mutatja be:

Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[INFO] ------------------------------------------------------------------------

Miután megerősítette a választásait, a plugin hozzáadja a szükséges pluginelemet és beállításokat a projekt pom.xml fájljához, hogy konfigurálja az alkalmazást az Azure App Service-ben való futtatáshoz.

A pom.xml fájl releváns részének az alábbi példához hasonlóan kell kinéznie:

<build>
    <plugins>
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>>azure-webapp-maven-plugin</artifactId>
            <version>x.xx.x</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <resourceGroup>your-resourcegroup-name</resourceGroup>
                <appName>your-app-name</appName>
            ...
            </configuration>
        </plugin>
    </plugins>
</build>

Az App Service konfigurációit közvetlenül a pom.xml-ben módosíthatja. Néhány gyakori konfiguráció az alábbi táblázatban található:

Tulajdonság Kötelező Leírás
subscriptionId false Az előfizetés azonosítója.
resourceGroup true Az alkalmazás Azure-erőforráscsoportja.
appName true Az alkalmazás neve.
region false Az a régió, amelyben az alkalmazást üzemeltetni szeretné. Az alapértelmezett érték . Az érvényes régiókat lásd itt: Támogatott régiók.
pricingTier false Az alkalmazás tarifacsomagja. Az alapértelmezett érték éles környezetben futó munkaterhelés esetén . A Java fejlesztéséhez és teszteléséhez ajánlott minimális érték: . További információkért lásd: App Service díjszabás.
runtime false A futtatókörnyezet konfigurációja. További információért lásd: A konfiguráció részletei.
deployment false Az üzembehelyezési konfiguráció. További információért lásd: A konfiguráció részletei.

A konfigurációk teljes listáját a beépülő modul referenciadokumentációjában találja. Az összes Azure Maven-bővítmény egy közös konfigurációkészletet használja. Ezekkel a konfigurációkkal kapcsolatban lásd: Gyakori konfigurációk. Az Azure App Service-re vonatkozó konfigurációkkal kapcsolatban lásd: Azure-alkalmazás: Konfiguráció részletei.

Ügyeljen arra, hogy a és értékeket tegye félre későbbi használatra.

Az alkalmazás előkészítése az üzembe helyezéshez

Amikor üzembe helyezi az alkalmazást az App Service-ben, az átirányítási URL-cím az üzembe helyezett alkalmazáspéldány átirányítási URL-címére változik. A tulajdonságok fájljában a következő lépésekkel módosíthatja ezeket a beállításokat:

  1. Keresse meg az alkalmazás authentication.properties fájlját, és módosítsa a értékét a telepített alkalmazás tartománynevére, az alábbi példában látható módon. Ha például az előző lépésben az alkalmazás neveként a elemet választotta, akkor most a értékeként a értéket kell használnia. Ügyeljen arra is, hogy a protokollt -ról -re változtatta.

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<your-app-name>.azurewebsites.net
    
  2. A fájl mentése után használja az alábbi parancsot az alkalmazás újraépítéséhez:

    mvn clean package
    

Fontos

Ugyanebben a authentication.properties fájlban található egy beállítás az Ön eleméhez. Nem ajánlott ezt az értéket az App Service-ben üzembe helyezni. Az sem jó gyakorlat, ha ezt az értéket a kódban hagyja, és esetleg feltölti a Git-repozitóriumba. A titkos érték kódból való eltávolításához további részletes útmutatást a Üzembe helyezés az App Service-ben – Titkos adat eltávolítása című szakaszban talál. Ez az útmutató további lépéseket ad hozzá a titkos érték Key Vaultba való feltöltéséhez, valamint a Key Vault References használatához.

A Microsoft Entra ID alkalmazásregisztráció frissítése

Mivel az átirányítási URI az Azure App Service-be üzembe helyezett alkalmazás URI-jára változik, a Microsoft Entra ID alkalmazásregisztrációban is módosítania kell az átirányítási URI-t. A módosítás végrehajtásához kövesse az alábbi lépéseket:

  1. Lépjen a Microsoft fejlesztői identitásplatform Alkalmazásregisztrációk oldalára.

  2. A keresőmezővel keressen rá az alkalmazásregisztrációjára – például: .

  3. Nyissa meg az alkalmazásregisztrációt a nevének kiválasztásával.

  4. Válassza a Hitelesítés lehetőséget a menüben.

  5. A Webátirányítási URI-k szakaszban válassza az URI hozzáadása lehetőséget.

  6. Adja meg az alkalmazás URI-ját a(z) hozzáfűzésével – például: .

  7. Válassza a Mentés lehetőséget.

Az alkalmazás üzembe helyezése

Most már készen áll arra, hogy üzembe helyezze az alkalmazását az Azure App Service-be. Az alábbi paranccsal győződjön meg arról, hogy bejelentkezett az Azure-környezetbe az üzembe helyezés végrehajtásához:

az login

Ha az összes konfiguráció készen áll a pom.xml fájlban, a következő paranccsal telepítheti a Java-alkalmazást az Azure-ban:

mvn package azure-webapp:deploy

A telepítés befejezése után az alkalmazás itt érhető el: Nyissa meg az URL-t a helyi webböngészőjében, ahol a alkalmazás kezdőoldalát kell látnia.

A minta vizsgálata

A minta megismeréséhez kövesse az alábbi lépéseket:

  1. Figyelje meg a bejelentkezett vagy kijelentkezett állapotot a képernyő közepén.
  2. Válassza a sarokban található környezetérzékeny gombot. Ez a gomb Bejelentkezés feliratot mutat az alkalmazás első indításakor.
  3. A következő lapon kövesse az utasításokat, és jelentkezzen be egy fiókkal a Microsoft Entra ID-bérlőben.
  4. A hozzájárulási képernyőn figyelje meg a kért hatóköröket.
  5. Figyelje meg, hogy a környezetfüggő gombon most ez áll: Kijelentkezés, és megjelenik rajta a felhasználóneve.
  6. Válassza az Azonosító jogkivonat részletei lehetőséget az azonosító jogkivonat egyes dekódolt jogcímeinek megtekintéséhez.
  7. Válassza a Csoportok lehetőséget a bejelentkezett felhasználó biztonsági csoporttagságával kapcsolatos információk megtekintéséhez.
  8. Válassza a Csak adminisztrátor vagy a Normál felhasználó lehetőséget a groups claim által védett végpontok eléréséhez.
    • Ha a bejelentkezett felhasználó a csoport tagja, mindkét oldalra beléphet.
    • Ha a bejelentkezett felhasználó a csoportba tartozik, csak a Normál felhasználó oldalt érheti el.
    • Ha a bejelentkezett felhasználó egyik csoportban sem található, a felhasználó nem férhet hozzá a két oldal egyikéhez sem.
  9. A kijelentkezéshez használja a sarokban lévő gombot.
  10. Kijelentkezés után válassza az ID Token Details lehetőséget, és figyelje meg, hogy az alkalmazás az ID token jellemzői helyett egy hibát jelenít meg, ha a felhasználó nincs jogosultként engedélyezve.

Tudnivalók a kódról

Ez a minta a Java-hoz készült MSAL-t (MSAL4J) használja egy felhasználó bejelentkeztetésére és egy olyan azonosító token lekérésére, amely tartalmazhatja a groups jogcímet. Ha túl sok csoport van ahhoz, hogy az azonosító tokenben szerepeljen, a minta a Microsoft Graph SDK for Java használatával kéri le a csoporttagsági adatokat a Microsoft Graphból. Attól függően, hogy a felhasználó mely csoportokhoz tartozik, a bejelentkezett felhasználó a védett oldalak közül egyiket sem, csak az egyiket vagy mindkettőt elérheti: és .

Ha replikálni szeretné a minta viselkedését, mSAL4J-t és Microsoft Graph SDK-t kell hozzáadnia a projektekhez a Maven használatával. Átmásolhatja a pom.xml fájlt, valamint a src/main/java/com/microsoft/azuresamples/msal4j mappában található helpers és authservlets mappák tartalmát. Szüksége van a authentication.properties fájlra is. Ezek az osztályok és fájlok általános kódot tartalmaznak, amelyeket számos alkalmazásban használhat. A minta többi részét is másolhatja, de a többi osztály és fájl kifejezetten a minta céljának megfelelően van létrehozva.

Tartalom

Az alábbi táblázat a mintaprojekt mappájának tartalmát mutatja be:

Fájl/mappa Leírás
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Ez a könyvtár tartalmazza azokat az osztályokat, amelyek meghatározzák az alkalmazás háttérbeli üzleti logikáját.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Ez a könyvtár tartalmazza a bejelentkezéshez és a végpontok kijelentkezéshez használt osztályokat.
*Servlet.java Az összes elérhető végpont java osztályokban van definiálva, amelyek neve Servletvégződik.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Segédosztályok a hitelesítéshez.
AuthenticationFilter.java A nem hitelesített kéréseket átirányítja a védett végpontokra egy 401-es lapra.
src/main/resources/authentication.properties Microsoft Entra-azonosító és programkonfiguráció.
src/main/webapp/ Ez a könyvtár tartalmazza a felhasználói felület – JSP-sablonokat
CHANGELOG.md A minta módosításainak listája.
CONTRIBUTING.md Útmutató a mintához való hozzájáruláshoz.
LICENC A minta licencje.

Csoportjogcím feldolgozása tokenekben, beleértve a túlcsordulás kezelését

Az alábbi szakaszok azt ismertetik, hogy az alkalmazás hogyan dolgozza fel a csoportok jogcímeit.

A csoportok állítása

A bejelentkezett felhasználó által bejelentkezett biztonsági csoportok objektumazonosítója a jogkivonat csoportigénylésében lesz visszaadva, amely az alábbi példában látható:

{
  ...
  "groups": [
    "0bbe91cc-b69e-414d-85a6-a043d6752215",
    "48931dac-3736-45e7-83e8-015e6dfd6f7c",]
  ...
}

A csoportok túllépési igénye

Annak érdekében, hogy a jogkivonat mérete ne haladja meg a HTTP-fejléc méretkorlátjait, a Microsoft Identitásplatform korlátozza a csoportok jogcímében szereplő objektumazonosítók számát.

A túllépési korlát SAML-jogkivonatok esetén 150, JWT-jogkivonatok esetén 200, egyoldalas alkalmazások esetében 6. Ha egy felhasználó több csoportnak is tagja, mint a túlhasználati korlát, akkor a Microsoft Identitásplatform nem bocsátja ki a csoportazonosítókat a jogkivonatban szereplő csoportokban. Ehelyett egy túlcsordulási jogcímet tartalmaz a tokenben, amely azt jelzi az alkalmazásnak, hogy kérdezze le a Microsoft Graph API-t a felhasználó csoporttagságának lekéréséhez, ahogy az az alábbi példában látható:

{
  ...
  "_claim_names": {
    "groups": "src1"
    },
    {
   "_claim_sources": {
    "src1": {
        "endpoint":"[Graph Url to get this user's group membership from]"
        }
    }
  ...
}

A túlhasználati forgatókönyv létrehozása ebben a mintában teszteléshez

A túlhasználati forgatókönyv létrehozásához kövesse az alábbi lépéseket:

  1. Az AppCreationScripts mappában található BulkCreateGroups.ps1 fájllal számos csoportot hozhat létre, és felhasználókat rendelhet hozzájuk. Ez a fájl segít a túlhasználati forgatókönyvek tesztelésében a fejlesztés során. Ne felejtse el módosítani a felhasználó elemét, amely a(z) BulkCreateGroups.ps1 szkriptben van megadva.

  2. Amikor futtatja ezt a példát, és túllépés történik, a _claim_names a kezdőlapon látható, miután a felhasználó bejelentkezett.

  3. Határozottan javasoljuk, hogy ha lehetséges, használja a csoportszűrési funkciót, hogy elkerülje a túlhasználatot. További információért lásd a következő szakaszt: Az alkalmazás konfigurálása a csoportjogcím-értékek fogadására azon csoportok szűrt halmazából, amelyekhez egy felhasználó hozzá lehet rendelve.

  4. Ha nem tudja elkerülni a csoporttúlcsordulást, javasoljuk, hogy a következő lépéseket használja a tokenben lévő csoportjogcím feldolgozásához:

    1. Ellenőrizze, hogy a jogcím _claim_names-e, és az egyik érték csoport. Ez az igény túllépést jelez.
    2. Ha megtalálta, hívja fel a _claim_sources megadott végpontot a felhasználói csoportok lekéréséhez.
    3. Ha egyik sem található, keresse a felhasználó csoportjait a groups jogcímben.

Megjegyzés

A túlcsordulás kezeléséhez meg kell hívni a Microsoft Graph szolgáltatást a bejelentkezett felhasználó csoporttagságainak kiolvasásához, ezért az alkalmazásnak rendelkeznie kell a GroupMember.Read.All engedéllyel ahhoz, hogy a getMemberObjects függvény sikeresen végrehajtható legyen.

A Microsoft Graph programozásával kapcsolatos további információkért tekintse meg a Microsoft Graph fejlesztőknek készült bemutatása című videót.

ConfidentialClientApplication

A példány a AuthHelper.java fájlban jön létre, ahogyan az a következő példában látható. Ez az objektum segít a Microsoft Entra engedélyezési URL-címének elkészítésében, és segít a hitelesítési jogkivonat cseréjében egy hozzáférési jogkivonatra.

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                      .builder(CLIENT_ID, secret)
                      .authority(AUTHORITY)
                      .build();

A rendszer a következő paramétereket használja a példányosításhoz:

  • Az alkalmazás ügyfélazonosítója.
  • Az ügyfél titkos kódja, amely a bizalmas ügyfélalkalmazások követelménye.
  • A Microsoft Entra ID-szolgáltató, amely tartalmazza a Microsoft Entra-bérlő azonosítóját.

Ebben a mintában ezeket az értékeket a rendszer a authentication.properties fájlból olvassa be a Config.java fájl egyik tulajdonságolvasójának használatával.

Útmutató lépésről lépésre

Az alábbi lépések bemutatja az alkalmazás funkcióit:

  1. A bejelentkezési folyamat első lépése, hogy elküld egy kérést a Microsoft Entra ID-bérlőjéhez tartozó végpontra. Az MSAL4J példányt egy hitelesítési kérés URL-címének összeállítására használják. Az alkalmazás átirányítja a böngészőt erre az URL-címre, ahol a felhasználó bejelentkezik.

    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);
    

    Az alábbi lista a kód funkcióit ismerteti:

    • : Az AuthorizationRequestUrl felépítéséhez beállítandó paraméterek.
    • : Az a hely, ahová a Microsoft Entra átirányítja a böngészőt – a hitelesítési kóddal együtt – miután begyűjtötte a felhasználói hitelesítő adatokat. Meg kell egyeznie a Microsoft Entra ID alkalmazásregisztrációjában, a Azure Portalban megadott átirányítási URI-val.
    • : Hatókörök az alkalmazás által kért engedélyek.
      • Általában a három hatókör elegendő az ID-jogkivonat-válasz fogadásához.
      • Az alkalmazás által kért hatókörök teljes listája megtalálható a authentication.properties fájlban. További hatóköröket is hozzáadhat, például .
  2. 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. Az erre a végpontra irányuló érvényes kérés tartalmaz egy engedélyezési kódot.

  3. A példány ezután beváltja ezt az engedélyezési kódot egy azonosító tokenre és egy hozzáférési tokenre a Microsoft Entra ID-tó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();
    

    Az alábbi lista a kód funkcióit ismerteti:

    • : Azok a paraméterek, amelyeket be kell állítani ahhoz, hogy az engedélyezési kódot ID-tokenre és/vagy hozzáférési tokenre lehessen cserélni.
    • : Az átirányítási végponton kapott engedélyezési kód.
    • : Az előző lépésben használt átirányítási URI-t ismét át kell adni.
    • : Az előző lépésben használt hatóköröket újra át kell adni.
  4. Ha a sikeres, a rendszer kinyeri a token jogcímeit. Ha a nonce-ellenőrzés sikeres, az eredmények a — a egy példánya — elembe kerülnek, és mentésre kerülnek a munkamenetben. Az alkalmazás ezután a munkamenetből, a egy példányán keresztül példányosíthatja a elemet, valahányszor hozzá kell férnie, ahogy az a következő kódban látható:

    // 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());
    
    // handle groups overage if it has occurred.
    handleGroupsOverage(contextAdapter);
    
  5. Az előző lépés után a csoporttagságokat a(z) egy példányán a(z) meghívásával kérheti le.

  6. Ha a felhasználó túl sok – 200-nál több – csoportnak a tagja, a hívás üres lehetne a hívás nélkül. Eközben a értéke , ami azt jelzi, hogy túllépés történt, és hogy a csoportok teljes listájának lekéréséhez a Microsoft Graph meghívása szükséges. Tekintse meg a AuthHelper.java fájlban található metódust, hogy lássa, az alkalmazás hogyan használja a elemet túllépés esetén.

Az útvonalak védelme

Tekintse meg AuthenticationFilter.java , hogy a mintaalkalmazás hogyan szűri az útvonalakhoz való hozzáférést. Az authentication.properties fájlban a tulajdonság azokat a vesszővel elválasztott útvonalakat tartalmazza, amelyekhez csak a hitelesített felhasználók férhetnek hozzá, amint az a következő példában látható:

# for example, /token_details requires any user to be signed in and does not require special groups claim
app.protect.authenticated=/token_details

A alatti, vesszővel elválasztott szabálykészletekben felsorolt útvonalak a nem hitelesített felhasználók számára sem érhetők el, ahogyan az az alábbi példában is látható. Ezek az útvonalak azonban a csoporttagságok szóközzel elválasztott listáját is tartalmazzák. Hitelesítés után csak a megfelelő csoportok legalább egyikéhez tartozó felhasználók férhetnek hozzá ezekhez az útvonalakhoz.

# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}

# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/admin_only admin, /regular_user admin user

Hatókörök

A hatókörök adják meg a Microsoft Entra ID számára azt a hozzáférési szintet, amelyet az alkalmazás igényel.

A kért hatókörök alapján a Microsoft Entra ID hozzájárulási párbeszédet jelenít meg a felhasználónak bejelentkezéskor. Ha a felhasználó hozzájárul egy vagy több hatókörhöz, és tokent kap, akkor a jóváhagyott hatókörök kódolva lesznek az így kapott -ba.

Az alkalmazás által kért hatóköröket lásd itt: authentication.properties. Alapértelmezés szerint az alkalmazás a hatókörök értékét értékre állítja. Erre a Microsoft Graph API-hatókörre akkor van szükség, ha az alkalmazásnak meg kell hívnia a Graphot a felhasználó csoporttagságainak lekéréséhez.

További információ

  • Microsoft Authentication Library (MSAL) Javához
  • Microsoft identitásplatform (Microsoft Entra ID a fejlesztőknek)
  • Gyorsútmutató: alkalmazás regisztrálása a Microsoft identitásplatformon
  • Ismerkedés a Microsoft Entra ID-alkalmazások hozzájárulási felhasználói élményeivel
  • A felhasználói és rendszergazdai hozzájárulás megértése
  • MSAL mintakódok