Bejelentkezés hozzáadása az Azure Active Directory B2C-vel egy Spring-webalkalmazáshoz
Ez a cikk bemutatja, hogyan hozhat létre bejelentkezési képességgel rendelkező Java-alkalmazást a Spring Initializr és a Microsoft Entra ID Spring Boot Starter használatával.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Java-alkalmazás létrehozása a Spring Initializr segítségével
- Az Azure Active Directory B2C konfigurálása
- Az alkalmazás védelme Spring Boot-osztályokkal és-megjegyzésekkel
- A Java-alkalmazás összeállítása és tesztelése
A Microsoft Entra ID a Microsoft felhőalapú vállalati identitásmegoldása. Az Azure Active Directory B2C kiegészíti a Microsoft Entra-azonosító funkciókészletét, amely lehetővé teszi az ügyfelek, a fogyasztók és a polgárok hozzáférésének kezelését a vállalatközi (B2C) alkalmazásokhoz.
Előfeltételek
- Azure-előfizetés. Ha még nem rendelkezik ilyen fiókkal, a kezdés előtt hozzon létre egy ingyenes fiókot .
- Egy támogatott Java fejlesztői készlet (JDK). Az Azure-beli fejlesztés során használható JDK-król további információt az Azure-ban és az Azure Stackben elérhető Java-támogatásban talál.
- Apache Maven, 3.0-s vagy újabb verzió.
Fontos
A cikkben ismertetett lépések elvégzéséhez a Spring Boot 2.5-ös vagy újabb verziójára van szükség.
Alkalmazás létrehozása a Spring Initializr használatával
Nyissa meg a következő címet: https://start.spring.io/.
Töltse ki az értékeket az útmutatónak megfelelően. A címkék és az elrendezés eltérhet az itt láthatótól.
- A Projekt területen válassza a Maven Project lehetőséget.
- A Nyelv területen válassza a Java lehetőséget.
- A Spring Boot alatt válassza a 2.7.11-et.
- A Csoportosítás csoportban az Összetevő és a Név mezőbe írja be ugyanazt az értéket egy rövid leíró sztring használatával. Előfordulhat, hogy a felhasználói felület gépelés közben automatikusan kitölt néhány mezőt.
- A Függőségek panelen válassza a Függőségek hozzáadása lehetőséget. A felhasználói felületen függőségeket adhat a Spring Webhez és a Spring Securityhez.
Feljegyzés
A Spring Security 5.5.1- és 5.4.7-es, 5.3.10-es és 5.2.11-es verziójának kiadásával a következő CVE-jelentés , a CVE-2021-22119: Szolgáltatásmegtagadásos támadás a spring-security-oauth2-client használatával. Ha a régebbi verziót használja, frissítse azt.
Válassza a Projekt létrehozása lehetőséget, majd töltse le a projektet a helyi számítógépen található elérési útra. Helyezze át a letöltött fájlt a projektről elnevezett könyvtárba, és bontsa ki a fájlt. A fájlelrendezésnek az alábbihoz hasonlóan kell kinéznie
yourProject
, és a Csoport helyett a megadott értéknek kell lennie.. ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main │ ├── java │ │ └── yourProject │ │ └── yourProject │ │ └── YourProjectApplication.java │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── java └── yourProject └── yourProject └── YourProjectApplicationTests.java
Microsoft Entra-példány létrehozása és inicializálása
Az Active Directory-példány létrehozása
Jelentkezzen be a https://portal.azure.com webhelyen.
Válassza az Erőforrás létrehozása lehetőséget. Keresse meg az Azure Active Directory B2C-t.
Válassza a Létrehozás lehetőséget.
Válassza az Új Azure AD B2C-bérlő létrehozása lehetőséget.
A szervezetnév és a kezdeti tartománynév esetében adja meg a megfelelő értékeket, majd válassza a Létrehozás lehetőséget.
Amikor az Active Directory létrehozása befejeződött, válassza ki a fiókját a jobb felső sarokban, válassza a Címtárváltás lehetőséget, majd válassza ki a létrehozott könyvtárat. A rendszer átirányítja az új bérlő kezdőlapjára. Ezután keresse meg és válassza ki az
b2c
Azure AD B2C-t.
Alkalmazásregisztráció hozzáadása a Spring Boot-alkalmazáshoz
A Kezelés panelen válassza a Alkalmazásregisztrációk, majd az Új regisztráció lehetőséget.
A Név mezőbe írja be az alkalmazás nevét, majd válassza a Regisztráció lehetőséget.
A Kezelés panelen válassza a Alkalmazásregisztrációk lehetőséget, majd válassza ki a létrehozott alkalmazásnevet.
Válassza a Hitelesítés lehetőséget, majd a Platform hozzáadása, majd a Web lehetőséget. Állítsa az átirányítási URI-kat a beállításra
http://localhost:8080/login/oauth2/code/
, majd válassza a Konfigurálás lehetőséget.
Alkalmazás titkos kulcsainak hozzáadása az alkalmazáshoz
Válassza a Tanúsítványok > titkos kulcsok, majd az Új ügyfélkódok lehetőséget. Adja meg a titkos kód leírását, majd válassza a Hozzáadás lehetőséget. A titkos kód létrehozása után válassza a titkos kulcs melletti másolás ikont a cikk későbbi részében használandó érték másolásához.
Feljegyzés
Ha elhagyja a Tanúsítványok > titkos kulcsok szakaszt, és visszatér, nem fogja látni a titkos kulcs értékét. Ebben az esetben létre kell hoznia egy másik titkos kulcsot, és ki kell másolnia későbbi használatra. Előfordulhat, hogy a létrehozott titkos kódérték olyan karaktereket tartalmaz, amelyek problémásak a application.yml fájlba való felvételhez, például fordított perjel vagy backtick. Ebben az esetben dobja el ezt a titkos kulcsot, és hozzon létre egy másikat.
Felhasználói folyamat hozzáadása
Lépjen a bérlő főoldalára. A bal oldali panel Házirendek szakaszában válassza a Felhasználói folyamatok, majd az Új felhasználói folyamat lehetőséget.
Most elhagyja ezt az oktatóanyagot, végrehajt egy másik oktatóanyagot, és visszatér ehhez az oktatóanyaghoz, amikor elkészült. Íme néhány dolog, amit szem előtt kell tartani, amikor a másik oktatóanyagra jár.
- Kezdje az Új felhasználói folyamat kiválasztását kérő lépéssel.
- Ha ez az oktatóanyag arra
webapp1
hivatkozik, használja inkább a csoporthozmegadott értéket. - Amikor a folyamatokból való visszatérésre vonatkozó jogcímeket választja ki, győződjön meg arról, hogy a Megjelenítendő név ki van jelölve. E jogcím nélkül az oktatóanyagban létrehozott alkalmazás nem fog működni.
- Amikor a rendszer felkéri a felhasználói folyamatok futtatására, a korábban megadott átirányítási URL még nem aktív. Továbbra is futtathatja a folyamatokat, de az átirányítás nem fejeződik be sikeresen. Ez várható.
- A "Következő lépések" elérésekor térjen vissza ehhez az oktatóanyaghoz.
Kövesse az oktatóanyag összes lépését : Felhasználói folyamatok létrehozása az Azure Active Directory B2C-ben a felhasználói folyamatok létrehozásához a "regisztráció és bejelentkezés", a "profilszerkesztés" és a "jelszó-visszaállítás" számára.
Az Azure AD B2C támogatja a helyi fiókokat és a közösségi identitásszolgáltatókat. GitHub-identitásszolgáltató létrehozására példa: A regisztráció és a bejelentkezés beállítása GitHub-fiókkal az Azure Active Directory B2C használatával.
Az alkalmazás konfigurálása és fordítása
Most, hogy létrehozta az Azure AD B2C-példányt és néhány felhasználói folyamatot, csatlakoztatni fogja a Spring-alkalmazást az Azure AD B2C-példányhoz.
A parancssorból cd-n lépjen arra a könyvtárra, ahol kibontotta a Spring Initializrből letöltött .zip fájlt.
Lépjen a projekt szülőmappájába, és nyissa meg a pom.xml Maven-projektfájlt egy szövegszerkesztőben.
Adja hozzá a Spring OAuth2 biztonsági függőségeit a pom.xml:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory-b2c</artifactId> <version>See Below</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>See Below</version> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> <version>See Below</version> </dependency>
Ehhez használja a
spring-cloud-azure-starter-active-directory-b2c
legújabb elérhető verziót. Lehetséges, hogy a mvnrepository.com használatával is megkeresheti ezt a lehetőséget.spring-boot-starter-thymeleaf
Ehhez használja például a fent kiválasztott Spring Boot verziójának megfelelő verziót2.3.4.RELEASE
.Ehhez
thymeleaf-extras-springsecurity5
használja a legújabb elérhető verziót. Lehetséges, hogy a mvnrepository.com használatával is megkeresheti ezt a lehetőséget. Mivel ez az írás, a legújabb verzió.3.0.4.RELEASE
Mentse és zárja be a pom.xml fájlt.
- A futtatással
mvn -DskipTests clean install
ellenőrizze, hogy a függőségek helyesek-e. Ha nem látjaBUILD SUCCESS
, a folytatás előtt hárítsa el és oldja meg a problémát.
- A futtatással
Lépjen a projekt src/main/resources mappájába, és hozzon létre egy application.yml fájlt egy szövegszerkesztőben.
Adja meg az alkalmazásregisztráció beállításait a korábban létrehozott értékek használatával. Például:
spring: cloud: azure: active-directory: b2c: enabled: true base-uri: https://<your-tenant-initial-domain-name>.b2clogin.com/<your-tenant-initial-domain-name>.onmicrosoft.com/ credential: client-id: <your-application-ID> client-secret: '<secret-value>' login-flow: sign-up-or-sign-in logout-success-url: <your-logout-success-URL> user-flows: sign-up-or-sign-in: <your-sign-up-or-sign-in-user-flow-name> profile-edit: <your-profile-edit-user-flow-name> password-reset: <your-password-reset-user-flow-name> user-name-attribute-name: <your-user-name-attribute-name>
Figyelje meg, hogy az
client-secret
érték egyetlen idézőjelben van megadva. Erre azért van szükség, mert az érték<secret-value>
szinte biztosan tartalmaz bizonyos karaktereket, amelyek megkövetelik, hogy belül egyetlen idézőjelek, ha jelen van a YAML- ben.Feljegyzés
Ebben az írásban az Active Directory B2C Spring Integration-értékek teljes listája, amely application.yml használható, a következő:
spring: cloud: azure: active-directory: b2c: enabled: true base-uri: credential: client-id: client-secret: login-flow: logout-success-url: user-flows: sign-up-or-sign-in: profile-edit: # optional password-reset: # optional user-name-attribute-name:
A application.yml fájl a spring-cloud-azure-starter-active-directory-b2c mintában érhető el: aad-b2c-web-application a GitHubon.
Mentse és zárja be az application.yml fájlt.
Hozzon létre egy vezérlő nevű mappát az src/main/java/<yourGroupId/<yourGroupId>> fájlban, és cserélje le
<yourGroupId>
a csoporthoz megadott értékkel.Hozzon létre egy új, WebController.java nevű fájlt a controller mappában, majd nyissa meg egy szövegszerkesztőben.
Írja be a következő kódot, módosítsa
yourGroupId
megfelelően, majd mentse és zárja be a fájlt:package yourGroupId.yourGroupId.controller; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class WebController { private void initializeModel(Model model, OAuth2AuthenticationToken token) { if (token != null) { final OAuth2User user = token.getPrincipal(); model.addAttribute("grant_type", user.getAuthorities()); model.addAllAttributes(user.getAttributes()); } } @GetMapping(value = "/") public String index(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "home"; } @GetMapping(value = "/greeting") public String greeting(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "greeting"; } @GetMapping(value = "/home") public String home(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "home"; } }
Mivel a vezérlő minden metódusa meghívja
initializeModel()
és meghívja a metódustmodel.addAllAttributes(user.getAttributes());
, az src/main/resources/templates bármely HTML-lapja hozzáférhet ezen attribútumok bármelyikéhez, például${name}
: ,${grant_type}
vagy${auth_time}
. A visszaadottuser.getAttributes()
értékek valójában a hitelesítés jogcímeiid_token
. Az elérhető jogcímek teljes listája Microsoft Identitásplatform azonosító jogkivonatokban található.Hozzon létre egy biztonsági nevű mappát az src/main/java/<yourGroupId/<yourGroupId>> fájlban, és cserélje le
yourGroupId
a csoporthoz megadott értékre.Hozzon létre egy új, WebSecurityConfiguration.java nevű fájlt a security mappában, majd nyissa meg egy szövegszerkesztőben.
Írja be a következő kódot, módosítsa
yourGroupId
megfelelően, majd mentse és zárja be a fájlt:package yourGroupId.yourGroupId.security; import com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cOidcLoginConfigurer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { private final AadB2cOidcLoginConfigurer configurer; public WebSecurityConfiguration(AadB2cOidcLoginConfigurer configurer) { this.configurer = configurer; } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest() .authenticated() .and() .apply(configurer) ; } }
Másolja a home.html fájlt a spring-cloud-azure-starter-active-directory-b2c mintából: aad-b2c-web-application az src/main/resources/templates fájlba, és cserélje le a
${your-password-reset-user-flow}
${your-profile-edit-user-flow}
korábban létrehozott felhasználói folyamatok nevét.
Az alkalmazás összeállítása és tesztelése
Nyisson meg egy parancssort, és váltson a címtár azon mappájára, ahol az alkalmazás pom.xml fájlja található.
Készítse el a Spring Boot-alkalmazást a Maven használatával, majd futtassa azt, például:
Feljegyzés
Rendkívül fontos, hogy a rendszerórának megfelelő idő, amely alatt a helyi spring boot alkalmazás fut, pontos legyen. Az OAuth 2.0 használatakor az óraeltérés nagyon kis tűréshatárt jelent. Akár három percnyi pontatlanság is okozhatja, hogy a bejelentkezés a következőhöz
[invalid_id_token] An error occurred while attempting to decode the Jwt: Jwt used before 2020-05-19T18:52:10Z
hasonló hibával meghiúsul. Mivel ez az írás, time.gov van egy mutató, hogy milyen messze van az óra a tényleges idő. Az alkalmazás sikeresen lefutott +0,019 másodperces eltéréssel.mvn -DskipTests clean package mvn -DskipTests spring-boot:run
Miután az alkalmazást felépítette és elindította a Mavenben, nyissa meg a
http://localhost:8080/
címet egy webböngészőben. Ekkor a bejelentkezési oldalra kerül.Válassza ki a bejelentkezéshez kapcsolódó szöveget tartalmazó hivatkozást. A hitelesítési folyamat elindításához átirányítani kell az Azure AD B2C-t.
Miután sikeresen bejelentkezett, látnia kell a mintát
home page
a böngészőből,
Hibaelhárítás
A következő szakaszok ismertetik, hogyan oldhatók meg az esetlegesen felmerülő problémák.
Hiányzó attribútumnév az attribútumokban
A minta futtatása közben előfordulhat, hogy kivételt kap az üzenettel Missing attribute 'name' in attributes
. A kivétel naplója a következő kimenethez hasonlóan fog kinézni:
java.lang.IllegalArgumentException: Missing attribute 'name' in attributes
at org.springframework.security.oauth2.core.user.DefaultOAuth2User.<init>(DefaultOAuth2User.java:67) ~[spring-security-oauth2-core-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser.<init>(DefaultOidcUser.java:89) ~[spring-security-oauth2-core-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService.loadUser(OidcUserService.java:144) ~[spring-security-oauth2-client-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService.loadUser(OidcUserService.java:63) ~[spring-security-oauth2-client-5.3.6.RELEASE.jar:5.3.6.RELEASE]
Ha ezt a hibát kapja, ellenőrizze duplán az oktatóanyagban létrehozott felhasználói munkafolyamatot: Felhasználói folyamatok létrehozása az Azure Active Directory B2C-ben. A felhasználói munkafolyamat létrehozásakor a felhasználói attribútumok és jogcímek esetében mindenképpen válasszon attribútumokat és jogcímeket a megjelenítendő névhez. Emellett ügyeljen arra, hogy megfelelően konfigurálja user-name-attribute-name
a application.yml fájlban.
Bejelentkezés hurkokkal a B2C-végpontra
Ezt a problémát valószínűleg a környezetszennyezett cookie-k okozza.localhost
Törölje a cookie-kat, localhost
és próbálkozzon újra.
Összegzés
Ebben az oktatóanyagban létrehozott egy új Java-webalkalmazást az Azure Active Directory B2C starter használatával, konfigurált egy új Azure AD B2C-bérlőt, és regisztrált benne egy új alkalmazást, majd úgy konfigurálta az alkalmazást, hogy a Spring-széljegyzetek és -osztályok használatával védje a webalkalmazást.
Az erőforrások eltávolítása
Ha már nincs rájuk szüksége, az Azure Portalon törölheti a cikkhez létrehozott erőforrásokat a váratlan költségek elkerülése érdekében.
Következő lépések
Ha szeretne többet megtudni a Spring és az Azure szolgáltatásról, lépjen tovább a Spring on Azure dokumentációs központra.
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: