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

Ez a cikk bemutatja, hogyan hozhat létre java JBoss EAP-alkalmazást, amely a Java-hoz készült Microsoft Authentication Library (MSAL) használatával jelentkezik be a felhasználókba. 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 az MSAL for Java (MSAL4J) használatával jelentkezik be a felhasználókba egy Microsoft Entra ID-bérlőbe, és beszerez egy azonosító jogkivonatot a Microsoft Entra ID-ból. Az azonosító jogkivonat igazolja, hogy a felhasználó hitelesítése ezzel a bérlővel történik. Az alkalmazás a felhasználó hitelesítési állapota és a csoporttagság alapján védi az útvonalakat.

A forgatókönyvet bemutató videóért tekintse meg az alkalmazások engedélyezésének implementálását alkalmazásszerepkörök, biztonsági csoportok, hatókörök és címtárszerepkörök használatával.

Előfeltételek

Ajánlások

  • Néhány ismerős a Java / Jakarta Servlets.
  • A Linux/OSX terminál vagy a Windows PowerShell ismerete.
  • jwt.ms a jogkivonatok vizsgálatához.
  • A Fiddler a hálózati tevékenység figyeléséhez és a hibaelhárításhoz.
  • Kövesse a Microsoft Entra ID blogot , hogy naprakész maradjon a legújabb fejlesztésekkel kapcsolatban.

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-java-servlet-webapp-authentication.git
cd 3-Authorization-II/groups

Másik lehetőségként keresse meg az ms-identity-java-servlet-webapp-authentication adattárat, majd töltse le .zip fájlként, és bontsa ki a merevlemezre.

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ővel

Ebben a mintában egy projekt szerepel. Ha regisztrálni szeretné az alkalmazást az Azure Portalon, kövesse a manuális konfigurációs lépéseket, vagy használjon PowerShell-szkriptet. A szkript a következő feladatokat hajtja végre:

  • Létrehozza a Microsoft Entra ID-alkalmazásokat és a kapcsolódó objektumokat, például jelszavakat, engedélyeket és függőségeket.
  • Módosítja a projektkonfigurációs fájlokat.
  • Alapértelmezés szerint beállít egy olyan alkalmazást, amely csak a szervezeti címtárban lévő fiókokkal működik.

A PowerShell-szkript futtatásához kövesse az alábbi lépéseket:

  1. Windows rendszeren nyissa meg a PowerShellt, és keresse meg a klónozott könyvtár gyökerét.

  2. A PowerShell végrehajtási szabályzatának beállításához használja a következő parancsot:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    
  3. A konfigurációs szkript futtatásához használja az alábbi parancsokat:

    cd .\AppCreationScripts\
    .\Configure.ps1
    

    Feljegyzés

    A szkriptek futtatásának egyéb módjait az alkalmazáslétrehozási szkriptek ismertetik. A szkriptek emellett útmutatást nyújtanak az automatikus alkalmazásregisztrációhoz, konfiguráláshoz és eltávolításhoz, ami segíthet a CI/CD-forgatókönyvekben.

Az alkalmazás (java-servlet-webapp-groups) konfigurálása az alkalmazásregisztráció használatára

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

Feljegyzés

A következő lépésekben ugyanaz, ClientID mint Application ID vagy AppId.

  1. Nyissa meg a projektet az IDE-ben.

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

  3. Keresse meg a sztringet {enter-your-tenant-id-here}. Cserélje le a meglévő értéket a Microsoft Entra-bérlőazonosítóra, ha az alkalmazást csak ebben a szervezeti címtárban lévő fiókokra regisztrálta.

  4. Keresse meg a sztringet {enter-your-client-id-here} , és cserélje le a meglévő értéket az alkalmazásazonosítóra vagy clientId az java-servlet-webapp-groups Azure Portalról másolt alkalmazásra.

  5. 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 mentett értékre az java-servlet-webapp-groups Azure Portalon.

Biztonsági beállítások 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:

Feljegyzés

A helyszíni csoport samAccountName vagy On Premises Group Security Identifier a csoportazonosító helyett az Active Directoryból szinkronizált csoportattribútumok használatának előfeltételei című szakaszt olvassa el a Microsoft Entra ID használatával az alkalmazásokhoz tartozó csoportjogcímek konfigurálása című szakaszban.

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 válassza a navigációs panel Token Configuration elemét a lap megnyitásához, ahol konfigurálhatja az alkalmazáshoz kibocsátott jogcímek által biztosított jogkivonatokat.

  2. Válassza a Csoportok hozzáadása jogcím lehetőséget a Csoportok szerkesztése jogcím 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. Az Azonosító szakaszban válassza a Csoportazonosító lehetőséget. Ez a kijelölés azt eredményezi, hogy a Microsoft Entra ID elküldi azon csoportok objektumazonosítóját , amelyekhez a felhasználó a felhasználó bejelentkezése után megkapja az alkalmazás által kapott azonosító jogkivonat csoportjogkivonatát .

Az alkalmazás konfigurálása a csoportok jogcímértékeinek fogadásához olyan szűrt csoportokból, amelyhez a felhasználó hozzárendelhető

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 beállítás segít az alkalmazásnak elkerülni a túlhasználati problémát.

Feljegyzés

Ez a funkció nem érhető el a Microsoft Entra ID Free 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 válassza a navigációs panel Token Configuration elemét a lap megnyitásához, ahol konfigurálhatja az alkalmazáshoz kibocsátott jogcímek által biztosított jogkivonatokat.

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

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

    Ha további lehetőségeket választ – például biztonsági csoportokat vagy minden csoportot (beleértve a terjesztési listákat, de az alkalmazáshoz rendelt csoportokat nem), akkor az alkalmazás nem fogja tudni használni ezt a lehetőséget.

  4. Az Azonosító szakaszban válassza a Csoportazonosító lehetőséget. Ez azt eredményezi, hogy a Microsoft Entra ID elküldi azon csoportok objektumazonosítóját , amelyhez a felhasználó hozzá van rendelve az azonosító jogkivonat csoportigénylésében.

  5. Ha webes API-t tesz közzé az Api-t elérhetővé tetsző beállítással, akkor az Access szakaszban a Csoportazonosító lehetőséget is választhatja. Ez a beállítás azt eredményezi, hogy a Microsoft Entra ID elküldi azon csoportok objektumazonosítóját, amelyhez a felhasználó hozzá van rendelve a hozzáférési jogkivonat csoportigénylésé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ás nevét tartalmazó hivatkozást a helyi címtár felügyelt alkalmazásban. Ez a mezőcím például csonkolt Managed application in ...lehet. Ha ezt a hivatkozást választja, keresse meg az alkalmazáshoz tartozó szolgáltatásnévvel társított Vállalati alkalmazás áttekintése lapot 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 csoportokat a csoportok jogcímén, amikor egy felhasználó bejelentkezik az alkalmazásba, egy vagy több hozzárendelt csoport 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

Ha a tokenkonfiguráció lapon a groupID-n kívül más lehetőséget választott – például DNSDomain\sAMAccountName –, contoso.com\Test Group akkor az objektumazonosító helyett a következő lépésekben kell megadnia a csoport nevét:

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

  2. Keresse meg a sztringet {enter-your-admins-group-id-here} , és cserélje le a meglévő értéket a GroupAdmin 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 sztringet {enter-your-users-group-id-here} , és cserélje le a meglévő értéket a GroupMember 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 számos alkalmazáskiszolgálón futtathat.

Minta futtatása

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

Előfeltételek

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

A szolgáltatás Azure-alkalmazás üzembe helyezési folyamata 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ó: 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 mellette látható Maven-parancsot az üzembe helyezés konfigurálásához. Ez a parancs segít beállítani az App Service operációs rendszer, a Java és a Tomcat verziót.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
    
  2. Új futtatási konfiguráció létrehozásához nyomja le az Y billentyűt, majd nyomja le az Enter billentyűt.

  3. Az operációs rendszer értékének definiálásához nyomja le a 2 billentyűt Linux esetén, majd nyomja le az Enter billentyűt.

  4. A JavaVersion értékének definiálásához nyomja le a 2 billentyűt a Java 11-hez, majd nyomja le az Enter billentyűt.

  5. A webContainer értékének definiálásához nyomja le az 1 billentyűt a JBosseap7-hez, majd nyomja le az Enter billentyűt.

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

  7. A megerősítéshez nyomja le az Y billentyűt, majd nyomja le 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-1707220080695
ResourceGroup : msal4j-servlet-auth-1707220080695-rg
Region : centralus
PricingTier : P1v3
OS : Linux
Java Version: Java 11
Web server stack: JBosseap 7
Deploy to slot : false
Confirm (Y/N) [Y]:
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  26.196 s
[INFO] Finished at: 2024-02-06T11:48:16Z
[INFO] ------------------------------------------------------------------------

Miután megerősítette a választási lehetőségeket, a beépülő modul hozzáadja a beépülő modul konfigurációját és a szükséges beállításokat a projekt pom.xml fájljához, hogy konfigurálja az alkalmazást a Azure-alkalmazás Szolgáltatásban való futtatásra.

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 módosíthatja. Néhány gyakori konfiguráció az alábbi táblázatban található:

Tulajdonság Kötelező Leírás Verzió
schemaVersion false A konfigurációs séma verziója. A támogatott értékek a következők: v1 és v2. 1.5.2
subscriptionId false Az előfizetés azonosítója. 0.1.0+
resourceGroup true Az alkalmazás Azure-erőforráscsoportja. 0.1.0+
appName true Az alkalmazás neve. 0.1.0+
region false Az a régió, amelyben az alkalmazást üzemeltetni szeretné. Az alapértelmezett érték centralus. Érvényes régiókért lásd: Támogatott régiók. 0.1.0+
pricingTier false Az alkalmazás tarifacsomagja. Az alapértelmezett érték a P1v2 az éles számítási feladatokhoz. A Java-fejlesztés és -tesztelés ajánlott minimális értéke a B2. További információ: App Service díjszabása 0.1.0+
runtime false A futtatókörnyezet konfigurációja. További információ: Konfiguráció részletei. 0.1.0+
deployment false Az üzembehelyezési konfiguráció. További információ: Konfiguráció részletei. 0.1.0+

A konfigurációk teljes listáját a beépülő modul referenciadokumentációjában találja. Az Összes Azure Maven beépülő modul közös konfigurációkat használ. Ezekről a konfigurációkról a Gyakori konfigurációk című témakörben olvashat. A Azure-alkalmazás Service-hez kapcsolódó konfigurációkért lásd: Azure-alkalmazás: Konfiguráció részletei.

Ügyeljen arra, hogy a későbbi használatra félretehesse az értékeket és resourceGroup az appName értékeket.

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 app.homePage 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 nevét választotta example-domain , akkor most már használnia https://example-domain.azurewebsites.net kell az app.homePage értéket. Győződjön meg arról, hogy a protokollt is módosította a másikra httphttps.

    # 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

Ebben a authentication.properties fájlban van egy beállítás az Ön aad.secretszámára. Nem ajánlott ezt az értéket az App Service-ben üzembe helyezni. Nem ajánlott ezt az értéket a kódban hagyni, és potenciálisan leküldni a git-adattárba. Ha el szeretné távolítani ezt a titkos értéket a kódból, részletesebb útmutatást az App Service-ben való üzembe helyezés – Titkos kódok eltávolítása című szakaszban talál. Ez az útmutató további lépéseket tartalmaz a titkos kulcs értékének a Key Vaultba való leküldéséhez és a Key Vault-referenciák használatához.

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

Mivel az átirányítási URI Azure-alkalmazás Szolgáltatásra változik, a Microsoft Entra ID alkalmazásregisztrációjá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 Identitásplatform fejlesztőknek Alkalmazásregisztrációk lapra.

  2. A keresőmező használatával keresse meg az alkalmazásregisztrációt – például java-servlet-webapp-authentication.

  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 Webes - átirányítási URI-k szakaszban válassza az URI hozzáadása lehetőséget.

  6. Töltse ki az alkalmazás URI-ját, hozzáfűzve /auth/redirect például https://<your-app-name>.azurewebsites.net/auth/redirect.

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

Az alkalmazás üzembe helyezése

Most már készen áll az alkalmazás üzembe helyezésére Azure-alkalmazás Service-ben. 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

Az üzembe helyezés befejezése után az alkalmazás készen áll a .http://<your-app-name>.azurewebsites.net/ Nyissa meg az URL-címet a helyi webböngészővel, ahol meg kell jelennie az msal4j-servlet-auth alkalmazás kezdőlapjának.

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 beolvassa a bejelentkezést az alkalmazás első futtatá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ő gomb most kijelentkezik , és megjeleníti a felhasználónevét.
  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 Rendszergazda Csak vagy a Normál felhasználó lehetőséget a csoportok védett végpontjaihoz való hozzáféréshez.
    • Ha a bejelentkezett felhasználó a GroupAdmin csoportban van, a felhasználó mindkét oldalt beírhatja.
    • Ha a bejelentkezett felhasználó a GroupMember csoportban van, a felhasználó csak a Normál felhasználó lapot adhatja meg.
    • 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. A kijelentkezés után válassza az Azonosító jogkivonat részletei lehetőséget , és figyelje meg, hogy az alkalmazás hibaüzenetet 401: unauthorized jelenít meg az azonosító jogkivonat jogcímei helyett, ha a felhasználó nincs engedélyezve.

Tudnivalók a kódról

Ez a minta az MSAL for Java (MSAL4J) használatával jelentkeztet be egy felhasználót, és beszerez egy azonosító jogkivonatot, amely tartalmazhatja a csoportok jogcímét. Ha túl sok csoport van a kibocsátáshoz az azonosító jogkivonatban, a minta a Microsoft Graph SDK for Java használatával szerzi be a csoporttagság adatait a Microsoft Graphból. Attól függően, hogy a felhasználó melyik csoportokhoz tartozik, a bejelentkezett felhasználó a védett lapok egyikéhez, egyikéhez vagy mindkettőhöz hozzáférhet. Admins OnlyRegular Users

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. A pom.xml fájlt és a segítők és authservletsmappák tartalmát az src/main/java/com/microsoft/azuresamples/msal4j mappába másolhatja. 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
AppCreationScripts/ Szkriptek a Microsoft Entra ID-alkalmazásregisztrációk automatikus konfigurálásához.
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 ____Servlet.java végződésű osztályokban van definiálva.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Segédosztályok 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.
LICEN Standard kiadás A minta licence.

Csoportok jogcímének feldolgozása jogkivonatokban, beleértve a túlhasználat kezelését

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

A csoportok jogcíme

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úlhasználati jogcíme

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 tartalmaz egy túlhasználati jogcímet a jogkivonatban, amely azt jelzi az alkalmazásnak, hogy lekérdezi a Microsoft Graph API-t a felhasználó csoporttagságának lekéréséhez, ahogyan 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 BulkCreateGroups.ps1 szkriptben megadott felhasználótobjectId.

  2. Amikor futtatja ezt a mintát, és túlhasználat lép fel, a _claim_names felhasználó bejelentkezése után megjelenik a kezdőlapon.

  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ó: Az alkalmazás konfigurálása a csoportok jogcímértékeinek fogadásához olyan szűrt csoportokból, amelyhez a felhasználó hozzárendelhető.

  4. Ha nem tudja elkerülni a csoporttúllépést, javasoljuk, hogy a következő lépésekkel dolgozza fel a csoportok jogcímét a jogkivonatában:

    1. Ellenőrizze a jogcímet _claim_names , ha az egyik érték csoport. Ez túlhasználatot jelez.
    2. Ha megtalálta, hívja fel a megadott végpontot _claim_sources a felhasználói csoportok lekéréséhez.
    3. Ha egyik sem található, tekintse meg a felhasználói csoportok csoportokra vonatkozó jogcímét.

Feljegyzés

A túlhasználat kezeléséhez a Microsoft Graph hívása szükséges a bejelentkezett felhasználó csoporttagságainak olvasásához, ezért az alkalmazásnak rendelkeznie kell a GroupMember.Read.All engedéllyel a getMemberObjects függvény sikeres végrehajtásához.

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 rendszer létrehoz egy ConfidentialClientApplication példányt a AuthHelper.java fájlban, ahogy az az alábbi példában is 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 egy kérés küldése a végpontra a /authorize Microsoft Entra ID-bérlőhöz. Az MSAL4J-példány ConfidentialClientApplication egy engedélyezési kérelem URL-címének létrehozására szolgál. 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:

    • AuthorizationRequestUrlParameters: Az AuthorizationRequestUrl létrehozásához be kell állítani paramétereket.
    • REDIRECT_URI: Ahol a Microsoft Entra átirányítja a böngészőt – a hitelesítési kóddal együtt – a felhasználói hitelesítő adatok gyűjtése után. Meg kell egyeznie az átirányítási URI-val a Microsoft Entra ID alkalmazásregisztrációjában az Azure Portalon.
    • 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ő az azonosító jogkivonat-válaszának 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 a User.Read és így tovább.
  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. A végpontra irányuló érvényes kérések engedélyezési kódot tartalmaznak.

  3. 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 jogkivonatot a Microsoft Entra ID-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();
    

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

    • 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 a IdentityContextData munkamenetből egy példányt IdentityContextAdapterServlet , amikor hozzá kell férnie, ahogy az a következő kódban is 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 kinyerheti a csoporttagságokat egy példány IdentityContextDatameghívásávalcontext.getGroups().

  6. Ha a felhasználó túl sok – 200-nál több – csoport tagja, akkor lehet, hogy context.getGroups() üres volt a hívás, ha nem a hívás handleGroupsOverage(). Eközben visszatértrue, context.getGroupsOverage() jelezve, hogy túlhasználat történt, és a csoportok teljes listájának lekéréséhez a Microsoft Graph hívására van szükség. Tekintse meg a handleGroupsOverage() AuthHelper.java metódusát, amelyből megtudhatja, hogyan használja context.setGroups() az alkalmazás a túlhasználatot.

Az útvonalak védelme

Tekintse meg AuthenticationFilter.java , hogy a mintaalkalmazás hogyan szűri az útvonalakhoz való hozzáférést. A authentication.properties fájlban a app.protect.authenticated tulajdonság tartalmazza azokat a vesszővel tagolt útvonalakat, amelyekhez csak a hitelesített felhasználók férhetnek hozzá, ahogyan az alábbi 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 vesszővel elválasztott szabálykészletekben app.protect.groups felsorolt útvonalak a nem hitelesített hitelesített felhasználókra is vonatkoznak, 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 közlik a Microsoft Entra-azonosítóval az alkalmazás által kért hozzáférési szintet.

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ó egy vagy több hatókörhöz járul hozzá, és jogkivonatot szerez be, a hatókörök hozzájárulásával a rendszer az eredményül kapott access_tokenkódba kódolja a hatóköröket.

Az alkalmazás által kért hatókörökért lásd : authentication.properties. Alapértelmezés szerint az alkalmazás a hatókörök értékét a következőre GroupMember.Read.Allállítja be: . 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ó