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 ü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
- JDK 8-os vagy újabb verzió
- Maven 3
- Egy Microsoft Entra ID-bérlő. További információ: Microsoft Entra ID-bérlő lekérése.
- Egy felhasználói fiók a saját Microsoft Entra ID-bérlőjében.
- Két biztonsági csoport,
GroupAdmin
valamintGroupMember
a tesztelni kívánt felhasználók.
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:
Windows rendszeren nyissa meg a PowerShellt, és keresse meg a klónozott könyvtár gyökerét.
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
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
.
Nyissa meg a projektet az IDE-ben.
Nyissa meg a ./src/main/resources/authentication.properties fájlt.
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.Keresse meg a sztringet
{enter-your-client-id-here}
, és cserélje le a meglévő értéket az alkalmazásazonosítóra vagyclientId
azjava-servlet-webapp-groups
Azure Portalról másolt alkalmazásra.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 azjava-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:
Fogadja az összes csoportot, amelyhez a bejelentkezett felhasználó hozzá van rendelve egy Microsoft Entra ID-bérlőben, beágyazott csoportokat tartalmazva. További információ: Az alkalmazás konfigurálása az összes olyan csoport fogadásához, amelyhez a bejelentkezett felhasználó hozzá van rendelve, beleértve a beágyazott csoportokat is.
A csoportok jogcímértékeinek fogadása szűrt csoportokból, amelyekkel az alkalmazás be van programozva, hogy működjön. 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ő. Ez a lehetőség nem érhető el a Microsoft Entra ID Free kiadásában.
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:
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.
Válassza a Csoportok hozzáadása jogcím lehetőséget a Csoportok szerkesztése jogcím képernyő megnyitásához.
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.
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:
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.
Válassza a Csoportok hozzáadása jogcím lehetőséget a Csoportok szerkesztése jogcím képernyő megnyitásához.
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.
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.
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.
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.
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.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.
Válassza a Felhasználó hozzáadása lehetőséget.
Válassza ki a felhasználót és a csoportokat az eredményül kapott képernyőn.
Válassza ki az alkalmazáshoz hozzárendelni kívánt csoportokat.
Válassza a Kijelölés lehetőséget a csoportok kijelölésének befejezéséhez.
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.
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:
Nyissa meg a ./src/main/resources/authentication.properties fájlt.
Keresse meg a sztringet
{enter-your-admins-group-id-here}
, és cserélje le a meglévő értéket aGroupAdmin
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.Keresse meg a sztringet
{enter-your-users-group-id-here}
, és cserélje le a meglévő értéket aGroupMember
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
Maven beépülő modul Azure-alkalmazás 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:
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:
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
Új futtatási konfiguráció létrehozásához nyomja le az Y billentyűt, majd nyomja le az Enter billentyűt.
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.
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.
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.
A pricingTier értékének meghatározásához nyomja le az Enter billentyűt az alapértelmezett P1v3 szint kiválasztásához.
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:
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álasztottaexample-domain
, akkor most már használniahttps://example-domain.azurewebsites.net
kell azapp.homePage
értéket. Győződjön meg arról, hogy a protokollt is módosította a másikrahttp
https
.# 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
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.secret
szá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:
Lépjen a Microsoft Identitásplatform fejlesztőknek Alkalmazásregisztrációk lapra.
A keresőmező használatával keresse meg az alkalmazásregisztrációt – például
java-servlet-webapp-authentication
.Nyissa meg az alkalmazásregisztrációt a nevének kiválasztásával.
Válassza a Hitelesítés lehetőséget a menüben.
A Webes - átirányítási URI-k szakaszban válassza az URI hozzáadása lehetőséget.
Töltse ki az alkalmazás URI-ját, hozzáfűzve
/auth/redirect
példáulhttps://<your-app-name>.azurewebsites.net/auth/redirect
.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:
- Figyelje meg a bejelentkezett vagy kijelentkezett állapotot a képernyő közepén.
- Válassza a sarokban található környezetérzékeny gombot. Ez a gomb beolvassa a bejelentkezést az alkalmazás első futtatásakor.
- A következő lapon kövesse az utasításokat, és jelentkezzen be egy fiókkal a Microsoft Entra ID-bérlőben.
- A hozzájárulási képernyőn figyelje meg a kért hatóköröket.
- Figyelje meg, hogy a környezetfüggő gomb most kijelentkezik , és megjeleníti a felhasználónevét.
- Válassza az Azonosító jogkivonat részletei lehetőséget az azonosító jogkivonat egyes dekódolt jogcímeinek megtekintéséhez.
- Válassza a Csoportok lehetőséget a bejelentkezett felhasználó biztonsági csoporttagságával kapcsolatos információk megtekintéséhez.
- 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.
- Ha a bejelentkezett felhasználó a
- A kijelentkezéshez használja a sarokban lévő gombot.
- 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 Only
Regular 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:
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ót
objectId
.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.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ő.
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:
- Ellenőrizze a jogcímet
_claim_names
, ha az egyik érték csoport. Ez túlhasználatot jelez. - Ha megtalálta, hívja fel a megadott végpontot
_claim_sources
a felhasználói csoportok lekéréséhez. - Ha egyik sem található, tekintse meg a felhasználói csoportok csoportokra vonatkozó jogcímét.
- Ellenőrizze a jogcímet
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:
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ányConfidentialClientApplication
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.
- Általában a három hatókör
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.
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.
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 munkamenetbecontext
– egy példánybaIdentityContextData
– és mentve lesznek. Az alkalmazás ezután példányosíthatja aIdentityContextData
munkamenetből egy példánytIdentityContextAdapterServlet
, 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);
Az előző lépés után kinyerheti a csoporttagságokat egy példány
IdentityContextData
meghívásávalcontext.getGroups()
.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áshandleGroupsOverage()
. 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 ahandleGroupsOverage()
AuthHelper.java metódusát, amelyből megtudhatja, hogyan használjacontext.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_token
kó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ó
- Microsoft Authentication Library (MSAL) Java-hoz
- Microsoft Identitásplatform (Microsoft Entra-azonosító fejlesztőknek)
- Gyorsútmutató: Alkalmazás regisztrálása a Microsoft Identitásplatformon
- A Microsoft Entra ID-alkalmazás hozzájárulási élményének ismertetése
- Felhasználói és rendszergazdai hozzájárulás ismertetése
- MSAL-kódminták
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: