Zabezpečení aplikací Spring Boot v Javě pomocí skupin a deklarací identity skupin
Tento článek ukazuje webovou aplikaci Java Spring Boot, která používá klientskou knihovnu Microsoft Entra ID Spring Boot Starter pro Javu pro ověřování, autorizaci a získání tokenu. Aplikace používá k přihlášení uživatelů protokol OpenID Connect a omezuje přístup k stránkám na základě členství ve skupině zabezpečení Microsoft Entra ID.
Následující diagram znázorňuje topologii aplikace:
Klientská aplikace používá klientskou knihovnu Microsoft Entra ID Spring Boot Starter pro Javu k přihlášení uživatelů v tenantovi Microsoft Entra ID a získání tokenu ID od Microsoft Entra ID.
Token ID obsahuje deklaraci identity skupin. Aplikace načte deklarace identity do seznamu Spring GrantedAuthorities
pro přihlášeného uživatele. Tyto hodnoty určují, ke kterým stránkám má uživatel oprávnění k přístupu.
Video, které popisuje tento scénář, najdete v tématu Implementace autorizace v aplikacích pomocí rolí aplikací, skupin zabezpečení, oborů a rolí adresáře.
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 Microsoft Entra ID. Další informace najdete v tématu Rychlý start: Nastavení tenanta.
- Uživatelský účet v tenantovi Microsoft Entra ID. Tato ukázka nefunguje s osobním účtem Microsoft. Pokud jste se tedy přihlásili k webu Azure Portal pomocí osobního účtu a nemáte ve svém adresáři uživatelský účet, musíte si ho teď vytvořit.
- Dvě skupiny zabezpečení pojmenované
AdminGroup
aUserGroup
obsahující uživatele nebo uživatele, které chcete podepsat a otestovat tuto ukázku. Případně můžete uživatele přidat do dvou existujících skupin zabezpečení ve vašem tenantovi. Pokud se rozhodnete použít existující skupiny, nezapomeňte upravit ukázkovou konfiguraci tak, aby používala název a ID objektu stávajících skupin zabezpečení. - 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/3-Authorization-II/groups
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.
Registrace ukázkové aplikace v tenantovi Microsoft Entra ID
V této ukázce je jeden projekt. V následujících částech se dozvíte, jak aplikaci zaregistrovat pomocí webu Azure Portal.
Zvolte tenanta Microsoft Entra ID, 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 Microsoft Entra ID, vyberte svůj profil v rohu webu Azure Portal a pak vyberte Přepnout adresář a změňte relaci na požadovaného tenanta Microsoft Entra ID.
Registrace aplikace (java-spring-webapp-groups)
Aplikaci zaregistrujete pomocí následujících kroků:
Přejděte na web Azure Portal a vyberte ID Microsoft Entra.
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-groups
například . - V části Podporované typy účtů vyberte Pouze účty v tomto organizačním adresáři.
- 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.
Na registrační stránce aplikace vyberte v navigačním podokně certifikáty a tajné kódy a otevřete stránku, kde můžete vygenerovat tajné kódy a nahrát certifikáty.
V části Tajné klíče klienta vyberte Nový tajný klíč klienta.
Zadejte popis – například tajný kód aplikace.
Vyberte jednu z dostupných dob trvání: 6 měsíců, 12 měsíců nebo Vlastní.
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.
Na registrační stránce aplikace vyberte oprávnění rozhraní API v navigačním podokně a otevřete stránku, kde můžete přidat přístup k rozhraním API, která vaše aplikace potřebuje.
Vyberte Přidat oprávnění.
Ujistěte se, že je vybraná karta Rozhraní API Microsoftu.
V části Běžně používané rozhraní MICROSOFT API vyberte Microsoft Graph.
V části Delegovaná oprávnění ze seznamu vyberte GroupMember.Read.All. V případě potřeby použijte vyhledávací pole. Toto oprávnění je nezbytné pro získání členství ve skupinách prostřednictvím Graphu, pokud dojde ke scénáři nadlimitního využití.
Výběrem tlačítka udělte souhlas
GroupMember.Read.All
správce .Vyberte Přidat oprávnění.
Vytváření skupin zabezpečení
Pokud chcete vytvořit skupiny zabezpečení, postupujte následovně:
Přejděte na web Azure Portal a vyberte ID Microsoft Entra.
V navigačním podokně vyberte Skupiny .
V podokně Skupiny vyberte Možnost Nová skupina a zadejte následující informace:
- Jako typ skupiny vyberte Zabezpečení.
- Jako název skupiny zadejte AdminGroup.
- Jako popis skupiny zadejte skupinu zabezpečení správce.
- Přidejte vlastníky skupin a členy skupiny, které chcete použít a otestovat v této ukázce.
- Vyberte Vytvořit.
V podokně Skupiny vyberte Možnost Nová skupina a zadejte následující informace:
- Jako typ skupiny vyberte Zabezpečení.
- Jako název skupiny zadejte UserGroup.
- Jako popis skupiny zadejte skupinu zabezpečení uživatele.
- Přidejte vlastníky skupin a členy skupiny, které chcete použít a otestovat v této ukázce.
- Vyberte Vytvořit.
Další informace naleznete v tématu Správa skupin a členství ve skupinách Microsoft Entra.
Konfigurace skupin zabezpečení
Máte následující možnosti, jak můžete aplikaci dále nakonfigurovat tak, aby přijímala deklarace identity skupin:
Obdrží všechny skupiny, ke kterým je přihlášený uživatel přiřazený v tenantovi Microsoft Entra ID, včetně vnořených skupin. Další informace najdete v části Konfigurace aplikace tak, aby přijímala všechny skupiny, ke kterým je přihlášený uživatel přiřazen, včetně vnořených skupin.
Získejte hodnoty deklarací identity skupin z filtrované sady skupin, se kterými je vaše aplikace naprogramovaná tak, aby fungovala. Další informace najdete v části Konfigurace aplikace tak, aby přijímala hodnoty deklarací identity skupin z filtrované sady skupin, ke kterým může být uživatel přiřazen. Tato možnost není dostupná v edici Microsoft Entra ID Free.
Poznámka:
Pokud chcete získat místní skupinu samAccountName
nebo On Premises Group Security Identifier
místo ID skupiny, přečtěte si část Požadavky pro použití atributů skupiny synchronizovaných ze služby Active Directory v části Konfigurace deklarací identity skupin pro aplikace pomocí Microsoft Entra ID.
Nakonfigurujte aplikaci tak, aby přijímala všechny skupiny, ke kterým je přihlášený uživatel přiřazený, včetně vnořených skupin.
Ke konfiguraci aplikace použijte následující kroky:
Na registrační stránce aplikace vyberte v navigačním podokně možnost Konfigurace tokenu a otevřete stránku, kde můžete nakonfigurovat tokeny poskytnuté deklaracemi identity vydané vaší aplikaci.
Výběrem možnosti Přidat deklaraci identity skupin otevřete obrazovku Upravit deklarace identity skupin.
Vyberte skupiny zabezpečení NEBO Všechny skupiny (včetně distribučních seznamů, ale ne skupin přiřazených k aplikaci).) Volba obou neguje účinek možnosti Skupiny zabezpečení.
V části ID vyberte ID skupiny. Tento výběr způsobí, že ID Microsoft Entra odešle ID objektu skupin, ke kterým je uživatel přiřazený v deklaraci identity tokenu ID, který vaše aplikace obdrží po přihlášení uživatele.
Nakonfigurujte aplikaci tak, aby přijímala hodnoty deklarací identity ze filtrované sady skupin, ke kterým může být uživatel přiřazen.
Tato možnost je užitečná, pokud platí následující případy:
- Vaše aplikace má zájem o vybranou sadu skupin, ke kterým se může přiřadit přihlášený uživatel.
- Vaše aplikace nemá zájem o každou skupinu zabezpečení, ke které je tento uživatel přiřazený v tenantovi.
Tato možnost pomáhá vaší aplikaci vyhnout se problému s nadlimitním využitím .
Poznámka:
Tato funkce není dostupná v edici Microsoft Entra ID Free.
Přiřazení vnořených skupin nejsou při použití této možnosti k dispozici.
Pokud chcete tuto možnost ve své aplikaci povolit, postupujte takto:
Na registrační stránce aplikace vyberte v navigačním podokně možnost Konfigurace tokenu a otevřete stránku, kde můžete nakonfigurovat tokeny poskytnuté deklaracemi identity vydané vaší aplikaci.
Výběrem možnosti Přidat deklaraci identity skupin otevřete obrazovku Upravit deklarace identity skupin.
Vyberte Skupiny přiřazené k aplikaci a nevybírejte žádné další možnosti. Pokud zvolíte další možnosti, jako jsou skupiny zabezpečení nebo všechny skupiny (včetně distribučních seznamů, ale ne skupin přiřazených k aplikaci), tyto možnosti negují účinek skupin přiřazených k možnosti aplikace.
V části ID vyberte ID skupiny. Tento výběr způsobí, že ID Microsoft Entra odešle ID objektu skupin, ke kterým je uživatel přiřazený v deklaraci identity tokenu ID, který vaše aplikace obdrží po přihlášení uživatele.
Pokud zveřejňujete webové rozhraní API pomocí možnosti Zveřejnit rozhraní API , můžete také zvolit možnost ID skupiny v části Přístup . Tento výběr způsobí, že MICROSOFT Entra ID odešle ID objektu skupin, ke kterým je uživatel přiřazený v deklaraci identity přístupového tokenu vydaného klientským aplikacím vašeho rozhraní API.
Na stránce registrace aplikace vyberte v navigačním podokně Přehled a otevřete obrazovku Přehled aplikace.
Vyberte hypertextový odkaz s názvem aplikace ve spravované aplikaci v místním adresáři. Název tohoto pole může být zkrácený – například spravovaná aplikace v .... Když vyberete tento odkaz, přejdete na stránku Přehled podnikových aplikací přidruženou k instančnímu objektu aplikace v tenantovi, ve kterém jste ho vytvořili. Zpět na stránku registrace aplikace můžete přejít pomocí tlačítka Zpět v prohlížeči.
Výběrem možnosti Uživatelé a skupiny v navigačním podokně otevřete stránku, kde můžete přiřadit uživatele a skupiny k aplikaci.
Vyberte možnost Přidat uživatele.
Na výsledné obrazovce vyberte uživatele a skupiny .
Zvolte skupiny, které chcete přiřadit k této aplikaci.
Výběrem možnosti Vybrat dokončíte výběr skupin.
Výběrem možnosti Přiřadit dokončíte proces přiřazení skupiny.
Vaše aplikace teď obdrží tyto vybrané skupiny v deklaraci identity skupin, když je uživatel přihlášený k vaší aplikaci členem jedné nebo více těchto přiřazených skupin.
Výběrem možnosti Vlastnosti v navigačním podokně otevřete stránku se základními vlastnostmi aplikace. Nastavte požadované přiřazení uživatele? Příznak Ano.
Důležité
Když nastavíte přiřazení uživatele? Na ano, Microsoft Entra ID zkontroluje, že se k aplikaci můžou přihlásit jenom uživatelé přiřazení k aplikaci v podokně Uživatelé a skupiny . Uživatele můžete přiřadit přímo nebo přiřazením skupin zabezpečení, ke kterým patří.
Konfigurace ukázky kódu pro použití registrace aplikace a skupin zabezpečení (java-spring-webapp-groups)
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.
Vyhledejte zástupný symbol
Enter_Your_Tenant_ID_Here
a nahraďte existující hodnotu id vašeho tenanta Microsoft Entra.Vyhledejte zástupný symbol
Enter_Your_Client_ID_Here
a nahraďte existující hodnotu ID aplikace neboclientId
java-spring-webapp-groups
aplikace zkopírovanou z webu Azure Portal.Vyhledejte zástupný symbol
Enter_Your_Client_Secret_Here
a nahraďte existující hodnotu hodnotou, kterou jste uložili při vytvářeníjava-spring-webapp-groups
zkopírovaného z webu Azure Portal.Vyhledejte zástupný symbol
Enter_Your_Admin_Group_ID_Here
a nahraďte existující hodnotuobjectId
hodnotou vaší skupiny AdminGroup.Vyhledejte zástupný symbol
Enter_Your_User_Group_ID_Here
a nahraďte existující hodnotuobjectId
hodnotou skupiny UserGroup.Otevřete soubor src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java.
Vyhledejte zástupný symbol
Enter_Your_Admin_Group_ID_Here
a nahraďte existující hodnotuobjectId
hodnotou vaší skupiny AdminGroup.Vyhledejte zástupný symbol
Enter_Your_User_Group_ID_Here
a nahraďte existující hodnotuobjectId
hodnotou skupiny UserGroup.
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ě můžete vybrat podrobnosti o tokenu, jenom správci nebo běžní uživatelé. Protože jsou tyto stránky chráněné a vyžadují 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 v tenantovi Microsoft Entra ID.
- Na obrazovce souhlasu si všimněte požadovaných oborů.
- 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 jednu z dalších stránek 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, včetně skupin.
- Chcete-li zobrazit pouze
/admin_only
správce, vyberte možnost . Tuto stránku můžou zobrazit jenom uživatelé patřící doAdminGroup
skupiny zabezpečení. V opačném případě se zobrazí zpráva o chybě autorizace. - Výběrem možnosti Běžní uživatelé zobrazte
/regular_user
stránku. Tuto stránku můžou zobrazit jenom uživatelé patřící doUserGroup
skupiny zabezpečení. V opačném případě se zobrazí zpráva o chybě autorizace. - 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 Microsoft Entra ID Spring Boot Starter pro Javu k přihlášení uživatelů do tenanta Microsoft Entra ID. 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 ID Microsoft Entra k zobrazení podrobností přihlášeného uživatele a k omezení přístupu k některým stránkám pomocí deklarace identity skupin pro autorizaci.
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 úvodní knihovny spouštění aplikace a Microsoft Entra ID. |
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 používá spring security AuthenticationPrincipal
a OidcUser
objekt v mapování požadavků, 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();
}
Zpracování deklarace identity skupin v tokenu ID
Deklarace identity skupin tokenu obsahuje názvy skupin, ke kterým je přihlášený uživatel přiřazený, jak je znázorněno v následujícím příkladu:
{
...
"groups": [
"xyz-id-xyz",
"xyz-id-xyz",]
...
}
Běžný způsob přístupu k názvům skupin je zdokumentovaný v části deklarací identity tokenů ID.
Microsoft Entra ID Boot Starter v3.5 a vyšší parsuje deklarace skupiny automaticky a přidá každou skupinu do přihlášeného uživatele Authorities
. Tato konfigurace umožňuje vývojářům používat skupiny s poznámkami podmínky Spring PrePost
pomocí hasAuthority
metody. Například v SampleController.java najdete následující @PreAuthorize
podmínky:
@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
// restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
// restrict to users who belong to any of UserGroup or AdminGroup
}
Následující kód získá úplný seznam autorit pro daného uživatele:
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}
Odkazy pro přihlášení a odhlášení
Pro přihlášení aplikace odešle žádost do koncového bodu přihlášení k Microsoft Entra ID automaticky nakonfigurované klientskou knihovnou Spring Boot Starter pro Microsoft Entra ID pro Javu, jak je znázorněno v následujícím příkladu:
<a class="btn btn-success" href="/oauth2/authorization/azure">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í AADWebSecurityConfigurerAdapter
Aplikace ve výchozím nastavení chrání podrobnosti tokenu ID, pouze správce a stránky Běžní uživatelé, aby k nim mohli přistupovat jenom přihlášení uživatelé. Aplikace tyto trasy nakonfiguruje pomocí app.protect.authenticated
vlastnosti ze souboru application.yml . Pokud chcete nakonfigurovat specifické požadavky vaší aplikace, můžete rozšířit AADWebSecurityConfigurationAdapter
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
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
@Value( "${app.protect.authenticated}" )
private String[] protectedRoutes;
@Override
public void configure(HttpSecurity http) throws Exception {
// use required configuration form AADWebSecurityAdapter.configure:
super.configure(http);
// add custom configuration:
http.authorizeRequests()
.antMatchers(protectedRoutes).authenticated() // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
.antMatchers("/**").permitAll(); // allow all other routes.
}
}
Deklarace nadlimitního využití skupin
Aby se zajistilo, že velikost tokenu nepřekračuje limity velikosti hlavičky HTTP, omezuje platforma Microsoft Identity Platform počet ID objektů, které zahrnuje do deklarace identity skupin.
Limit nadlimitního využití je 150 pro tokeny SAML, 200 pro tokeny JWT, 6 pro jednostrákové aplikace. Pokud je uživatel členem více skupin, než je limit nadlimitního využití, nevygeneruje platforma Microsoft Identity Platform ID skupin v deklaraci identity v tokenu. Místo toho obsahuje deklaraci nadlimitního využití v tokenu, která značí aplikaci, aby se dotazování rozhraní Microsoft Graph API načetla členství ve skupině uživatele.
Microsoft Entra ID Boot Starter v3.5 a vyšší parsuje deklarace skupiny automaticky a přidá každou skupinu do přihlášeného uživatele Authorities
. Úvodní sada automaticky zpracovává scénář nadlimitního využití skupin.
Poznámka:
Důrazně doporučujeme použít funkci filtrování skupin, pokud je to možné, abyste se vyhnuli překročení nadlimitního využití skupin. Další informace najdete v části Konfigurace aplikace tak, aby přijímala hodnoty deklarací identity skupin z filtrované sady skupin, ke kterým může být uživatel přiřazen.
Vytvoření scénáře nadlimitního využití pro testování
Pomocí souboru BulkCreateGroups.ps1, který je součástí složky AppCreationScripts, můžete vytvořit velký počet skupin a přiřadit k nim uživatele. Tento soubor pomáhá testovat scénáře nadlimitního využití během vývoje. Nezapomeňte změnit uživatele objectId
zadaného ve skriptu BulkCreateGroups.ps1 .
Zpracování nadlimitního využití vyžaduje volání Microsoft Graphu ke čtení členství ve skupinách přihlášených uživatelů, takže vaše aplikace musí mít oprávnění User.Read a GroupMember.Read.Read.All , aby se funkce getMemberGroups úspěšně spustila.
Důležité
V případě nadlimitního využití se ujistěte, že jste udělili Admin Consent
rozsah rozhraní Microsoft Graph API GroupMember.Read.All
pro klientské aplikace i aplikace služeb. Další informace najdete v postupu registrace aplikace v dřívější části tohoto článku.
Aktualizace registrace aplikace Microsoft Entra ID (java-spring-webapp-groups)
Pokud chcete aktualizovat registraci aplikace, postupujte následovně:
Vraťte se na web Azure Portal.
V navigačním podokně vyberte Azure Active Directory a pak vyberte Registrace aplikací (Preview).
Na výsledné obrazovce vyberte
java-spring-webapp-groups
aplikaci.Na stránce registrace aplikace vyberte v nabídce možnost Ověřování .
V části Identifikátory URI pro přesměrování aktualizujte adresy URL odpovědí tak, aby odpovídaly adrese URL webu vašeho nasazení Azure ,
https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/
například .
Důležité
Pokud vaše aplikace používá úložiště v paměti, služba Aplikace Azure Services váš web vyprázdní, pokud je neaktivní, a všechny záznamy, které vaše aplikace uchovává, se vyprázdní. Pokud zvýšíte počet instancí vašeho webu, požadavky se distribuují mezi instance. Záznamy vašich aplikací proto nejsou u každé instance stejné.
Více informací
- Dokumentace k platformě Microsoft Identity Platform
- 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
- Aplikační a instanční objekty v Azure Active Directory
- Národní cloudy
- Ukázky kódu MSAL
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.