Povolení přihlašování pro aplikace Java JBoss EAP pomocí MSAL4J s Azure Active Directory B2C
Tento článek ukazuje aplikaci Java JBoss EAP, která ověřuje uživatele v Azure Active Directory B2C (Azure AD B2C) pomocí knihovny Microsoft Authentication Library pro Javu (MSAL4J).
Následující diagram znázorňuje topologii aplikace:
Aplikace používá MSAL4J k přihlášení uživatelů a získání tokenu ID z Azure AD B2C. Token ID potvrzuje, že je uživatel ověřený vůči tenantovi Azure AD B2C.
Požadavky
- Sada JDK verze 8 nebo vyšší
- Maven 3
- Tenant Azure AD B2C. Další informace najdete v tématu Kurz: Vytvoření tenanta Azure Active Directory B2C
- Uživatelský účet ve vašem tenantovi Azure AD B2C.
Doporučení
- Znalost Javy / Jakarta Servlets.
- 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 3-java-servlet-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.
Registrace ukázkové aplikace v tenantovi Azure AD B2C
Ukázka se dodává s předem rezervovanou aplikací pro účely testování. Pokud chcete použít vlastního tenanta a aplikaci Azure AD B2C, postupujte podle kroků v následujících částech a zaregistrujte a nakonfigurujte aplikaci na webu Azure Portal. V opačném případě pokračujte postupem spuštění ukázky.
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 , ale toto je nad rámec tohoto kurzu.
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 (ms-identity-b2c-java-servlet-webapp-authentication)
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 ,
ms-identity-b2c-java-servlet-webapp-authentication
například . - V části Podporované typy účtů vyberte Účty v libovolném adresáři organizace a osobních účtech Microsoft (např. Skype, Xbox, Outlook.com).
- 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/ms-identity-b2c-java-servlet-webapp-authentication/auth_redirect
.
- 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 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í: Za 1 rok, Za 2 roky nebo Nikdy nevyprší platnost.
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 (ms-identity-b2c-java-servlet-webapp-authentication) 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/authentication.properties.
aad.clientId
Najděte vlastnost a nahraďte existující hodnotu ID aplikace neboclientId
ms-identity-b2c-java-servlet-webapp-authentication
aplikace z webu Azure Portal.aad.secret
Najděte vlastnost a nahraďte existující hodnotu hodnotou, kterou jste uložili při vytvářeníms-identity-b2c-java-servlet-webapp-authentication
aplikace z webu Azure Portal.aad.scopes
Vyhledejte vlastnost a nahraďte existující id klienta aplikace hodnotou, kterou jste zadaliaad.clientId
v kroku 1 této části.aad.authority
Vyhledejte vlastnost a nahraďte první instancifabrikamb2c
názvem tenanta Azure AD B2C, ve kterém jste aplikaci vytvořilims-identity-b2c-java-servlet-webapp-authentication
na webu Azure Portal.aad.authority
Vyhledejte vlastnost a nahraďte druhou instancifabrikamb2c
názvem tenanta Azure AD B2C, ve kterém jste aplikaci vytvořilims-identity-b2c-java-servlet-webapp-authentication
na webu Azure Portal.aad.signInPolicy
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řilims-identity-b2c-java-servlet-webapp-authentication
na webu Azure Portal.aad.passwordResetPolicy
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řilims-identity-b2c-java-servlet-webapp-authentication
na webu Azure Portal.aad.editProfilePolicy
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řilims-identity-b2c-java-servlet-webapp-authentication
na webu Azure Portal.
Sestavení ukázky
Pokud chcete vytvořit ukázku pomocí Mavenu, přejděte do adresáře obsahujícího soubor pom.xml ukázky a spusťte následující příkaz:
mvn clean package
Tento příkaz vygeneruje soubor .war , který můžete spustit na různých aplikačních serverech.
Spuštění ukázky
Následující části ukazují, jak nasadit ukázku do služby Aplikace Azure Service.
Požadavky
Modul plug-in Maven pro aplikace Aplikace Azure Service
Pokud maven není vaším upřednostňovaným nástrojem pro vývoj, projděte si následující podobné kurzy, které používají jiné nástroje:
Konfigurace modulu plug-in Maven
Proces nasazení do služby Aplikace Azure Service používá vaše přihlašovací údaje Azure z Azure CLI automaticky. Pokud se Azure CLI nenainstaluje místně, pak se modul plug-in Maven ověří pomocí OAuth nebo přihlášení zařízení. Další informace najdete v tématu ověřování pomocí modulů plug-in Maven.
Ke konfiguraci modulu plug-in použijte následující postup:
Spuštěním příkazu Maven zobrazeného vedle konfigurace nasazení Tento příkaz vám pomůže nastavit operační systém služby App Service, verzi Javy a verzi Tomcat.
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
Pokud chcete vytvořit novou konfiguraci spuštění, stiskněte Y a pak stiskněte Enter.
Pro definování hodnoty pro operační systém stiskněte 2 pro Linux a pak stiskněte Enter.
Pro definici hodnoty javaVersion stiskněte 2 pro Javu 11 a pak stiskněte Enter.
Pro define value for webContainer, press 1 for JBosseap7, then press Enter.
Pokud chcete definovat hodnotu pro pricingTier, stiskněte Enter a vyberte výchozí úroveň P1v3 .
Potvrďte akci stisknutím klávesy Y a pak stiskněte Enter.
Následující příklad ukazuje výstup procesu nasazení:
Please confirm webapp properties
AppName : msal4j-servlet-auth-1707220080695
ResourceGroup : msal4j-servlet-auth-1707220080695-rg
Region : centralus
PricingTier : P1v3
OS : Linux
Java Version: Java 11
Web server stack: JBosseap 7
Deploy to slot : false
Confirm (Y/N) [Y]:
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.196 s
[INFO] Finished at: 2024-02-06T11:48:16Z
[INFO] ------------------------------------------------------------------------
Jakmile potvrdíte volby, modul plug-in přidá konfiguraci modulu plug-in a požadované nastavení do souboru pom.xml projektu a nakonfiguruje aplikaci tak, aby běžela ve službě Aplikace Azure Service.
Relevantní část souboru pom.xml by měla vypadat podobně jako v následujícím příkladu:
<build>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>>azure-webapp-maven-plugin</artifactId>
<version>x.xx.x</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<resourceGroup>your-resourcegroup-name</resourceGroup>
<appName>your-app-name</appName>
...
</configuration>
</plugin>
</plugins>
</build>
Konfigurace služby App Service můžete upravit přímo ve vašem pom.xml. Některé běžné konfigurace jsou uvedeny v následující tabulce:
Vlastnost | Požadováno | Popis | Verze |
---|---|---|---|
schemaVersion |
false (nepravda) | Verze schématu konfigurace. Podporované hodnoty jsou v1 a v2 . |
1.5.2 |
subscriptionId |
false (nepravda) | ID předplatného. | 0.1.0+ |
resourceGroup |
true | Skupina prostředků Azure pro vaši aplikaci. | 0.1.0+ |
appName |
true | Název aplikace. | 0.1.0+ |
region |
false (nepravda) | Oblast, ve které se má aplikace hostovat. Výchozí hodnota je centralus . Platné oblasti najdete v tématu Podporované oblasti. |
0.1.0+ |
pricingTier |
false (nepravda) | Cenová úroveň vaší aplikace. Výchozí hodnota je P1v2 pro produkční úlohu. Doporučená minimální hodnota pro vývoj a testování v Javě je B2 . Další informace najdete v tématu Ceny služby App Service. |
0.1.0+ |
runtime |
false (nepravda) | Konfigurace prostředí runtime. Další informace najdete v tématu Podrobnosti o konfiguraci. | 0.1.0+ |
deployment |
false (nepravda) | Konfigurace nasazení. Další informace najdete v tématu Podrobnosti o konfiguraci. | 0.1.0+ |
Úplný seznam konfigurací najdete v referenční dokumentaci k modulu plug-in. Všechny moduly plug-in Azure Maven sdílejí společnou sadu konfigurací. Informace o těchto konfiguracích najdete v tématu Běžné konfigurace. Informace o konfiguracích specifických pro službu Aplikace Azure Najdete v tématu Aplikace Azure: Podrobnosti konfigurace.
Nezapomeňte uložit stranou appName
a resourceGroup
hodnoty pro pozdější použití.
Příprava aplikace na nasazení
Když nasadíte aplikaci do služby App Service, adresa URL pro přesměrování se změní na adresu URL pro přesměrování vaší nasazené instance aplikace. Pomocí následujícího postupu změňte tato nastavení v souboru vlastností:
Přejděte do souboru authentication.properties vaší aplikace a změňte hodnotu
app.homePage
na název domény nasazené aplikace, jak je znázorněno v následujícím příkladu. Pokud jste například v předchozím kroku zvoliliexample-domain
název aplikace, musíte tuto hodnotu použíthttps://example-domain.azurewebsites.net
app.homePage
. Ujistěte se, že jste také změnili protokol zhttp
nahttps
.# app.homePage is by default set to dev server address and app context path on the server # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net app.homePage=https://<your-app-name>.azurewebsites.net
Po uložení tohoto souboru pomocí následujícího příkazu znovu sestavte aplikaci:
mvn clean package
Důležité
V tomto souboru authentication.properties máte nastavení pro svůj aad.secret
. Není vhodné tuto hodnotu nasadit do služby App Service. Ani to není vhodné nechat tuto hodnotu v kódu a potenciálně ji odeslat do úložiště Git. Pokud chcete tuto hodnotu tajného kódu odebrat, najdete podrobnější pokyny v části Nasazení do služby App Service – Odebrání tajného kódu . Tyto pokyny přidávají další kroky pro nasdílení hodnoty tajného kódu do služby Key Vault a použití odkazů služby Key Vault.
Aktualizace registrace aplikace Microsoft Entra ID
Vzhledem k tomu, že identifikátor URI přesměrování se změní na nasazenou aplikaci na službu Aplikace Azure Service, 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
/auth/redirect
ho ,https://<your-app-name>.azurewebsites.net/auth/redirect
například .Zvolte Uložit.
Nasazení aplikace
Teď jste připraveni nasadit aplikaci do služby Aplikace Azure Service. Pomocí následujícího příkazu se ujistěte, že jste přihlášení ke svému prostředí Azure a spusťte nasazení:
az login
S veškerou konfigurací připravenou v souboru pom.xml teď můžete pomocí následujícího příkazu nasadit aplikaci v Javě do Azure:
mvn package azure-webapp:deploy
Po dokončení nasazení je vaše aplikace připravená na http://<your-app-name>.azurewebsites.net/
adrese . Otevřete adresu URL v místním webovém prohlížeči, kde byste měli vidět úvodní stránku msal4j-servlet-auth
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.
- Na další stránce postupujte podle pokynů a přihlaste se pomocí účtu zvoleného zprostředkovatele identity.
- Všimněte si, že kontextové tlačítko se teď zobrazuje odhlásit a zobrazit vaše uživatelské jméno.
- Výběrem podrobností o tokenu ID zobrazíte některé dekódované deklarace identity tokenu ID.
- Máte také možnost upravit svůj profil. Výběrem odkazu můžete upravit podrobnosti, jako je vaše zobrazované jméno, místo pobytu a povolání.
- Pomocí tlačítka v rohu se odhlaste.
- Po odhlášení přejděte na následující adresu URL stránky s podrobnostmi o tokenu:
http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_token_details
. Tady si můžete všimnout, jak aplikace místo deklarací identity tokenu ID zobrazuje401: unauthorized
chybu.
O kódu
Tato ukázka ukazuje, jak pomocí MSAL4J přihlásit uživatele k vašemu tenantovi Azure AD B2C.
Obsah
Následující tabulka ukazuje obsah složky ukázkového projektu:
Soubor nebo složka | Popis |
---|---|
AuthHelper.java | Pomocné funkce pro ověřování |
Config.java | Spouští se při spuštění a konfiguruje čtečku vlastností a protokolovací nástroj. |
authentication.properties | Microsoft Entra ID a konfigurace programu. |
AuthenticationFilter.java | Přesměruje neověřené požadavky na chráněné prostředky na stránku 401. |
MsalAuthSession | Vytvoří instanci s objektem HttpSession . Ukládá všechny atributy relace související s MSAL v atributu relace. |
____Servlet.java | Všechny dostupné koncové body jsou definovány ve třídách .java končících ____Servlet.java. |
CHANGELOG.md | Seznam změn v ukázce |
CONTRIBUTING.md | Pokyny pro přispívání do ukázky |
LICENCE | Licence pro ukázku. |
ConfidentialClientApplication
Instance ConfidentialClientApplication
se vytvoří v souboru AuthHelper.java , jak je znázorněno v následujícím příkladu. Tento objekt pomáhá vytvořit autorizační adresu URL Azure AD B2C a také pomáhá vyměnit ověřovací token pro přístupový token.
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.b2cAuthority(AUTHORITY + policy)
.build();
Pro vytváření instancí se používají následující parametry:
- ID klienta aplikace.
- Tajný klíč klienta, což je požadavek na důvěrné klientské aplikace.
- Autorita Azure AD B2C zřetězená s odpovídající
UserFlowPolicy
možností registrace, přihlášení, úpravy profilu nebo resetování hesla.
V této ukázce se tyto hodnoty čtou ze souboru authentication.properties pomocí čtečky vlastností v souboru Config.java .
Ukázka krok za krokem
Následující kroky poskytují návod k funkcím aplikace:
Prvním krokem procesu přihlášení je odeslání požadavku na
/authorize
koncový bod pro vašeho tenanta Azure Active Directory B2C. Instance MSAL4JConfidentialClientApplication
se používá k vytvoření adresy URL žádosti o autorizaci a aplikace přesměruje prohlížeč na tuto adresu URL, jak je znázorněno v následujícím příkladu:final ConfidentialClientApplication client = getConfidentialClientInstance(policy); final AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters .builder(REDIRECT_URI, Collections.singleton(SCOPES)).responseMode(ResponseMode.QUERY) .prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String redirectUrl = client.getAuthorizationRequestUrl(parameters).toString(); Config.logger.log(Level.INFO, "Redirecting user to {0}", redirectUrl); resp.setStatus(302); resp.sendRedirect(redirectUrl);
Následující seznam popisuje funkce tohoto kódu:
AuthorizationRequestUrlParameters
: Parametry, které musí být nastaveny pro sestavení AuthorizationRequestUrl.REDIRECT_URI
: Když Azure AD B2C přesměruje prohlížeč spolu s ověřovacím kódem po shromáždění přihlašovacích údajů uživatele.SCOPES
: Obory jsou oprávnění požadovaná aplikací.Za normálních okolností by tři obory stačily
openid profile offline_access
pro příjem odpovědi tokenu ID. MSAL4J ale vyžaduje, aby všechny odpovědi z Azure AD B2C obsahovaly také přístupový token.Aby Služba Azure AD B2C mohla vydávat přístupový token i token ID, musí požadavek obsahovat další obor prostředků. Vzhledem k tomu, že tato aplikace ve skutečnosti nevyžaduje obor externího prostředku, přidá vlastní ID klienta jako čtvrtý obor, aby získal přístupový token.
Úplný seznam oborů požadovaných aplikací najdete v souboru authentication.properties .
ResponseMode.QUERY
: Azure AD B2C může vrátit odpověď jako parametry formuláře v požadavku HTTP POST nebo jako parametry řetězce dotazu v požadavku HTTP GET.Prompt.SELECT_ACCOUNT
: Azure AD B2C by měl uživatele požádat, aby vybral účet, vůči kterému se má ověřit.state
: Jedinečná proměnná nastavená aplikací do relace pro každou žádost o token a zničena po přijetí odpovídající zpětného volání přesměrování Azure AD B2C. Proměnná stavu zajišťuje, že požadavky Azure AD B2C na autorizační/auth_redirect endpoint
požadavky Azure AD B2C pocházejí z této aplikace a této relace, čímž brání útokům CSRF. To se provádí v souboru AADRedirectServlet.java .nonce
: Jedinečná proměnná nastavená aplikací do relace pro jednotlivé žádosti o token a zničena po přijetí odpovídajícího tokenu. Tato nece se přepíše na výsledné tokeny vydávané službou Azure AD B2C, čímž zajistí, že nedojde k žádnému útoku na přehrání tokenu.
Uživateli se zobrazí výzva k přihlášení službou Azure Active Directory B2C. Pokud je pokus o přihlášení úspěšný, prohlížeč uživatele se přesměruje do koncového bodu přesměrování aplikace. Platný požadavek na tento koncový bod obsahuje autorizační kód.
Instance
ConfidentialClientApplication
pak tento autorizační kód pro token ID a přístupový token v Azure Active Directory B2C vymění, jak je znázorněno v následujícím příkladu:final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(REDIRECT_URI)) .scopes(Collections.singleton(SCOPES)).build(); final ConfidentialClientApplication client = AuthHelper .getConfidentialClientInstance(policy); final Future<IAuthenticationResult> future = client.acquireToken(authParams); final IAuthenticationResult result = future.get();
Následující seznam popisuje funkce tohoto kódu:
AuthorizationCodeParameters
: Parametry, které musí být nastaveny pro výměnu autorizačního kódu pro ID nebo přístupový token.authCode
: Autorizační kód přijatý v koncovém bodu přesměrování.REDIRECT_URI
: Identifikátor URI přesměrování použitý v předchozím kroku musí být znovu předán.SCOPES
: Obory použité v předchozím kroku musí být předány znovu.
Pokud
acquireToken
je deklarace identity tokenu úspěšné, extrahují se a deklarace identity nonce se ověří proti nece uložené v relaci, jak je znázorněno v následujícím příkladu:parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache); validateNonce(msalAuth) processSuccessfulAuthentication(msalAuth);
Pokud je stav ověřování úspěšně ověřen, stav ověřování se umístí do relace na straně serveru a využívá metody vystavené
MsalAuthSession
třídou, jak je znázorněno v následujícím příkladu:msalAuth.setAuthenticated(true); msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
Více informací
- Co je Azure Active Directory B2C?
- Typy aplikací, které lze použít ve službě Active Directory B2C
- Doporučení a osvědčené postupy pro Azure Active Directory B2C
- Relace Azure AD B2C
- Microsoft Authentication Library (MSAL) pro Javu
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.