Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek představuje webovou aplikaci v Javě a Spring Bootu, která přihlašuje uživatele do vašeho tenanta Microsoft Entra ID pomocí klientské knihovny Microsoft Entra ID 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 Microsoft Entra ID Spring Boot Starter pro Javu k přihlášení uživatele a získání tokenu ID z Microsoft Entra ID. Token ID prokáže, že se uživatel ověřuje pomocí Microsoft Entra ID a umožňuje uživateli přístup k chráněným trasám.
Požadavky
- JDK verze 17. Tato ukázka byla vyvinuta v systému s Javou 17, ale může být kompatibilní s jinými verzemi.
- Maven 3
- Pro spuštění této ukázky v aplikaci Visual Studio Code se doporučuje Java Extension Pack for Visual Studio Code.
- Tenant služby Microsoft Entra ID. Další informace najdete v článku Jak získat tenanta Microsoft Entra ID.
- 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.
- Visual Studio Code
- nástroje Azure pro Visual Studio Code
Doporučení
- Určitá obeznámenost s Spring Framework.
- Znalost terminálu Linux/OSX
- jwt.ms ke kontrole vašich tokenů.
- Fiddler pro monitorování síťové aktivity a řešení problémů.
- Sledujte blog Microsoft Entra , abyste zůstali up-to-datem s nejnovějším vývojem.
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
Případně přejděte do repozitáře ms-identity-msal-java-samples, pak si ho stáhněte jako soubor .zip a rozbalte ho na pevný disk.
Důležité
Abyste se vyhnuli omezením délky cest v systému Windows, doporučujeme naklonovat do adresáře blízko kořene disku.
Registrace ukázkových aplikací 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 se váš účet nachází ve více než jednom klientovi Microsoft Entra ID, vyberte svůj profil v rohu portálu Azure a potom výběrem možnosti Přepnout adresář přepnete relaci do požadovaného klienta Microsoft Entra ID.
Registrace aplikace (java-spring-webapp-auth)
Aplikaci zaregistrujete pomocí následujících kroků:
Přejděte na portál Azure a vyberte Microsoft Entra ID.
V navigačním podokně vyberte Registrace aplikací a pak vyberte Nový zápis.
Na zobrazené stránce Zaregistrovat aplikaci zadejte následující informace pro registraci aplikace:
- V části Název zadejte smysluplný název aplikace, který se bude zobrazovat uživatelům aplikace – například
java-spring-webapp-auth. - V části Podporované typy účtů vyberte jenom jednoho tenanta – TENANT_NAME (
TENANT_NAMEliší se podle tenanta). - V oddílu Identifikátor URI pro přesměrování (volitelné) vyberte v rozevíracím seznamu možnost Web a zadejte následující identifikátor URI pro přesměrování:
http://localhost:8080/login/oauth2/code/.
- V části Název zadejte smysluplný název aplikace, který se bude zobrazovat uživatelům aplikace – například
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í : 180 dní (6 měsíců),90 (3 měsíce), 365 dnů (12 měsíců), 545 dnů (18 měsíců) nebo 730 dnů (24 měsíců).
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.
Nakonfigurujte aplikaci (java-spring-webapp-auth) tak, aby používala registraci vaší aplikace
Ke konfiguraci aplikace použijte následující postup:
Poznámka:
V následujících krocích ClientID označuje totéž co Application ID nebo AppId.
Otevřete projekt v integrovaném vývojovém prostředí (IDE).
Otevřete soubor src\main\resources\application.yml.
Najděte zástupný symbol
Enter_Your_Tenant_ID_Herea nahraďte stávající hodnotu ID svého tenanta Microsoft Entra.Vyhledejte zástupný symbol
Enter_Your_Client_ID_Herea nahraďte existující hodnotu ID aplikacejava-spring-webapp-authnebo ID aplikaceclientId, kterou jste zkopírovali z portálu Azure.Vyhledejte zástupný symbol
Enter_Your_Client_Secret_Herea nahraďte stávající hodnotu hodnotou, kterou jste si uložili při vytvářeníjava-spring-webapp-autha zkopírovali z portálu Azure.
Spusťte ukázku
Následující části ukazují, jak nasadit ukázku do Azure Container Apps.
Požadavky
- Účet Azure. Pokud účet nemáte, vytvořte si bezplatný účet. Abyste mohli pokračovat, potřebujete oprávnění
ContributorneboOwnerk předplatnému Azure. Další informace najdete v článku Přiřazení rolí Azure pomocí portálu Azure. - Azure CLI.
- Rozšíření Azure Container Apps CLI, ve verzi
0.3.47nebo vyšší. K instalaci nejnovější verze použijte příkazaz extension add --name containerapp --upgrade --allow-preview. - Java Development Kit ve verzi 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 Maven:
mvn clean verifySpusť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í příkazů az containerapp v Azure CLI zobrazí chyby o chybějících parametrech, 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.
az extension add --name containerapp --upgrade --allow-preview true
Nyní, když je příslušné rozšíření nebo modul nainstalován, zaregistrujte obory názvů Microsoft.App a Microsoft.OperationalInsights.
Poznámka:
Prostředky Azure Container Apps byly migrovány z jmenného prostoru Microsoft.Web do jmenného prostoru Microsoft.App. Další informace najdete v tématu Migrace oboru názvů z 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 k souboru src\main\resources\application.yml vaší aplikace a změňte hodnotu
post-logout-redirect-urina doménové jméno vaší nasazené aplikace, jak ukazuje následující příklad. Nezapomeňte nahradit<API_NAME>a<default-domain-of-container-app-environment>vašimi skutečnými hodnotami. Například s výchozí doménou prostředí Azure Container App z předchozího kroku ams-identity-apijako názvem aplikace použijetehttps://ms-identity-api.<default-domain>jako hodnotu propost-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. Informace o doporučeném postupu najdete v tématu Správa tajných klíčů 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 Registrace aplikací platformy Microsoft identity pro vývojáře.
Pomocí vyhledávacího pole vyhledejte registraci své aplikace – například
java-servlet-webapp-authentication.Výběrem jejího názvu otevřete registraci aplikace.
Vyberte z nabídky Ověřování.
V části Web - Identifikátory URI přesměrování vyberte Přidat identifikátor URI.
Vyplňte identifikátor URI vaší aplikace a na konec přidejte
/login/oauth2/code/– napříkladhttps://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/.Vyberte 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 článku Proměnné prostředí sestavení pro Javu v Azure Container Apps.
Nyní můžete nasadit svůj soubor WAR pomocí příkazu az containerapp up CLI.
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 JDK, aby byla kompatibilní s vaší aplikací, můžete pomocí argumentu --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> upravit číslo verze.
Další proměnné prostředí pro sestavení najdete v článku Proměnné prostředí pro sestavení pro Javu v Azure Container Apps.
Ověření aplikace
V tomto příkladu příkaz containerapp up obsahuje argument --query properties.configuration.ingress.fqdn, který vrací plně kvalifikovaný název domény (FQDN), také známý 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.
Prozkoumejte ukázku
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. Na tomto tlačítku se při prvním spuštění aplikace zobrazuje Přihlásit se. Případně vyberte 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 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 stránku s podrobnostmi o tokenu v závislosti na tom, které tlačítko aktivovalo tok přihlášení.
- Všimněte si, že na kontextovém tlačítku je nyní Odhlásit se a zobrazuje se na něm vaše uživatelské jméno.
- Pokud jste na domovské stránce, vyberte ID Token Details, abyste zobrazili některé dekódované atributy tokenu ID.
- Pomocí tlačítka v rohu se odhlaste. Stavová stránka odráží nový stav.
O kódu
Tato ukázka demonstruje, jak pomocí klientské knihovny Microsoft Entra ID Spring Boot Starter pro Javu přihlašovat uživatele k vašemu tenantovi Microsoft Entra ID. Ukázka také využívá startéry Spring OAuth2 Client a Spring Web. 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.
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 aplikace a knihovny Boot Starter pro 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 | Pomocná třída – například pro filtrování claimů tokenu ID. |
| CHANGELOG.md | Seznam změn v ukázce |
| CONTRIBUTING.md | Pokyny pro přispívání do ukázky |
| LICENCE | Licence pro vzorek. |
Deklarace identity tokenů ID
K získání podrobností o tokenu aplikace využívá objekty AuthenticationPrincipal a OidcUser při mapování požadavku, jak ukazuje následující příklad. Úplné podrobnosti o tom, jak tato aplikace využívá deklarace v tokenu ID, najdete v Sample Controlleru.
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 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>
Při odhlášení aplikace odešle požadavek POST na koncový bod logout, jak ukazuje následující příklad:
<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í stránku podrobností tokenu ID, aby k ní mohli přistupovat jenom přihlášení uživatelé. Aplikace konfiguruje tyto trasy pomocí vlastnosti app.protect.authenticated ze souboru application.yml. Chcete-li nakonfigurovat specifické požadavky vaší aplikace, použijte u instance AadWebApplicationHttpSecurityConfigurer#aadWebApplication metodu HttpSecurity. Příklad najdete ve třídě SecurityConfig této aplikace, jak ukazuje následující kód:
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Value("${app.protect.authenticated}")
private String[] allowedOrigins;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// @formatter:off
http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
.and()
.authorizeHttpRequests(auth -> auth
.requestMatchers(allowedOrigins).authenticated()
.anyRequest().permitAll()
);
// @formatter:on
return http.build();
}
@Bean
@RequestScope
public ServletUriComponentsBuilder urlBuilder() {
return ServletUriComponentsBuilder.fromCurrentRequest();
}
}
Více informací
- Microsoft identity platform (Microsoft Entra ID pro vývojáře)
- Přehled knihovny Microsoft pro ověřování (MSAL)
- Rychlý start: Zaregistrujte aplikaci na platformě Microsoft identity platform
- Rychlý start: Konfigurace klientské aplikace pro přístup k webovým rozhraním API
- Vysvětlení prostředí pro udělení souhlasu aplikaci v Microsoft Entra ID
- Pochopení souhlasu uživatele a správce
- Objekty aplikací a instančních objektů služby v Microsoft Entra ID
- Národní cloudová prostředí
- Ukázky kódu pro MSAL
- Klientská knihovna Microsoft Entra ID Spring Boot Starter pro jazyk Java
- Microsoft Authentication Library pro jazyk Java (MSAL4J)
- Wikiweb MSAL4J
- ID tokeny
- Přístupové tokeny v platformě Microsoft Identity
Další informace o tom, jak v tomto a dalších scénářích fungují protokoly OAuth 2.0, viz Scénáře ověřování pro Microsoft Entra ID.