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

  1. Nyissa meg a következő címet: https://start.spring.io/.

  2. 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.

  3. 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éznieyourProject, é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

  1. Jelentkezzen be a https://portal.azure.com webhelyen.

  2. Válassza az Erőforrás létrehozása lehetőséget. Keresse meg az Azure Active Directory B2C-t.

    Hozzon létre új Azure Active Directory B2C-példányt az Azure Portal használatával.

  3. Válassza a Létrehozás lehetőséget.

    Azure Marketplace-bejegyzés az Azure Active Directory B2C-hez.

  4. Válassza az Új Azure AD B2C-bérlő létrehozása lehetőséget.

    Az Azure Portalon új Azure AD B2C-bérlőt hozhat létre.

  5. 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.

    Az Azure AD B2C Bérlő létrehozása képernyője.

  6. 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.

    Keresse meg az Azure AD B2C szolgáltatást.

Alkalmazásregisztráció hozzáadása a Spring Boot-alkalmazáshoz

  1. A Kezelés panelen válassza a Alkalmazásregisztrációk, majd az Új regisztráció lehetőséget.

    Képernyőkép az Azure Portalról, amelyen az Azure AD B2C Alkalmazásregisztrációk képernyő látható.

  2. A Név mezőbe írja be az alkalmazás nevét, majd válassza a Regisztráció lehetőséget.

    Az Azure AD B2C regisztrál egy alkalmazásűrlapot.

  3. A Kezelés panelen válassza a Alkalmazásregisztrációk lehetőséget, majd válassza ki a létrehozott alkalmazásnevet.

    Alkalmazásregisztrációk képernyő, amelyen ki van jelölve a megjelenítendő név.

  4. 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.

    A hitelesítéshez kiválasztott beállítások, platform és web hozzáadása.

    Webes képernyő konfigurálása az Átirányítási URI-k mező kiválasztásával.

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.

Titkos ügyfélkód hozzáadása képernyő.

Tanúsítványok és titkos kódok képernyő, a másolás gomb ki van jelölve.

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

  1. 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.

  2. 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 webapp1hivatkozik, 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.

  1. A parancssorból cd-n lépjen arra a könyvtárra, ahol kibontotta a Spring Initializrből letöltött .zip fájlt.

  2. Lépjen a projekt szülőmappájába, és nyissa meg a pom.xml Maven-projektfájlt egy szövegszerkesztőben.

  3. 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-b2clegújabb elérhető verziót. Lehetséges, hogy a mvnrepository.com használatával is megkeresheti ezt a lehetőséget.

    spring-boot-starter-thymeleafEhhez használja például a fent kiválasztott Spring Boot verziójának megfelelő verziót2.3.4.RELEASE.

    Ehhez thymeleaf-extras-springsecurity5haszná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

  4. Mentse és zárja be a pom.xml fájlt.

    • A futtatással mvn -DskipTests clean installellenőrizze, hogy a függőségek helyesek-e. Ha nem látja BUILD SUCCESS, a folytatás előtt hárítsa el és oldja meg a problémát.
  5. Lépjen a projekt src/main/resources mappájába, és hozzon létre egy application.yml fájlt egy szövegszerkesztőben.

  6. 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.

  7. Mentse és zárja be az application.yml fájlt.

  8. 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.

  9. Hozzon létre egy új, WebController.java nevű fájlt a controller mappában, majd nyissa meg egy szövegszerkesztőben.

  10. Í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 visszaadott user.getAttributes() értékek valójában a hitelesítés jogcímei id_token . Az elérhető jogcímek teljes listája Microsoft Identitásplatform azonosító jogkivonatokban található.

  11. 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.

  12. Hozzon létre egy új, WebSecurityConfiguration.java nevű fájlt a security mappában, majd nyissa meg egy szövegszerkesztőben.

  13. Í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)
            ;
        }
    }
    
  14. 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

  1. 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ó.

  2. 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:10Zhasonló 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
    
  3. 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.

    Webalkalmazás bejelentkezési lapja.

  4. 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.

  5. Miután sikeresen bejelentkezett, látnia kell a mintát home page a böngészőből,

    A webalkalmazás sikeres bejelentkezése.

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.