Povolení přihlašování pro aplikace WebSphere v Javě pomocí MSAL4J s Azure Active Directory B2C
Tento článek ukazuje aplikaci Java Servlet, 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
Tyto pokyny předpokládají, že jste nainstalovali WebSphere a nastavili server. Pokyny najdete v tématu Nasazení aplikačního serveru WebSphere (tradičního) clusteru ve službě Azure Virtual Machines pro základní nastavení serveru.
Před nasazením do WebSphere proveďte některé změny konfigurace v samotné ukázce pomocí následujících kroků a pak sestavte nebo znovu sestavte balíček:
Přejděte do souboru authentication.properties vaší aplikace a změňte hodnotu
app.homePage
na adresu URL serveru a číslo portu, které chcete použít, jak je znázorněno v následujícím příkladu:# 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://<server-url>:<port-number>/msal4j-servlet-auth/
Po uložení tohoto souboru pomocí následujícího příkazu znovu sestavte aplikaci:
mvn clean package
Po dokončení sestavování kódu zkopírujte soubor .war do systému souborů cílového serveru.
Musíte také provést stejnou změnu v registraci aplikace Azure, kde jste ji nastavili na webu Azure Portal jako hodnotu identifikátoru URI přesměrování na kartě Ověřování .
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, připojte /auth/redirect –
https://<server-url>:<port-number>/auth/redirect
například .Zvolte Uložit.
Pomocí následujících kroků nasaďte ukázku pomocí konzoly integrovaných řešení WebSphere:
Na kartě Aplikace vyberte Nová aplikace a pak Nová podniková aplikace.
Zvolte soubor .war, který jste vytvořili, a pak vyberte Další, dokud se nedostanete ke kořenovému kontextu mapy pro krok instalace webových modulů. Ostatní výchozí nastavení by měla být v pořádku.
Pro kořen kontextu ho nastavte na stejnou hodnotu jako za číslem portu v identifikátoru URI přesměrování, který jste nastavili v ukázkové konfiguraci nebo registraci aplikace Azure. To znamená, že pokud je
http://<server-url>:9080/msal4j-servlet-auth/
identifikátor URI přesměrování , pak by měl býtmsal4j-servlet-auth
kontextový kořen .Vyberte Dokončit.
Po dokončení instalace aplikace přejděte do části Podnikové aplikace WebSphere na kartě Aplikace .
V seznamu aplikací vyberte soubor .war, který jste nainstalovali, a pak vyberte Spustit a nasaďte.
Po dokončení nasazení přejděte na
http://<server-url>:9080/{whatever you set as the context root}
aplikaci a měli byste ji vidět.
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.
Další krok
Nasazení aplikací Java WebSphere do tradiční webSphere ve službě Azure Virtual Machines