Megosztás a következőn keresztül:


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 Spring Initializr a Microsoft Entra-azonosítóhoz készült Spring Boot Starter használatával.

Ebben az oktatóanyagban a következőket sajátíthatja el:

  • Java-alkalmazás létrehozása a Spring Initializr használatával
  • Az Azure Active Directory B2C konfigurálása
  • Az alkalmazás védelme Spring Boot-osztályokkal és széljegyzetekkel
  • Java-alkalmazás létrehozása és tesztelése

Microsoft Entra ID a Microsoft felhőalapú vállalati identitáskezelési megoldása. 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

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. Ugrás a https://start.spring.io/-hoz.

  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 Projectterületen válassza Maven Projectlehetőséget.
    • A Nyelvalatt válassza a Javalehetőséget.
    • A Spring Bootalatt válassza a 2.7.11lehetőséget.
    • A csoport, a összetevő és a név mezőbe is írja be ugyanazt az értéket egy rövid leíró szöveggel. 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ásalehetőséget. A felhasználói felületen adjon hozzá függőségeket: Spring Web és Spring Security.

    Jegyzet

    A Spring Security 5.5.1, 5.4.7, 5.3.10 és 5.2.11 verziókat kiadták a következő CVE-jelentés kezelése érdekében: 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 Projekt létrehozásalehető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, az Ön által megadott csoport értéke pedig yourProjecthelyére kerül.

    .
    ├── 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 https://portal.azure.com.

  2. Válassza az Erőforrás létrehozásalehetőséget. Keressen Azure Active Directory B2C.

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

  3. Válassza létrehozása lehetőséget.

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

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

    új Azure AD B2C-bérlő létrehozása az Azure Portalban.

  5. Szervezetnév és Kezdeti tartománynévesetén adja meg a megfelelő értékeket, majd válassza a létrehozása lehetőséget.

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

  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 Könyvtárváltáslehető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 keressen b2c, és válassza Azure AD B2C.

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

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

  1. A kezelése panelen válassza az Alkalmazásregisztrációklehetőséget, majd válassza Új regisztrációslehető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őben adja meg az alkalmazás nevét, majd válassza a Regisztráláslehetőséget.

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

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

    Alkalmazásregisztrációk képernyő, amelyen a megjelenített név van kiválasztva.

  4. Válassza a Hitelesítéslehetőséget, majd a Platform hozzáadása és végül a Weblehetőséget. Állítsa a Átirányítási URI-khttp://localhost:8080/login/oauth2/code/értékre, majd válassza a konfigurálása lehetőséget.

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

    Webes képernyő konfigurálása a kijelölt Átirányítási URI-mezővel.

Alkalmazás titkos kulcsainak hozzáadása az alkalmazáshoz

Válassza tanúsítványok & titkos kulcsok, majd Új titkos ügyfélkódok. Adja meg a titkos kód leírását, majd válassza a hozzáadása 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.

Ügyféltitok képernyő hozzáadása.

Tanúsítványok és titkos kódok képernyő, amelyen a Másolás gomb van kiválasztva.

Jegyzet

Ha elhagyja a tanúsítványok & titkos kulcsok szakaszt, és visszatér, nem fogja látni a titkos értéket. 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 érték olyan karaktereket tartalmaz, amelyek problémát okozhatnak a application.yml fájlba való beillesztéskor, például fordított perjel vagy fordított aposztróf. 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 folyamatoklehetőséget, majd válassza Új felhasználói folyamatlehető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 mész.

    • Kezdje azzal a lépéssel, amely Új felhasználói folyamatkiválasztását kéri.
    • Amikor ez az oktatóanyag webapp1-ra hivatkozik, használja inkább a csoport megadott értékét.
    • Amikor a folyamatokból való visszatérésre vonatkozó jogcímeket választja ki, győződjön meg arról, hogy Megjelenítendő név van kiválasztva. 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 oktatóanyag összes lépését: Felhasználói folyamatok létrehozása az Azure Active Directory B2C-ben felhasználói folyamatok létrehozásához a "regisztráció és bejelentkezés", a "profilszerkesztés" és a "jelszó-visszaállítás" érdekében.

    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: Regisztráció és bejelentkezés beállítása GitHub-fiókkal az Azure Active Directory B2Chaszná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 a könyvtárba, 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ág 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>
    

    A(z) spring-cloud-azure-starter-active-directory-b2c-hoz, használja a legújabb elérhető verziót. Lehetséges, hogy a mvnrepository.com használatával is megkeresheti ezt.

    A(z) spring-boot-starter-thymeleafesetében használja a fent kiválasztott Spring Boot verziójának megfelelő verziót, például 2.3.4.RELEASE.

    A thymeleaf-extras-springsecurity5esetén használd a legújabb elérhető verziót. Lehetséges, hogy a mvnrepository.com használatával is megkeresheti ezt. A jelen írás idején a legújabb verzió a 3.0.4.RELEASE.

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

    • A mvn -DskipTests clean installfuttatásával ellenőrizze, hogy a függőségek helyesek-e. Ha nem látja BUILD SUCCESS, a folytatás előtt oldja meg és hárítsa el a problémát.
  5. Lépjen a projekt src/main/resources mappájára, é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ékekkel; 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 a client-secret érték egyetlen idézőjelben van megadva. Erre azért van szükség, mert a <secret-value> értéke szinte biztosan tartalmaz néhány karaktert, amelyeknél a YAML-ben való megjelenítéshez egyetlen idézőjelre van szükség.

    Jegyzet

    Az írástól kezdődően az Active Directory B2C Spring Integration-értékek teljes listája, amelyek application.yml használhatók, a következők:

    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 GitHubon a spring-cloud-azure-starter-active-directory-b2c mintában érhető el: aad-b2c-web-application.

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

  8. Hozzon létre egy vezérlő nevű mappát asrc/main/java/<yourGroupId>/<yourGroupId>könyvtárban, és cserélje le a <yourGroupId>-at a Csoportmegadott értékére.

  9. Hozzon létre egy WebController.java nevű új Java-fájlt a vezérlőben mappában, és nyissa meg egy szövegszerkesztőben.

  10. Írja be a következő kódot, módosítsa a 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 ez a metódus meghívja model.addAllAttributes(user.getAttributes());, a 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 user.getAttributes() visszaadott értékek valójában a hitelesítés id_token igényei. Az elérhető jogcímek teljes listája Microsoft identitásplatform-azonosító jogkivonataiban.

  11. Hozzon létre egy biztonság nevű mappát a src/main/java/ mappában a<yourGroupId>/<yourGroupId>útvonalon, helyettesítve a yourGroupId helyértékét a Csoportszámára megadott értékkel.

  12. Hozzon létre egy WebSecurityConfiguration.java nevű új Java-fájlt a biztonsági mappában, és nyissa meg egy szövegszerkesztőben.

  13. Írja be a következő kódot, módosítsa a 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 spring-cloud-azure-starter-active-directory-b2c mintából: aad-b2c-web-applicationsrc/main/resources/templates, és cserélje le a ${your-profile-edit-user-flow} és ${your-password-reset-user-flow} a korábban létrehozott felhasználói folyamatok nevére.

Az alkalmazás létrehozása és tesztelése

  1. Nyisson meg egy parancssort, és módosítsa a könyvtárat arra a mappára, amelyben az alkalmazás pom.xml fájlja található.

  2. Hozza létre Spring Boot-alkalmazását a Mavennel, és futtassa; például:

    Jegyzet

    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 időbeli pontatlanság is okozhatja, hogy a bejelentkezés egy a [invalid_id_token] An error occurred while attempting to decode the Jwt: Jwt used before 2020-05-19T18:52:10Zhibához hasonló hibával sikertelen lehet. Jelen pillanatban a time.gov oldalon van egy jelző arról, hogy az órád mennyire tér el a tényleges időtől. Az alkalmazás sikeresen lefutott +0,019 másodperces eltéréssel.

    mvn -DskipTests clean package
    mvn -DskipTests spring-boot:run
    
  3. Miután a Maven elkészítette és elindította az alkalmazást, nyissa meg a http://localhost:8080/ egy webböngészőben; a bejelentkezési oldalra kell átirányítani.

    webalkalmazás bejelentkezési lapját.

  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 böngészőben megjelenő minta home page-t.

    Webalkalmazás sikeres bejelentkezés.

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 kivétel fordulhat elő a Missing attribute 'name' in attributesüzenettel. 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 a oktatóanyagban létrehozott felhasználói munkafolyamatot: Felhasználói folyamatok létrehozása az Azure Active Directory B2C. A felhasználói munkafolyamat létrehozásakor a Felhasználói attribútumok és jogcímekesetében mindenképpen válassza ki a megfelelő attribútumokat és jogcímeket a Megjelenítendő névhez. Emellett ügyeljen arra, hogy megfelelően konfigurálja a user-name-attribute-name a application.yml fájlban.

Bejelentkezés hurkokkal a B2C-végpontra

Ez a probléma valószínűleg a localhostkörnyezetszennyezett cookie-jának köszönhető. Törölje a localhost cookie-kat, és próbálkozzon újra.

Összefoglalá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.

Erőforrások törlése

Ha már nincs rá szükség, a Azure Portal használatával törölheti a cikkben létrehozott erőforrásokat a váratlan költségek elkerülése érdekében.

Következő lépések

Ha többet szeretne megtudni a Springről és az Azure-ról, lépjen tovább a Spring on Azure dokumentációs központjába.