Zabezpečení aplikací Java Spring Boot pomocí Azure Active Directory B2C
Tento článek ukazuje webovou aplikaci Java Spring Boot, která přihlašuje uživatele ve vašem tenantovi Azure Active Directory B2C pomocí klientské knihovny Azure AD B2C Spring Boot Starter pro Javu. Používá protokol OpenID Connect.
Následující diagram znázorňuje topologii aplikace:
Klientská aplikace používá klientskou knihovnu Azure AD B2C Spring Boot Starter pro Javu k přihlášení uživatele a získání tokenu ID z Azure AD B2C. Token ID prokáže, že se uživatel ověřuje pomocí Azure AD B2C a umožňuje uživateli přístup k chráněným trasám.
Požadavky
- JDK verze 15. Tato ukázka byla vyvinuta v systému s Javou 15, ale může být kompatibilní s jinými verzemi.
- Maven 3
- Pro spuštění této ukázky v editoru Visual Studio Code se doporučuje sada Java Extension Pack pro Visual Studio Code .
- Tenant Azure AD B2C. Další informace najdete v tématu Kurz: Vytvoření tenanta Azure Active Directory B2C
- Visual Studio Code
- Azure Tools for Visual Studio Code
Doporučení
- Znalost spring frameworku
- Znalost terminálu Linux/OSX
- jwt.ms pro kontrolu tokenů.
- Fiddler pro monitorování síťové aktivity a řešení potíží.
- Sledujte blog Microsoft Entra ID a sledujte aktuální informace o nejnovějším vývoji.
Nastavení ukázky
Následující části ukazují, jak nastavit ukázkovou aplikaci.
Klonování nebo stažení ukázkového úložiště
Pokud chcete ukázku naklonovat, otevřete okno Bash a použijte následující příkaz:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/1-Authentication/sign-in-b2c
Případně přejděte do úložiště ms-identity-msal-java-samples , stáhněte si ho jako .zip soubor a extrahujte ho na pevný disk.
Důležité
Abyste se vyhnuli omezením délky cesty k souboru ve Windows, naklonujte nebo extrahujte úložiště do adresáře poblíž kořenového adresáře pevného disku.
Tato ukázka se dodává s předem rezervovanou aplikací pro ukázkové účely. Pokud chcete použít vlastního tenanta a aplikaci Azure AD B2C, zaregistrujte a nakonfigurujte aplikaci na webu Azure Portal. Další informace najdete v části Registrace aplikace . V opačném případě pokračujte kroky v části Spustit ukázku .
Zvolte tenanta Azure AD B2C, ve kterém chcete vytvářet aplikace.
Pokud chcete zvolit tenanta, postupujte následovně:
Přihlaste se k portálu Azure.
Pokud je váš účet ve více než jednom tenantovi Azure AD B2C, vyberte svůj profil v rohu webu Azure Portal a pak vyberte Přepnout adresář a změňte relaci na požadovaného tenanta Azure AD B2C.
Vytváření toků uživatelů a vlastních zásad
Pokud chcete vytvářet běžné toky uživatelů, jako je registrace, přihlášení, úprava profilu a resetování hesla, přečtěte si kurz : Vytváření toků uživatelů v Azure Active Directory B2C.
Měli byste zvážit také vytváření vlastních zásad v Azure Active Directory B2C. Tento úkol je však nad rámec tohoto kurzu. Další informace najdete v tématu Přehled vlastních zásad Azure AD B2C.
Přidání externích zprostředkovatelů identity
Viz kurz: Přidání zprostředkovatelů identity do aplikací v Azure Active Directory B2C
Registrace aplikace (java-spring-webapp-auth-b2c)
Aplikaci zaregistrujete pomocí následujících kroků:
Přejděte na web Azure Portal a vyberte Azure AD B2C.
V navigačním podokně vyberte Registrace aplikací a pak vyberte Nová registrace.
Na stránce Zaregistrovat aplikaci, která se zobrazí, zadejte následující informace o registraci aplikace:
- V části Název zadejte smysluplný název aplikace pro zobrazení uživatelům aplikace ,
java-spring-webapp-auth-b2c
například . - V sekci Podporované typy účtů vyberte Účty u libovolného zprostředkovatele identity nebo organizačního adresáře (pro ověřování uživatelů pomocí toků uživatelů).
- V části Identifikátor URI přesměrování (volitelné) vyberte v poli se seznamem web a zadejte následující identifikátor URI přesměrování:
http://localhost:8080/login/oauth2/code/
.
- V části Název zadejte smysluplný název aplikace pro zobrazení uživatelům aplikace ,
Výběrem možnosti Registrovat aplikaci vytvořte.
Na stránce registrace aplikace vyhledejte a zkopírujte hodnotu ID aplikace (klienta), kterou chcete použít později. Tuto hodnotu použijete v konfiguračním souboru nebo souborech vaší aplikace.
Výběrem možnosti Uložit uložte změny.
Na stránce registrace aplikace vyberte podokno Certifikáty a tajné kódy v navigačním podokně. Otevře se stránka pro generování tajných kódů a nahrání certifikátů.
V části Tajné klíče klienta vyberte Nový tajný klíč klienta.
Zadejte popis – například tajný kód aplikace.
Vyberte jednu zdostupnýchchm prostředkům ( například Za 2 roky).
Vyberte Přidat. Zobrazí se vygenerovaná hodnota.
Zkopírujte a uložte vygenerovanou hodnotu pro použití v dalších krocích. Tuto hodnotu potřebujete pro konfigurační soubory kódu. Tato hodnota se znovu nezobrazí a nemůžete ji načíst žádným jiným způsobem. Před přechodem na jinou obrazovku nebo podokno si ho proto nezapomeňte uložit z webu Azure Portal.
Konfigurace aplikace (java-spring-webapp-auth-b2c) pro použití registrace aplikace
Ke konfiguraci aplikace použijte následující postup:
Poznámka:
V následujících krocích ClientID
je stejný jako Application ID
nebo AppId
.
Otevřete projekt v integrovaném vývojovém prostředí (IDE).
Otevřete soubor src/main/resources/application.yml.
client-id
Najděte vlastnost a nahraďte existující hodnotu ID aplikace neboclientId
java-spring-webapp-auth-b2c
aplikace z webu Azure Portal.client-secret
Najděte vlastnost a nahraďte existující hodnotu hodnotou, kterou jste uložili při vytvářeníjava-spring-webapp-auth-b2c
aplikace z webu Azure Portal.base-uri
Najděte vlastnost a nahraďte dvě instance hodnotyfabrikamb2c
názvem tenanta Azure AD B2C, ve kterém jste aplikaci vytvořilijava-spring-webapp-auth-b2c
na webu Azure Portal.sign-up-or-sign-in
Najděte vlastnost a nahraďte ji názvem zásady toku přihlašování a přihlašování uživatele, které jste vytvořili v tenantovi Azure AD B2C, ve kterém jste aplikaci vytvořilijava-spring-webapp-auth-b2c
na webu Azure Portal.profile-edit
Najděte vlastnost a nahraďte ji názvem zásady toku uživatele resetování hesla, které jste vytvořili v tenantovi Azure AD B2C, ve kterém jste aplikaci vytvořilijava-spring-webapp-auth-b2c
na webu Azure Portal.password-reset
Najděte vlastnost a nahraďte ji názvem zásady toku uživatele profilu úprav, které jste vytvořili v tenantovi Azure AD B2C, ve kterém jste aplikaci vytvořilijava-spring-webapp-auth-b2c
na webu Azure Portal.Otevřete soubor src/main/resources/templates/navbar.html.
Vyhledejte odkazy na toky
b2c_1_susi
ab2c_1_edit_profile
nahraďte je vašimisign-up-sign-in
aprofile-edit
uživatelskými toky.
Spuštění ukázky
Následující části ukazují, jak nasadit ukázku do Azure Container Apps.
Požadavky
- Účet Azure. Pokud žádné nemáte, vytvořte si bezplatný účet. K pokračování potřebujete oprávnění přispěvatele nebo vlastníka předplatného Azure. Další informace viz Přiřazení rolí Azure pomocí webu Azure Portal.
- Rozhraní příkazového řádku Azure.
- Rozšíření Azure Container Apps CLI, verze
0.3.47
nebo vyšší Pokud chcete nainstalovat nejnovější verzi, použijteaz extension add --name containerapp --upgrade --allow-preview
příkaz. - Sada Java Development Kit verze 17 nebo vyšší.
- Maven.
Příprava projektu Spring
Pomocí následujících kroků připravte projekt:
K sestavení projektu použijte následující příkaz Mavenu :
mvn clean verify
Spusťte ukázkový projekt místně pomocí následujícího příkazu:
mvn spring-boot:run
Nastavení
Pokud se chcete přihlásit k Azure z rozhraní příkazového řádku, spusťte následující příkaz a podle pokynů dokončete proces ověřování.
az login
Pokud chcete zajistit, že používáte nejnovější verzi rozhraní příkazového řádku, spusťte příkaz upgrade.
az upgrade
Dále nainstalujte nebo aktualizujte rozšíření Azure Container Apps pro rozhraní příkazového řádku.
Pokud se při spouštění az containerapp
příkazů v Azure CLI zobrazí chyby týkající se chybějících parametrů, ujistěte se, že máte nainstalovanou nejnovější verzi rozšíření Azure Container Apps.
az extension add --name containerapp --upgrade
Poznámka:
Od května 2024 už rozšíření Azure CLI ve výchozím nastavení nepovolují funkce ve verzi Preview. Pokud chcete získat přístup k funkcím Container Apps ve verzi Preview, nainstalujte rozšíření Container Apps pomocí --allow-preview true
nástroje .
az extension add --name containerapp --upgrade --allow-preview true
Teď, když je nainstalované aktuální rozšíření nebo modul, zaregistrujte obory Microsoft.App
názvů a Microsoft.OperationalInsights
obory názvů.
Poznámka:
Prostředky Azure Container Apps se migrovaly z Microsoft.Web
oboru názvů do Microsoft.App
oboru názvů. Další podrobnosti najdete v tématu Migrace oboru názvů z webu Microsoft.Web na Microsoft.App v březnu 2022 .
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Vytvoření prostředí Azure Container Apps
Po dokončení nastavení Azure CLI můžete definovat proměnné prostředí, které se používají v tomto článku.
Definujte následující proměnné v prostředí Bash.
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"
Vytvořte skupinu prostředků.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
Vytvořte prostředí s automaticky vygenerovaným pracovním prostorem služby Log Analytics.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Zobrazí výchozí doménu prostředí kontejnerové aplikace. Poznamenejte si tuto doménu, abyste ji mohli použít v dalších částech.
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
Příprava aplikace na nasazení
Když nasadíte aplikaci do Azure Container Apps, adresa URL pro přesměrování se změní na adresu URL pro přesměrování nasazené instance aplikace v Azure Container Apps. Pomocí následujícího postupu změňte tato nastavení v souboru application.yml :
Přejděte do souboru src\main\resources\application.yml vaší aplikace a změňte hodnotu
post-logout-redirect-uri
na název domény nasazené aplikace, jak je znázorněno v následujícím příkladu. Nezapomeňte nahradit<API_NAME>
a<default-domain-of-container-app-environment>
nahradit skutečnými hodnotami. Například s výchozí doménou pro prostředí Azure Container App z předchozího kroku ams-identity-api
s názvem vaší aplikace byste tuto hodnotu použilihttps://ms-identity-api.<default-domain>
post-logout-redirect-uri
.post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
Po uložení tohoto souboru pomocí následujícího příkazu znovu sestavte aplikaci:
mvn clean package
Důležité
Soubor application.yml aplikace aktuálně obsahuje hodnotu tajného klíče klienta v parametru client-secret
. Tuto hodnotu v tomto souboru není vhodné zachovat. Pokud soubor potvrdíte do úložiště Git, může se stát, že riskujete. Doporučený přístup najdete v tématu Správa tajných kódů v Azure Container Apps.
Aktualizace registrace aplikace Microsoft Entra ID
Vzhledem k tomu, že se identifikátor URI přesměrování změní v nasazené aplikaci v Azure Container Apps, musíte také změnit identifikátor URI přesměrování v registraci aplikace Microsoft Entra ID. K provedení této změny použijte následující postup:
Přejděte na stránku Microsoft identity platform pro vývojáře Registrace aplikací.
Pomocívyhledávacího
java-servlet-webapp-authentication
Výběrem jejího názvu otevřete registraci aplikace.
Zvolte Ověřování z nabídky příkazů.
V části Identifikátory URI pro přesměrování webu - vyberte Přidat identifikátor URI.
Vyplňte identifikátor URI aplikace a připojte
/login/oauth2/code/
ho ,https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
například .Zvolte Uložit.
Nasazení aplikace
Nasaďte balíček JAR do Azure Container Apps.
Poznámka:
V případě potřeby můžete v proměnných prostředí sestavení Java zadat verzi sady JDK. Další informace najdete v tématu Vytváření proměnných prostředí pro Javu v Azure Container Apps.
Teď můžete soubor WAR nasadit pomocí příkazu ROZHRANÍ příkazového az containerapp up
řádku.
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
Poznámka:
Výchozí verze sady JDK je 17. Pokud potřebujete změnit verzi sady JDK kvůli kompatibilitě s aplikací, můžete pomocí argumentu --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
upravit číslo verze.
Další proměnné prostředí sestavení najdete v tématu Vytváření proměnných prostředí pro Javu v Azure Container Apps.
Ověření aplikace
V tomto příkladu containerapp up
--query properties.configuration.ingress.fqdn
příkaz obsahuje argument, který vrátí plně kvalifikovaný název domény (FQDN), označovaný také jako adresa URL aplikace. Pomocí následujících kroků zkontrolujte protokoly aplikace a prozkoumejte případné problémy s nasazením:
Přejděte na adresu URL výstupní aplikace ze stránky Výstupy v části Nasazení.
V navigačním podokně na stránce Přehled instance služby Azure Container Apps vyberte Protokoly a zkontrolujte protokoly aplikace.
Zkoumání ukázky
Ukázku můžete prozkoumat pomocí následujících kroků:
- Všimněte si stavu přihlášení nebo odhlášení, který se zobrazuje uprostřed obrazovky.
- Vyberte tlačítko citlivé na kontext v rohu. Toto tlačítko přečte přihlášení při prvním spuštění aplikace. Případně vyberte odkaz na podrobnosti o tokenu. Vzhledem k tomu, že je tato stránka chráněná a vyžaduje ověření, budete automaticky přesměrováni na přihlašovací stránku.
- Na další stránce postupujte podle pokynů a přihlaste se pomocí účtu zvoleného zprostředkovatele identity. Můžete se také přihlásit k místnímu účtu v tenantovi B2C pomocí e-mailové adresy.
- Po úspěšném dokončení toku přihlášení byste měli být přesměrováni na domovskou stránku , která zobrazuje stav přihlášení , nebo na stránku s podrobnostmi o tokenu v závislosti na tom, které tlačítko aktivovalo tok přihlášení.
- Všimněte si, že kontextové tlačítko se teď zobrazuje odhlásit a zobrazit vaše uživatelské jméno.
- Pokud jste na domovské stránce, vyberte podrobnosti tokenu ID a zobrazte některé dekódované deklarace identity tokenu ID.
- Upravte svůj profil. Vyberte upravit profil a změňte podrobnosti, jako je vaše zobrazované jméno, místo pobytu a povolání.
- Pomocí tlačítka v rohu se odhlaste. Stavová stránka odráží nový stav.
O kódu
Tato ukázka ukazuje, jak používat klientskou knihovnu Azure AD B2C Spring Boot Starter pro Javu k přihlášení uživatelů do tenanta Azure AD B2C. Ukázka také využívá úvodní sady Spring Oauth2 Client a Spring Web Boot. Ukázka používá deklarace identity z tokenu ID získaného z Azure AD B2C k zobrazení podrobností přihlášeného uživatele.
Obsah
Následující tabulka ukazuje obsah složky ukázkového projektu:
Soubor nebo složka | Popis |
---|---|
pom.xml | Závislosti aplikací |
src/main/resources/templates/ | Šablony thymeleaf pro uživatelské rozhraní. |
src/main/resources/application.yml | Konfigurace knihovny Microsoft Entra Boot Starter. |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Tento adresář obsahuje hlavní vstupní bod aplikace, kontroler a třídy konfigurace. |
.../MsIdentitySpringBootWebappApplication.java | Hlavní třída. |
.../SampleController.java | Kontroler s mapováním koncových bodů. |
.../SecurityConfig.java | Konfigurace zabezpečení – například trasy vyžadují ověření. |
.../Utilities.java | Třída utility – například deklarace identity tokenu ID filtru. |
CHANGELOG.md | Seznam změn v ukázce |
CONTRIBUTING.md | Pokyny pro přispívání do ukázky |
LICENCE | Licence pro ukázku. |
Deklarace identity tokenů ID
K extrahování podrobností o tokenech aplikace využívá Spring Security AuthenticationPrincipal
a OidcUser
objekt v mapování požadavků, jak je znázorněno v následujícím příkladu, jak je znázorněno v následujícím příkladu. Úplné podrobnosti o tom, jak tato aplikace využívá deklarace identity tokenů ID, najdete v ukázkovém kontroleru .
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();
}
Odkazy pro přihlášení a odhlášení
Pro přihlášení aplikace vytvoří požadavek na koncový bod přihlašování Azure AD B2C automaticky nakonfigurovanou klientskou knihovnou Azure AD B2C Spring Boot Starter pro Javu, jak je znázorněno v následujícím příkladu:
<a class="btn btn-success" href="/oauth2/authorization/{your-sign-up-sign-in-user-flow}">Sign In</a>
Pro odhlášení aplikace odešle do koncového logout
bodu požadavek POST, jak je znázorněno v následujícím příkladu:
<form action="#" th:action="@{/logout}" method="post">
<input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
Prvky uživatelského rozhraní závislé na ověřování
Aplikace má na stránkách šablony uživatelského rozhraní nějakou jednoduchou logiku pro určení obsahu, který se má zobrazit na základě toho, jestli je uživatel ověřený, jak je znázorněno v následujícím příkladu pomocí značek Spring Security Thymeleaf:
<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>
Ochrana tras pomocí WebSecurityConfigurerAdapter
Aplikace ve výchozím nastavení chrání stránku podrobností tokenu ID, aby k ní mohli přistupovat jenom přihlášení uživatelé. Aplikace nakonfiguruje tyto trasy z app.protect.authenticated
vlastnosti ze souboru application.yml . Pokud chcete nakonfigurovat specifické požadavky vaší aplikace, můžete rozšířit WebSecurityConfigurerAdapter
jednu z vašich tříd. Příklad najdete v této třídě SecurityConfig této aplikace, jak je znázorněno v následujícím kódu:
@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
}
}
Více informací
- Microsoft Identity Platform (Microsoft Entra ID pro vývojáře)
- Přehled knihovny Microsoft Authentication Library (MSAL)
- Rychlý start: registrace aplikace pomocí platformy identity Microsoft
- Rychlý start: Konfigurace klientské aplikace pro přístup k webovým rozhraním API
- Principy prostředí souhlasu aplikace Microsoft Entra ID
- Vysvětlení souhlasu uživatele a správce
- Přehled objektů aplikace a instančního objektu v Microsoft Entra ID
- Národní cloudy
- Ukázky kódu MSAL
- Klientská knihovna Microsoft Entra ID Spring Boot Starter pro Javu
- Klientská knihovna Azure Active Directory B2C Spring Boot Starter pro Javu
- Microsoft Authentication Library pro Javu (MSAL4J)
- Wikiweb MSAL4J
- Tokeny ID
- Přístupové tokeny na platformě Microsoft Identity Platform
Další informace o fungování protokolů OAuth 2.0 v tomto scénáři a dalších scénářích najdete v tématu Scénáře ověřování pro Microsoft Entra ID.