Java Spring Boot-alkalmazások védelme az Azure Active Directory B2C használatával
Ez a cikk egy Java Spring Boot-webalkalmazást mutat be, amely bejelentkezik az Azure Active Directory B2C-bérlő felhasználóiba a Java Azure AD B2C Spring Boot Starter ügyfélkódtárával. Az OpenID Connect protokollt használja.
Az alábbi ábrán az alkalmazás topológiája látható:
Az ügyfélalkalmazás az Azure AD B2C Spring Boot Starter Java-ügyfélkódtárával jelentkezik be egy felhasználóba, és beszerez egy azonosító jogkivonatot az Azure AD B2C-ből. Az azonosító jogkivonat igazolja, hogy a felhasználó hitelesítése az Azure AD B2C-vel történik, és lehetővé teszi a felhasználó számára a védett útvonalak elérését.
Előfeltételek
- JDK 15-ös verzió. Ez a minta java 15-ös rendszeren lett kifejlesztve, de más verziókkal kompatibilis lehet.
- Maven 3
- Java Extension Pack for Visual Studio Code a minta Visual Studio Code-ban való futtatásához ajánlott.
- Egy Azure AD B2C-bérlő. További információ : Oktatóanyag: Azure Active Directory B2C-bérlő létrehozása
- Visual Studio Code
- Azure Tools for Visual Studio Code
Ajánlások
- Némi jártasság a Spring Frameworkben.
- A Linux/OSX terminál 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-msal-java-samples.git
cd 4-spring-web-app/1-Authentication/sign-in-b2c
Másik lehetőségként keresse meg az ms-identity-msal-java-samples 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.
Ez a minta egy előre regisztrált alkalmazással rendelkezik bemutató célokra. Ha saját Azure AD B2C-bérlőt és -alkalmazást szeretne használni, regisztrálja és konfigurálja az alkalmazást az Azure Portalon. További információ: Az alkalmazás regisztrálása szakasz. Ellenkező esetben folytassa a mintafuttatás szakasz lépéseivel.
Válassza ki azt az Azure AD B2C-bérlőt, ahol az alkalmazásokat létre szeretné hozni
A bérlő kiválasztásához kövesse az alábbi lépéseket:
Jelentkezzen be az Azure Portalra.
Ha a fiókja több Azure AD B2C-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 Azure AD B2C-bérlőre való módosításához.
Felhasználói folyamatok és egyéni szabályzatok létrehozása
Ha olyan gyakori felhasználói folyamatokat szeretne létrehozni, mint a regisztráció, a bejelentkezés, a profil szerkesztése és a jelszó alaphelyzetbe állítása, tekintse meg a következő oktatóanyagot: Felhasználói folyamatok létrehozása az Azure Active Directory B2C-ben.
Érdemes lehet egyéni szabályzatokat is létrehozni az Azure Active Directory B2C-ben. Ez a feladat azonban túlmutat az oktatóanyag hatókörén. További információkért tekintse meg az Azure AD B2C egyéni szabályzatainak áttekintését.
Külső identitásszolgáltatók hozzáadása
Az alkalmazás regisztrálása (java-spring-webapp-auth-b2c)
Az alkalmazás regisztrálásához kövesse az alábbi lépéseket:
Lépjen az Azure Portalra , és válassza az Azure AD B2C-t.
Válassza az Alkalmazásregisztrációk lehetőséget a navigációs panelen, majd válassza az Új regisztráció lehetőséget.
A megjelenő Alkalmazás regisztrálása lapon adja meg a következő alkalmazásregisztrációs adatokat:
- A Név szakaszban adjon meg egy értelmes alkalmazásnevet, amely megjeleníthető az alkalmazás felhasználói számára – például
java-spring-webapp-auth-b2c
. - A Támogatott fióktípusok területen válassza a Fiókok lehetőséget bármely identitásszolgáltatóban vagy szervezeti címtárban (a felhasználók felhasználói folyamatokkal való hitelesítéséhez).
- Az Átirányítási URI (nem kötelező) szakaszban válassza a Web lehetőséget a kombinált listában, és adja meg a következő átirányítási URI-t:
http://localhost:8080/login/oauth2/code/
.
- A Név szakaszban adjon meg egy értelmes alkalmazásnevet, amely megjeleníthető az alkalmazás felhasználói számára – például
Válassza a Regisztráció elemet az alkalmazás létrehozásához.
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.
Válassza a Mentés lehetőséget a módosítások mentéséhez.
Az alkalmazás regisztrációs oldalán válassza a navigációs panel Tanúsítványok &titkos kulcsok paneljét a titkos kódok létrehozásához és a tanúsítványok feltöltéséhez.
Az Ügyfél titkos kulcsok szakaszban válassza az Új ügyfélkód lehetőséget.
Írja be a leírást – például az alkalmazás titkos kódját.
Válassza ki a rendelkezésre álló időtartamok egyikét a biztonsági szempontok szerint – például 2 év alatt.
Válassza a Hozzáadás lehetőséget. Megjelenik a létrehozott érték.
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.
Az alkalmazás (java-spring-webapp-auth-b2c) konfigurálása az alkalmazásregisztráció használatához
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 az src/main/resources/application.yml fájlt.
Keresse meg a
client-id
tulajdonságot, és cserélje le a meglévő értéket az alkalmazásazonosítóra vagyclientId
az alkalmazásra azjava-spring-webapp-auth-b2c
Azure Portalon.Keresse meg a
client-secret
tulajdonságot, és cserélje le a meglévő értéket az alkalmazás létrehozása során azjava-spring-webapp-auth-b2c
Azure Portalról mentett értékre.Keresse meg a
base-uri
tulajdonságot, és cserélje le az értékfabrikamb2c
két példányát annak az Azure AD B2C-bérlőnek a nevére, amelyben azjava-spring-webapp-auth-b2c
alkalmazást az Azure Portalon hozta létre.Keresse meg a
sign-up-or-sign-in
tulajdonságot, és cserélje le annak a regisztrációs/bejelentkezési felhasználói folyamat szabályzatnak a nevére, amelyet abban az Azure AD B2C-bérlőben hozott létre, amelyben az alkalmazást azjava-spring-webapp-auth-b2c
Azure Portalon hozta létre.Keresse meg a
profile-edit
tulajdonságot, és cserélje le az Azure AD B2C-bérlőben létrehozott jelszó-visszaállítási felhasználói folyamat szabályzat nevére, amelyben az alkalmazást azjava-spring-webapp-auth-b2c
Azure Portalon hozta létre.Keresse meg a
password-reset
tulajdonságot, és cserélje le az Azure AD B2C-bérlőben létrehozott szerkesztési profil felhasználói folyamat szabályzatának nevére, amelyben az alkalmazást azjava-spring-webapp-auth-b2c
Azure Portalon hozta létre.Nyissa meg a src/main/resources/templates/navbar.html fájlt.
Keresse meg az és a
b2c_1_susi
b2c_1_edit_profile
folyamatokra mutató hivatkozásokat, és cserélje le őket az Ön ésprofile-edit
asign-up-sign-in
felhasználói folyamatokra.
Minta futtatása
Az alábbi szakaszok bemutatják, hogyan helyezheti üzembe a mintát az Azure Container Appsben.
Előfeltételek
- Egy Azure-fiók. Ha még nincs előfizetése, hozzon létre egy ingyenes fiókot. A folytatáshoz az Azure-előfizetés közreműködői vagy tulajdonosi engedélyére van szüksége. További információ: Azure-szerepkörök hozzárendelése a Azure Portal.
- Az Azure CLI.
- Az Azure Container Apps CLI-bővítmény, verzió
0.3.47
vagy újabb. A legújabb verzió telepítéséhez használja aaz extension add --name containerapp --upgrade --allow-preview
parancsot. - A Java Development Kit 17-es vagy újabb verziója.
- Maven.
A Spring projekt előkészítése
A projekt előkészítéséhez kövesse az alábbi lépéseket:
A projekt létrehozásához használja a következő Maven-parancsot :
mvn clean verify
Futtassa helyileg a mintaprojektet az alábbi paranccsal:
mvn spring-boot:run
Beállítás
Ha a parancssori felületről szeretne bejelentkezni az Azure-ba, futtassa a következő parancsot, és kövesse az utasításokat a hitelesítési folyamat befejezéséhez.
az login
A parancssori felület legújabb verziójának futtatásához futtassa a frissítési parancsot.
az upgrade
Ezután telepítse vagy frissítse az Azure Container Apps bővítményt a parancssori felülethez.
Ha hibaüzenetet kap a hiányzó paraméterekről, amikor parancsokat futtat az containerapp
az Azure CLI-ben, győződjön meg arról, hogy telepítve van az Azure Container Apps bővítmény legújabb verziója.
az extension add --name containerapp --upgrade
Feljegyzés
2024 májusától kezdődően az Azure CLI-bővítmények alapértelmezés szerint nem engedélyezik az előzetes verziójú funkciókat. A Container Apps előzetes verziójú funkcióinak eléréséhez telepítse a Container Apps bővítményt a következővel --allow-preview true
: .
az extension add --name containerapp --upgrade --allow-preview true
Az aktuális bővítmény vagy modul telepítése után regisztrálja a névtereket és Microsoft.OperationalInsights
a Microsoft.App
névtereket.
Feljegyzés
Az Azure Container Apps-erőforrások át lettek migrálva a Microsoft.Web
névtérből a Microsoft.App
névtérbe. További részletekért tekintse meg a Névtér 2022 . márciusi migrálását a Microsoft.Web-ből a Microsoft.App.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Az Azure Container Apps-környezet létrehozása
Most, hogy az Azure CLI beállítása befejeződött, meghatározhatja a jelen cikkben használt környezeti változókat.
Adja meg a következő változókat a bash-rendszerhéjban.
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
Hozzon létre egy erőforráscsoportot.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
Hozzon létre egy környezetet egy automatikusan létrehozott Log Analytics-munkaterülettel.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
A tárolóalkalmazás-környezet alapértelmezett tartományának megjelenítése. Jegyezze fel ezt a tartományt a későbbi szakaszokban való használathoz.
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
Az alkalmazás előkészítése az üzembe helyezéshez
Amikor üzembe helyezi az alkalmazást az Azure Container Appsben, az átirányítási URL-cím megváltozik az Azure Container Appsben üzembe helyezett alkalmazáspéldány átirányítási URL-címére. A következő lépésekkel módosíthatja ezeket a beállításokat a application.yml fájlban:
Lépjen az alkalmazás src\main\resources\application.yml fájljára, és módosítsa a telepített alkalmazás tartománynevére az
post-logout-redirect-uri
alábbi példában látható módon. Mindenképpen cserélje le<API_NAME>
a<default-domain-of-container-app-environment>
tényleges értékeket. Ha például az előző lépésben az Azure Container App-környezet alapértelmezett tartománya ésms-identity-api
az alkalmazás neve szerepel, akkor az értékhez kell használniapost-logout-redirect-uri
https://ms-identity-api.<default-domain>
.post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
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
Az alkalmazás application.yml fájlja jelenleg az ügyfél titkos kódjának értékét tartalmazza a client-secret
paraméterben. Ez az érték nem ajánlott ebben a fájlban tartani. Kockázatot is vállalhat, ha a fájlt egy Git-adattárba véglegesíti. Az ajánlott megközelítésért lásd : Titkos kódok kezelése az Azure Container Appsben.
A Microsoft Entra ID alkalmazásregisztráció frissítése
Mivel az átirányítási URI megváltozik az Azure Container Appsben üzembe helyezett alkalmazásra, az átirányítási URI-t is módosítania kell a Microsoft Entra ID-alkalmazásregisztrációjában. 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
/login/oauth2/code/
példáulhttps://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
.Válassza a Mentés lehetőséget.
Az alkalmazás üzembe helyezése
A JAR-csomag üzembe helyezése az Azure Container Appsben.
Feljegyzés
Szükség esetén megadhatja a JDK-verziót a Java buildkörnyezet változóiban. További információ: A Java környezeti változóinak összeállítása az Azure Container Appsben.
Most már üzembe helyezheti a WAR-fájlt a az containerapp up
CLI paranccsal.
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
Feljegyzés
Az alapértelmezett JDK-verzió 17. Ha módosítania kell a JDK-verziót az alkalmazással való kompatibilitás érdekében, az --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
argumentummal módosíthatja a verziószámot.
További buildkörnyezeti változókért tekintse meg a Java környezeti változóinak összeállítása az Azure Container Appsben című témakört.
Az alkalmazás ellenőrzése
Ebben a példában a containerapp up
parancs tartalmazza az --query properties.configuration.ingress.fqdn
argumentumot, amely visszaadja a teljes tartománynevet (FQDN), más néven az alkalmazás URL-címét. Az alábbi lépésekkel ellenőrizheti az alkalmazás naplóit az üzembehelyezési problémák kivizsgálásához:
A kimeneti alkalmazás URL-címét az Üzembe helyezés szakasz Kimenetek lapján érheti el.
Az Azure Container Apps-példány áttekintési lapján válassza a Naplók lehetőséget az alkalmazás naplóinak ellenőrzéséhez.
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. Másik lehetőségként válassza a jogkivonat részleteire mutató hivatkozást. Mivel ez a lap védett, és hitelesítést igényel, a rendszer automatikusan átirányítja a bejelentkezési lapra.
- A következő lapon kövesse az utasításokat, és jelentkezzen be a kiválasztott identitásszolgáltató fiókjával. Dönthet úgy is, hogy e-mail-címmel regisztrál vagy bejelentkezik egy helyi fiókba a B2C-bérlőn.
- A bejelentkezési folyamat sikeres befejezése után a rendszer átirányítja a kezdőlapra – amely a bejelentkezési állapotot jeleníti meg – vagy a jogkivonat részleteit tartalmazó lapra, attól függően, hogy melyik gomb váltotta ki a bejelentkezési folyamatot.
- Figyelje meg, hogy a környezetfüggő gomb most kijelentkezik , és megjeleníti a felhasználónevét.
- Ha a kezdőlapon van, válassza az Azonosító jogkivonat részletei lehetőséget az azonosító jogkivonat egyes dekódolt jogcímeinek megtekintéséhez.
- Szerkessze a profilját. Válassza a szerkesztési profilt a megjelenített név, a lakóhely és a foglalkozás adatainak módosításához.
- A kijelentkezéshez használja a sarokban lévő gombot. Az állapotlap az új állapotot tükrözi.
Tudnivalók a kódról
Ez a minta bemutatja, hogyan használhatja a Java-hoz készült Azure AD B2C Spring Boot Starter ügyfélkódtárat a felhasználók Azure AD B2C-bérlőbe való bejelentkezéséhez. A minta a Spring Oauth2-ügyfél- és Spring Web-rendszerindítókat is használja. A minta az Azure AD B2C-ből beszerzett azonosító jogkivonatból származó jogcímeket használja a bejelentkezett felhasználó adatainak megjelenítéséhez.
Tartalom
Az alábbi táblázat a mintaprojekt mappájának tartalmát mutatja be:
Fájl/mappa | Leírás |
---|---|
pom.xml | Alkalmazásfüggőségek. |
src/main/resources/templates/ | Thymeleaf Templates for UI. |
src/main/resources/application.yml | Alkalmazás- és Microsoft Entra Boot Starter-kódtár konfigurációja. |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Ez a könyvtár tartalmazza a fő alkalmazásbeléptetési pontot, vezérlőt és konfigurációs osztályokat. |
.../MsIdentitySpringBootWebappApplication.java | Főosztály. |
.../SampleController.java | Vezérlő végpontleképezésekkel. |
.../SecurityConfig.java | Biztonsági konfiguráció – például, hogy mely útvonalak igényelnek hitelesítést. |
.../Utilities.java | Segédprogramosztály – például szűrőazonosító-jogkivonat jogcímek. |
CHANGELOG.md | A minta módosításainak listája. |
CONTRIBUTING.md | Útmutató a mintához való hozzájáruláshoz. |
LICENC | A minta licence. |
Azonosító jogkivonat jogcíme
A jogkivonat részleteinek kinyeréséhez az alkalmazás a Spring Security AuthenticationPrincipal
és OidcUser
az objektum használatát használja egy kérelemleképezésben, ahogyan az az alábbi példában is látható. Az alkalmazás azonosítójogkivonat-jogcímek használatának részletes részleteiért tekintse meg a mintavezérlőt.
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Map<String, Object> claims = principal.getIdToken().getClaims();
}
Bejelentkezési és bejelentkezési hivatkozások
Bejelentkezés esetén az alkalmazás kérést küld az Azure AD B2C bejelentkezési végpontra, amelyet a Java-hoz készült Azure AD B2C Spring Boot Starter ügyfélkódtár automatikusan konfigurál, az alábbi példában látható módon:
<a class="btn btn-success" href="/oauth2/authorization/{your-sign-up-sign-in-user-flow}">Sign In</a>
Kijelentkezés esetén az alkalmazás POST kérést küld a logout
végpontra, ahogyan az a következő példában is látható:
<form action="#" th:action="@{/logout}" method="post">
<input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
Hitelesítéstől függő felhasználói felületi elemek
Az alkalmazás néhány egyszerű logikával rendelkezik a felhasználói felület sablonlapjain a megjelenítendő tartalom meghatározásához annak alapján, hogy a felhasználó hitelesítése megtörtént-e, ahogy az alábbi példában is látható, a Spring Security Thymeleaf-címkékkel:
<div sec:authorize="isAuthenticated()">
this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
this content only shows to not-authenticated users
</div>
Útvonalak védelme a WebSecurityConfigurerAdapterrel
Alapértelmezés szerint az alkalmazás védi az Azonosító jogkivonat részletei lapot, hogy csak a bejelentkezett felhasználók férhessenek hozzá. Az alkalmazás ezeket az útvonalakat a app.protect.authenticated
tulajdonságból konfigurálja a application.yml fájlból. Az alkalmazás konkrét követelményeinek konfigurálásához kiterjesztheti WebSecurityConfigurerAdapter
az egyik osztályát. Például tekintse meg az alkalmazás SecurityConfig osztályát, amely az alábbi kódban látható:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${app.protect.authenticated}")
private String[] protectedRoutes;
private final AADB2COidcLoginConfigurer configurer;
public SecurityConfig(AADB2COidcLoginConfigurer configurer) {
this.configurer = configurer;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.authorizeRequests()
.antMatchers(protectedRoutes).authenticated() // limit these pages to authenticated users (default: /token_details)
.antMatchers("/**").permitAll() // allow all other routes.
.and()
.apply(configurer)
;
// @formatter:off
}
}
További információ
- Microsoft Identitásplatform (Microsoft Entra-azonosító fejlesztőknek)
- A Microsoft Authentication Library (MSAL) áttekintése
- Gyorsútmutató: Alkalmazás regisztrálása a Microsoft Identitásplatformon
- Rövid útmutató: Ügyfélalkalmazás konfigurálása webes API-k eléréséhez
- 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
- Alkalmazás- és szolgáltatásfőobjektumok a Microsoft Entra ID-ban
- Nemzeti felhők
- MSAL-kódminták
- Microsoft Entra ID Spring Boot Starter ügyfélkódtár Java-hoz
- Azure Active Directory B2C Spring Boot Starter ügyfélkódtár Java-hoz
- Microsoft Authentication Library for Java (MSAL4J)
- MSAL4J Wiki
- Azonosító jogkivonatok
- Hozzáférési jogkivonatok a Microsoft Identitásplatform
További információ az OAuth 2.0 protokollok működéséről ebben a forgatókönyvben és más forgatókönyvekben: Hitelesítési forgatókönyvek a Microsoft Entra ID-hoz.