Zabezpečení aplikací Java WebSphere pomocí rolí aplikací a deklarací rolí
Tento článek ukazuje aplikaci Java WebSphere, která používá OpenID Connect k přihlášení uživatelů a rolí aplikací Microsoft Entra ID (aplikační role) pro autorizaci.
Tato aplikace implementuje řízení přístupu na základě role (RBAC) pomocí aplikačních rolí a funkcí deklarací rolí v Microsoft Entra ID. Dalším přístupem je použití skupin a deklarací identity skupin Microsoft Entra ID. Skupiny a role aplikací Microsoft Entra ID se vzájemně nevylučují. Můžete je použít k zajištění jemně odstupňovaného řízení přístupu.
RBAC můžete také použít s rolemi aplikací a deklaracemi rolí k bezpečnému vynucování zásad autorizace.
Video, které popisuje tento scénář a tuto ukázku, najdete v tématu Implementace autorizace v aplikacích pomocí rolí aplikací, skupin zabezpečení, oborů a rolí adresáře.
Další informace o tom, jak protokoly fungují v tomto scénáři a v jiných scénářích, najdete v tématu Ověřování a autorizace.
Tato aplikace používá MSAL pro Javu (MSAL4J) k přihlášení uživatele a získání tokenu ID z Microsoft Entra ID.
Tato ukázka nejprve používá knihovnu MSAL pro Javu (MSAL4J) k přihlášení uživatele. Na domovské stránce se uživateli zobrazí možnost zobrazení deklarací identity v tokenech ID. Tato aplikace také umožňuje uživatelům zobrazit stránku privilegovaného správce nebo běžnou stránku uživatele v závislosti na přiřazené roli aplikace. Cílem je poskytnout příklad toho, jak v rámci aplikace přístup k určitým funkcím nebo stránkám je omezený na podmnožinu uživatelů v závislosti na tom, do jaké role patří.
Tento druh autorizace se implementuje pomocí RBAC. V případě RBAC uděluje správce oprávnění rolím, nikoli jednotlivým uživatelům nebo skupinám. Správce pak může přiřadit role různým uživatelům a skupinám a řídit, kdo má přístup k určitému obsahu a funkcím.
Tato ukázková aplikace definuje následující dvě role aplikace:
PrivilegedAdmin
: Oprávnění pro přístup pouze správců a stránek Běžných uživatelů.RegularUser
: Oprávnění pro přístup na stránku Běžní uživatelé .
Tyto role aplikace jsou definovány na webu Azure Portal v manifestu registrace aplikace. Když se uživatel přihlásí k aplikaci, id Microsoft Entra vygeneruje deklaraci rolí pro každou roli udělenou jednotlivě uživateli ve formě členství v rolích.
Uživatele a skupiny můžete přiřadit k rolím prostřednictvím webu Azure Portal.
Poznámka:
Deklarace identity rolí nejsou k dispozici pro uživatele typu host v tenantovi, pokud https://login.microsoftonline.com/common/
se koncový bod používá jako autorita pro přihlášení uživatelů. Musíte se přihlásit uživatele k tenantovi koncovému bodu, například https://login.microsoftonline.com/tenantid
.
Požadavky
- Sada JDK verze 8 nebo vyšší
- Maven 3
- Tenant Microsoft Entra ID. Další informace naleznete v tématu Získání tenanta Microsoft Entra ID.
- Uživatelský účet ve vašem vlastním tenantovi Microsoft Entra ID, pokud chcete pracovat jenom s účty v adresáři organizace – to znamená režim s jedním tenantem. Pokud jste ještě ve svém tenantovi nevytvořili uživatelský účet, měli byste to udělat předtím, než budete pokračovat. Další informace najdete v tématu Vytváření, pozvání a odstraňování uživatelů.
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/3-Authorization-II/roles
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-servlet-webapp-roles)
Nejprve zaregistrujte novou aplikaci na webu Azure Portal podle pokynů v rychlém startu: Registrace aplikace na platformě Microsoft Identity Platform.
Potom pomocí následujících kroků dokončete registraci:
Přejděte na stránku Microsoft identity platform pro vývojáře Registrace aplikací.
Vyberte Nová registrace.
Na stránce Registrace aplikace, 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-servlet-webapp-roles
například .V části Podporované typy účtů vyberte jednu z následujících možností:
- V tomto organizačním adresáři vyberte Účty jenom v případě, že vytváříte aplikaci pro použití pouze uživateli ve vašem tenantovi – to znamená aplikace s jedním tenantem .
V části Identifikátor URI přesměrování vyberte v poli se seznamem web a zadejte následující identifikátor URI přesměrování:
http://localhost:8080/msal4j-servlet-roles/auth/redirect
.
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.
Definování aplikačních rolí
K definování rolí aplikace použijte následující kroky:
Stále ve stejné registraci aplikace vyberte v navigačním podokně role aplikace.
Vyberte Vytvořit roli aplikace a zadejte následující hodnoty:
- Jako zobrazovaný název zadejte vhodný název, například PrivilegedAdmin.
- Pro povolené typy členů zvolte Možnost Uživatel.
- Jako hodnotu zadejte PrivilegedAdmin.
- Jako popis zadejte PrivilegedAdmins, kteří můžou zobrazit stránku správce.
Vyberte Vytvořit roli aplikace a zadejte následující hodnoty:
- Jako zobrazovaný název zadejte vhodný název, například RegularUser.
- Pro povolené typy členů zvolte Možnost Uživatel.
- Jako hodnotu zadejte RegularUser.
- Jako popis zadejte RegularUsers, kteří mohou zobrazit stránku uživatele.
Výběrem možnosti Použít změny uložte.
Přiřazení uživatelů k rolím aplikace
Pokud chcete přidat uživatele do dříve definované role aplikace, postupujte podle těchto pokynů: Přiřaďte uživatele a skupiny k rolím.
Konfigurace aplikace (java-servlet-webapp-roles) 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).
Vyhledejte řetězec
{enter-your-tenant-id-here}
. Nahraďte existující hodnotu ID tenanta Microsoft Entra ID.Vyhledejte řetězec
{enter-your-client-id-here}
a nahraďte existující hodnotu ID aplikace neboclientId
java-servlet-webapp-call-graph
aplikace zkopírovanou z webu Azure Portal.Najděte řetězec
{enter-your-client-secret-here}
a nahraďte existující hodnotu hodnotou, kterou jste uložili při vytvářeníjava-servlet-webapp-roles
aplikace, na webu Azure Portal.app.roles
Najděte vlastnost a ujistěte se, že je hodnota nastavená ,app.roles=admin PrivilegedAdmin, user RegularUser
nebo nahraďte názvy konkrétních rolí.
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 v tenantovi Microsoft Entra ID.
- Na obrazovce souhlasu si všimněte požadovaných oborů.
- 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.
- Pokud chcete stránku zobrazit
/admin_only
, vyberte Pouze správci. Tuto stránku můžou zobrazit jenom uživatelé s rolíPrivilegedAdmin
aplikace. 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é s rolíRegularUser
PrivilegedAdmin
aplikace. V opačném případě se zobrazí zpráva o chybě autorizace. - Pomocí tlačítka v rohu se odhlaste.
O kódu
Tato ukázka používá MSAL pro Javu (MSAL4J) k přihlášení uživatele a získání tokenu ID, který může obsahovat deklaraci identity rolí. Na základě deklarace identity rolí může přihlášený uživatel přistupovat k žádným, jednomu nebo oběma chráněným stránkám Admins Only
a Regular Users
.
Pokud chcete replikovat chování této ukázky, můžete zkopírovat soubor pom.xml a obsah pomocných rutin a složek authservlets ve složce src/main/java/com/microsoft/azuresamples/msal4j. Potřebujete také soubor authentication.properties . Tyto třídy a soubory obsahují obecný kód, který můžete použít v široké škále aplikací. Zbývající část ukázky můžete také zkopírovat, ale ostatní třídy a soubory jsou vytvořené speciálně tak, aby řešily cíl této ukázky.
Obsah
Následující tabulka ukazuje obsah složky ukázkového projektu:
Soubor nebo složka | Popis |
---|---|
src/main/java/com/microsoft/azuresamples/msal4j/roles/ | Tento adresář obsahuje třídy definující back-endovou obchodní logiku aplikace. |
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ | Tento adresář obsahuje třídy, které se používají k přihlášení a odhlášení koncových bodů. |
____Servlet.java | Všechny dostupné koncové body jsou definovány ve třídách .java končících ____Servlet.java. |
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ | Pomocné třídy pro ověřování. |
AuthenticationFilter.java | Přesměruje neověřené požadavky na chráněné koncové body na stránku 401. |
src/main/resources/authentication.properties | Microsoft Entra ID a konfigurace programu. |
src/main/webapp/ | Tento adresář obsahuje uživatelské rozhraní – šablony JSP. |
CHANGELOG.md | Seznam změn v ukázce |
CONTRIBUTING.md | Pokyny pro přispívání do ukázky |
LICENCE | Licence pro ukázku. |
Zpracování deklarace identity rolí v tokenu ID
Deklarace identity rolí tokenu obsahuje názvy rolí, ke kterým je přihlášený uživatel přiřazený, jak je znázorněno v následujícím příkladu:
{
...
"roles": [
"Role1",
"Role2",]
...
}
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 Microsoft Entra a také pomáhá vyměnit ověřovací token pro přístupový token.
// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.authority(AUTHORITY)
.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 MICROSOFT Entra ID, která zahrnuje ID vašeho tenanta Microsoft Entra.
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 Microsoft Entra ID. Instance MSAL4JConfidentialClientApplication
slouží k vytvoření adresy URL žádosti o autorizaci. Aplikace přesměruje prohlížeč na tuto adresu URL, což je místo, kde se uživatel přihlásí.final ConfidentialClientApplication client = getConfidentialClientInstance(); AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES)) .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString(); contextAdapter.redirectUser(authorizeUrl);
Následující seznam popisuje funkce tohoto kódu:
AuthorizationRequestUrlParameters
: Parametry, které musí být nastaveny pro sestavení AuthorizationRequestUrl.REDIRECT_URI
: Kde Microsoft Entra ID přesměruje prohlížeč – spolu s ověřovacím kódem – po shromáždění přihlašovacích údajů uživatele. Musí odpovídat identifikátoru URI přesměrování v registraci aplikace Microsoft Entra ID na webu Azure Portal.SCOPES
: Obory jsou oprávnění požadovaná aplikací.- Za normálních okolností stačí tři obory
openid profile offline_access
pro příjem odpovědi tokenu ID. - Úplný seznam oborů požadovaných aplikací najdete v souboru authentication.properties . Můžete přidat další obory, například
User.Read
.
- Za normálních okolností stačí tři obory
Uživateli se zobrazí výzva k přihlášení pomocí ID Microsoft Entra. 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 vymění z Microsoft Entra ID.// First, validate the state, then parse any error codes in response, then extract the authCode. Then: // build the auth code params: final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build(); // Get a client instance and leverage it to acquire the token: final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance(); final IAuthenticationResult result = client.acquireToken(authParams).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. Pokud kontrola nesouvisení projde, výsledky se umístí docontext
instanceIdentityContextData
relace a uloží se do relace. Aplikace pak může vytvořitIdentityContextData
instanci z relace prostřednictvím instanceIdentityContextAdapterServlet
, kdy k ní potřebuje přístup, jak je znázorněno v následujícím kódu:// parse IdToken claims from the IAuthenticationResult: // (the next step - validateNonce - requires parsed claims) context.setIdTokenClaims(result.idToken()); // if nonce is invalid, stop immediately! this could be a token replay! // if validation fails, throws exception and cancels auth: validateNonce(context); // set user to authenticated: context.setAuthResult(result, client.tokenCache().serialize());
Ochrana tras
Informace o tom, jak ukázková aplikace filtruje přístup k trasám, najdete v tématu AuthenticationFilter.java. V souboru app.protect.authenticated
authentication.properties vlastnost obsahuje trasy oddělené čárkami, ke kterým mají přístup pouze ověření uživatelé, jak je znázorněno v následujícím příkladu:
# for example, /token_details requires any user to be signed in and does not require special roles claim(s)
app.protect.authenticated=/token_details
Všechny trasy uvedené v sadách pravidel oddělených čárkami jsou app.protect.roles
také mimo limity pro neověřené uživatele, jak je znázorněno v následujícím příkladu. Tyto trasy ale obsahují také seznam členství v rolích aplikací oddělených mezerami: Po ověření mají k těmto trasám přístup jenom uživatelé, kteří mají alespoň jednu z odpovídajících rolí.
# local short names for app roles - for example, sets admin to mean PrivilegedAdmin (useful for long rule sets defined in the next key, app.protect.roles)
app.roles=admin PrivilegedAdmin, user RegularUser
# A route and its corresponding <space-separated> role(s) that can access it; the start of the next route & its role(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by PrivilegedAdmin, /regular_user can be accessed by PrivilegedAdmin role and the RegularUser role
app.protect.roles=/admin_only admin, /regular_user admin user
Rozsahy
Obory říkají Microsoft Entra ID úrovně přístupu, kterou aplikace požaduje.
V závislosti na požadovaných oborech zobrazí ID Microsoft Entra dialog pro vyjádření souhlasu uživateli při přihlášení. Pokud uživatel souhlasí s jedním nebo více obory a získá token, jsou obory s souhlasem zakódovány do výsledného access_token
.
Obory požadované aplikací najdete v tématu authentication.properties. Tyto tři obory jsou ve výchozím nastavení požadovány knihovnou MSAL a podle id Microsoft Entra.
Více informací
- Microsoft Authentication Library (MSAL) pro Javu
- Microsoft Identity Platform
- Rychlý start: registrace aplikace pomocí platformy identity Microsoft
- Principy prostředí souhlasu aplikace Microsoft Entra ID
- Vysvětlení souhlasu uživatele a správce
- Ukázky kódu MSAL
- Postupy: Přidání rolí aplikace do aplikace a jejich přijetí v tokenu
- Správa přiřazení uživatelů pro aplikaci v Microsoft Entra ID
Další krok
Nasazení aplikací Java WebSphere do tradiční webSphere ve službě Azure Virtual Machines