Zabezpečení aplikací WebSphere Liberty/Open Liberty pomocí Microsoft Entra ID pomocí OpenID Connect
V tomto článku se dozvíte, jak zabezpečit aplikace IBM WebSphere Liberty/Open Liberty pomocí Microsoft Entra ID pomocí OpenID Connect (OIDC).
V tomto článku získáte informace o těchto tématech:
- Nastavte zprostředkovatele OIDC s ID Microsoft Entra.
- Chraňte aplikaci WebSphere Liberty/Open Liberty pomocí OIDC.
- Spusťte a otestujte aplikaci WebSphere Liberty/Open Liberty.
Požadavky
- Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
- Identita Azure s alespoň rolí Microsoft Entra správce cloudových aplikací. Další informace naleznete v tématu Seznam přiřazení rolí Microsoft Entra a předdefinovaných rolí Microsoft Entra.
- Tenant Microsoft Entra. Pokud ještě tenanta nemáte, přečtěte si článek Rychlý start: Nastavení tenanta.
- Místní počítač s nainstalovaným operačním systémem Unix , například Ubuntu, macOS nebo Subsystém Windows pro Linux.
- Git
- Implementace Java SE verze 21 nebo novější – například sestavení OpenJDK od Microsoftu.
- Maven verze 3.9.3 nebo novější.
Nastavení zprostředkovatele OIDC s ID Microsoft Entra
OpenID Connect je oborový standardní ověřovací protokol, který podporuje Microsoft Entra ID. V této části nastavíte poskytovatele OIDC s Microsoft Entra ID pro použití s vaší aplikací WebSphere Liberty/Open Liberty. V další části nakonfigurujete aplikaci WebSphere Liberty/Open Liberty pomocí OIDC k ověřování a autorizaci uživatelů ve vašem tenantovi Microsoft Entra.
Vytváření uživatelů v tenantovi Microsoft Entra
Nejprve ve svém tenantovi Microsoft Entra vytvořte dva uživatele pomocí postupu v tématu Vytvoření, pozvání a odstranění uživatelů. Potřebujete jenom oddíl Vytvořit nového uživatele . Při procházení článku použijte následující pokyny a po vytvoření uživatelů v tenantovi Microsoft Entra se vraťte k tomuto článku.
Pokud chcete v aplikaci vytvořit uživatele, který bude sloužit jako správce, postupujte následovně:
- Když se dostanete na kartu Základy v části Vytvořit nového uživatele , postupujte následovně:
Jako hlavní název uživatele zadejte správce. Uložte hodnotu, abyste ji mohli později použít při přihlášení k aplikaci.
V části Poštovní přezdívka vyberte Možnost Odvodit z hlavního názvu uživatele
Jako zobrazované jméno zadejte správce.
Jako heslo vyberte Automaticky vygenerovat heslo. Zkopírujte a uložte hodnotu Heslo , která se použije později při přihlášení k aplikaci.
Vyberte Účet povolený.
Vyberte Zkontrolovat a vytvořit>Vytvořit. Počkejte, až se uživatel vytvoří.
Počkejte minutu nebo tak a vyberte Aktualizovat. V seznamu by se měl zobrazit nový uživatel.
Pokud chcete v aplikaci vytvořit uživatele, který bude sloužit jako uživatel, zopakujte tento postup, ale použijte následující hodnoty:
- Jako hlavní název uživatele zadejte uživatele.
- Do pole Zobrazované jméno zadejte uživatele.
Registrace aplikace v Microsoft Entra ID
V dalším kroku zaregistrujte aplikaci podle kroků v rychlém startu: Registrace aplikace na platformě Microsoft Identity Platform. Při procházení článku použijte následující pokyny a po registraci a konfiguraci aplikace se vraťte k tomuto článku.
- Když se dostanete do části Registrace aplikace , postupujte následovně:
- U podporovaných typů účtů vyberte Pouze účty v tomto adresáři organizace (pouze výchozí adresář – Jeden tenant).
- Po dokončení registrace uložte hodnoty ID aplikace (klienta) a ID adresáře (tenanta) pro pozdější použití v konfiguraci aplikace.
- Až se dostanete do části Přidat identifikátor URI přesměrování, přeskočte kroky, jak je vidět. Identifikátor URI přesměrování přidáte později při spuštění a otestování ukázkové aplikace místně v tomto článku.
- Když se dostanete do části Přidat přihlašovací údaje , vyberte kartu Přidat tajný klíč klienta.
- Když přidáte tajný klíč klienta, poznamenejte si hodnotu tajného klíče klienta, která se použije později v konfiguraci aplikace.
Přidání aplikačních rolí do aplikace
Potom do aplikace přidejte role aplikace pomocí postupu v části Přidání rolí aplikace do aplikace a jejich přijetí v tokenu. Potřebujete jenom oddíly Deklarovat role pro aplikaci a přiřadit uživatele a skupiny k rolím Microsoft Entra. Při procházení článku použijte následující pokyny a po deklarování rolí pro aplikaci se vraťte k tomuto článku.
Když se dostanete k části Deklarace rolí pro aplikaci , použijte uživatelské rozhraní role aplikace k vytvoření rolí pro správce a běžného uživatele.
Pomocí následujících hodnot vytvořte roli uživatele správce:
- Jako zobrazované jméno zadejte správce.
- V seznamu Povolené typy členů vyberte Uživatelé/skupiny.
- Jako hodnotu zadejte správce.
- Jako popis zadejte správce.
- Vyberte Chcete povolit tuto roli aplikace?
Vyberte Použít. Počkejte, až se role vytvoří.
Pomocí stejných kroků vytvořte běžnou roli uživatele, ale s následujícími hodnotami:
- Do pole Zobrazované jméno zadejte uživatele.
- Do pole Hodnota zadejte uživatele.
- Jako popis zadejte uživatele.
Když se dostanete k rolím Přiřadit uživatele a skupiny k rolím Microsoft Entra, postupujte následovně:
Vyberte Přidat uživatele nebo skupinu.
V podokně Přidat přiřazení v části Uživatelé vyberte správce uživatele a jako možnost Vybrat roli vyberte Správce role. Pak vyberte Přiřadit. Počkejte, až přiřazení aplikace proběhne úspěšně. Možná budete muset posunout tabulku bokem, abyste viděli sloupec přiřazený rolím.
Opakováním předchozích kroků přiřaďte roli Uživatele uživateli.
Vyberte Aktualizovat a měli byste vidět uživatele a role přiřazené v podokně Uživatelé a skupiny .
Možná budete muset upravit šířku záhlaví sloupců, aby zobrazení vypadalo jako obrázek.
Nepoužívejte žádné další kroky v části Přidání rolí aplikace do aplikace a jejich příjem v tokenu.
Ochrana aplikace WebSphere Liberty/Open Liberty pomocí OpenID Connect
V této části zabezpečíte aplikaci WebSphere Liberty/Open Liberty, která ověřuje a autorizuje uživatele ve vašem tenantovi Microsoft Entra pomocí OIDC. Dozvíte se také, jak uživatelům udělit přístup k určitým částem aplikace pomocí řízení přístupu na základě role (RBAC). Aplikace používá programovou konfiguraci zásad zabezpečení specifikace Jakarta Servlet. Jakarta EE také podporuje webové služby RESTful. V části Další kroky najdete odkaz na článek o zabezpečení aplikace webových služeb RESTful.
Ukázková aplikace WebSphere Liberty/Open Liberty pro účely tohoto rychlého startu je na GitHubu v úložišti liberty-entra-id .
Povolení ověřování a autorizace pro zabezpečení aplikace
Aplikace má definovaný prostředek úvodní stránky v index.html, který je zobrazený v následujícím ukázkovém kódu. Tato stránka je přístupná pro neověřené uživatele. Kořenová cesta úvodní stránky je na /
adrese .
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Greeting</title>
</head>
<body>
<h1>Hello, welcome to Open Liberty/WebSphere Liberty and Microsoft Entra ID integration!</h1>
<h1>
<a href="/profile/user">Sign in as user</a>
</h1>
<h1>
<a href="/profile/admin">Sign in as admin</a>
</h1>
</body>
</html>
Na úvodní stránce se uživatelé můžou přihlásit k aplikaci, aby mohli získat přístup ke stránce profilu. Úvodní stránka obsahuje odkazy na přihlášení jako uživatel nebo jako správce. Odkazy jsou na /profile/user
adrese a /profile/admin
v uvedeném pořadí.
Odkazy /profile/user
ukazují na servlet profilu definovaný v ProfileServlet.java, jak je znázorněno v následujícím ukázkovém /profile/admin
kódu. Tento servlet je přístupný pouze ověřeným uživatelům pomocí poznámek jakarta.servlet.annotation.ServletSecurity
a poznámek jakarta.servlet.annotation.HttpConstraint
. Atribut rolesAllowed = {"users"}
určuje, že k cestě /profile
mají přístup pouze ověření uživatelé s rolí users
zabezpečení. Ověřený uživatel má automaticky přiřazenou users
roli v konfiguračním souboru Liberty server.xml.
package com.example;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.HttpConstraint;
import jakarta.servlet.annotation.ServletSecurity;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import com.ibm.websphere.security.social.UserProfileManager;
import java.util.List;
@WebServlet(name = "ProfileServlet", urlPatterns = {"/profile/user","/profile/admin"})
@ServletSecurity(value = @HttpConstraint(rolesAllowed = {"users"},
transportGuarantee = ServletSecurity.TransportGuarantee.CONFIDENTIAL))
public class ProfileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
List<?> roles = UserProfileManager.getUserProfile().getIdToken().getClaims().getClaim("roles",
List.class);
String path = request.getServletPath();
if (path.equals("/profile/admin") && (null == roles || !roles.contains("admin"))) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
String username = request.getUserPrincipal().getName();
request.setAttribute("name", username);
request.setAttribute("roles", roles);
request
.getRequestDispatcher("/profile.jsp")
.forward(request, response);
}
}
Servlet profilu načte role uživatele z tokenu ID a zkontroluje, jestli má admin
uživatel roli, když se uživatel pokusí o přístup /profile/admin
k cestě. Pokud uživatel tuto roli nemá admin
, vrátí servlet chybu 403 Zakázáno. V jiných případech servlet načte jméno uživatele a předá požadavek na stránku profilu se jménem a rolemi uživatele.
Stránka profilu je definována v profile.jsp, jak je znázorněno v následujícím příkladu. Na této stránce se zobrazí jméno a role uživatele. Stránka profilu má také odkaz na odhlášení na adrese /logout
. Stránka profilu je napsána JSP (Jakarta Server Pages). Všimněte si použití ${}
výrazů na stránce. ${}
Označuje použití jazyka EL (Jakarta Expression Language). Výrazy EL se při vykreslení stránky nahradí hodnotami odpovídajících proměnných. Odkaz na specifikaci EL najdete v části Další kroky.
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Profile</title>
</head>
<body>
<h1>Hello, ${name}</h1>
<h2>Roles</h2>
<ul>
<c:forEach var="role" items="${roles}">
<li>${role}</li>
</c:forEach>
</ul>
<h1>
<b><a href="/logout">Sign out</a></b>
</h1>
</body>
</html>
Když uživatel vybere odkaz, který se má odhlásit, aplikace zavolá servlet odhlášení definovaný v LogoutServlet.java, jak je znázorněno v následujícím ukázkovém kódu. Odhlaste se servlet zavolá metodu request.logout()
pro odhlášení uživatele a pak přesměruje uživatele na úvodní stránku.
package com.example;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.HttpConstraint;
import jakarta.servlet.annotation.ServletSecurity;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "LogoutServlet", urlPatterns = "/logout")
@ServletSecurity(value = @HttpConstraint(rolesAllowed = {"users"},
transportGuarantee = ServletSecurity.TransportGuarantee.CONFIDENTIAL))
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
request.logout();
response.sendRedirect("/");
}
}
Spuštění a otestování aplikace WebSphere Liberty/Open Liberty
V této části spustíte a otestujete aplikaci WebSphere Liberty/Open Liberty, abyste zjistili, jak funguje s Microsoft Entra ID jako poskytovatelem OIDC.
Přidání identifikátoru URI přesměrování do registrace aplikace
Pokud chcete aplikaci úspěšně spustit a otestovat místně, musíte do registrace aplikace přidat identifikátor URI přesměrování. Postupujte podle pokynů v části Rychlý start Pro přidání identifikátoru URI přesměrování: Zaregistrujte aplikaci na platformě Microsoft Identity Platform a použijte následující hodnoty:
- Pro konfiguraci platforem vyberte Web.
- Pro identifikátory URI pro přesměrování zadejte
https://localhost:9443/ibm/api/social-login/redirect/liberty-entra-id
.
Příprava ukázky
Pomocí následujících kroků připravte ukázkovou aplikaci:
Pomocí následujících příkazů naklonujte ukázkovou aplikaci z GitHubu:
git clone https://github.com/Azure-Samples/liberty-entra-id cd liberty-entra-id git checkout 2024-09-26
Pokud se zobrazí zpráva o tom, že je v odpojeném stavu HEAD , je tato zpráva v bezpečí ignorovat. Tato zpráva znamená, že jste si rezervovali značku.
Pomocí následujících příkazů definujte následující proměnné prostředí s hodnotami, které jste si napsali dříve:
export CLIENT_ID==<application/client-ID> export CLIENT_SECRET=<client-secret> export TENANT_ID=<directory/tenant-ID>
Tyto proměnné prostředí poskytují hodnoty pro integrovanou podporu OIDC v WebSphere Liberty/Open Liberty. Odpovídající konfigurace OIDC v liberty server.xml je znázorněna v následujícím příkladu.
<oidcLogin id="liberty-entra-id" clientId="${client.id}" clientSecret="${client.secret}" discoveryEndpoint="https://login.microsoftonline.com/${tenant.id}/v2.0/.well-known/openid-configuration" signatureAlgorithm="RS256" userNameAttribute="preferred_username" />
Pokud hodnota proměnné není definovaná v konfiguračním souboru, webSphere Liberty/Open Liberty přečte hodnotu z proměnných prostředí podle zásad vytváření názvů. Podrobnosti o převodu názvů naleznete v tématu Priorita nahrazení proměnné.
Spuštění aplikace WebSphere Liberty/Open Liberty
Aplikaci můžete spustit pomocí liberty-maven-plugin
příkazu . Pokud chcete aplikaci spustit, vyberte jednu z následujících metod:
Poznámka:
Pokud chcete povolit webSphere Liberty/Open Liberty pro připojení k Microsoft Entra ID, nezapomeňte spustit příkaz v prostředí, ve kterém jste definovali proměnné prostředí uvedené v předchozí části.
Spusťte aplikaci v režimu vývoje:
mvn liberty:dev
Spusťte aplikaci v režimu runtime:
mvn liberty:run
Pokud chcete vyzkoušet různé režimy, pomocí ctrl+C aplikaci zastavte a pak spusťte aplikaci v jiném režimu.
Testování aplikace WebSphere Liberty/Open Liberty
Po spuštění aplikace otevřete webový prohlížeč s privátní kartou a přejděte na https://localhost:9443
. Vzhledem k tomu, že je certifikát podepsaný svým držitelem, může se zobrazit upozornění na certifikát. Upozornění můžete bezpečně ignorovat a pokračovat na web.
Měla by se zobrazit úvodní stránka s odkazy pro přihlášení jako uživatel nebo jako správce. Použití soukromé karty zabraňuje znečisťování stávající aktivity Microsoft Entra ID, které můžete mít v běžném prohlížeči.
Shromáždění přihlašovacích údajů pro dva uživatele
V tomto článku používá Microsoft Entra ID e-mailovou adresu každého uživatele jako ID uživatele pro přihlášení. Pomocí následujícího postupu získejte e-mailovou adresu uživatele s rolí správce a běžného uživatele:
- Přihlaste se do Centra pro správu Microsoft Entra jako alespoň správce cloudových aplikací.
- Pokud máte přístup k více tenantům, pomocí ikony Nastavení () v horní nabídce přepněte na tenanta, ve kterém chcete aplikaci zaregistrovat z nabídky Adresáře a předplatná.
- Přejděte k identitě > Uživatelé > všichni uživatelé.
- Vyhledejte uživatele správce v seznamu a vyberte ho.
- Vyhledejte pole Hlavní název uživatele.
- Pomocí ikony kopírování vedle hodnoty pole uložte e-mailovou adresu uživatele do schránky. Uložte hodnotu pro pozdější použití.
- Pokud chcete získat e-mailovou adresu pro běžného uživatele, postupujte stejně.
Použijte hesla pro uživatele správce a běžného uživatele, který jste nastavili při vytváření uživatelů.
Cvičení funkcí aplikace
Pomocí následujících kroků procvičte funkčnost:
Vyberte odkaz Přihlásit se jako uživatel. Přihlaste se pomocí běžného uživatele, který jste vytvořili dříve. Po přihlášení vás Microsoft Entra ID přesměruje na stránku profilu, kde uvidíte svoje jméno a role.
Pokud se přihlašujete poprvé, zobrazí se výzva k aktualizaci hesla. Podle pokynů aktualizujte heslo.
Pokud se zobrazí výzva k zadání informací o zabezpečení ve vaší organizaci, potřebujete další informace o zabezpečení. Postupujte podle pokynů a stáhněte a nastavte aplikaci Microsoft Authenticator a pokračujte v testování výběrem možnosti Požádat později .
Pokud se zobrazí výzva s požadovanými oprávněními, zkontrolujte oprávnění požadovaná aplikací. Výběrem možnosti Přijmout pokračujte v testu.
Pokud se chcete odhlásit z aplikace, vyberte Odhlásit se. Po odhlášení budete přesměrováni na úvodní stránku.
Vyberte odkaz Přihlásit se jako správce. Microsoft Entra ID vás přesměruje na přihlašovací stránku. Přihlaste se pomocí uživatele správce, který jste vytvořili dříve. Po přihlášení vás Microsoft Entra ID přesměruje na podobnou stránku profilu s jinou rolí
admin
.Znovu se odhlaste a zkuste se přihlásit jako správce s běžným uživatelem, který jste vytvořili dříve. Měla by se zobrazit chybová zpráva, protože běžný uživatel tuto roli nemá
admin
.
Vyčištění prostředků
Tento článek vás nesměruje na nasazení aplikace v Azure. Pro aplikaci se nedají vyčistit žádné prostředky Azure, i když existují prostředky Microsoft Entra ID. Pokud chcete nasadit aplikaci v Azure, můžete postupovat podle pokynů uvedených v další části.
Jakmile dokončíte prostředky pro tuto ukázkovou aplikaci, pomocí následujících kroků vyčistíte prostředky Microsoft Entra ID. Odebrání nepoužívaných prostředků Microsoft Entra ID je důležitým osvědčeným postupem zabezpečení.
- Odeberte registraci aplikace, kterou jste vytvořili, podle kroků v části Odebrání aplikace zaregistrované na platformě Microsoft Identity Platform. Stačí postupovat podle kroků v části Odebrání aplikace vytvořené vaší organizací.
- Odebrání registrace aplikace by také mělo odstranit podnikovou aplikaci. Další informace o odstraňování podnikových aplikací najdete v tématu Odstranění podnikové aplikace.
- Odstraňte uživatele, které jste vytvořili, podle pokynů v tématu Vytvoření, pozvání a odstranění uživatelů.
Další kroky
V tomto rychlém startu chráníte aplikace WebSphere Liberty/Open Liberty pomocí Microsoft Entra ID pomocí OIDC. Další informace najdete v následujících zdrojích informací:
- Nasazení aplikace v Javě pomocí Open Liberty nebo WebSphere Liberty v Azure Container Apps
- Nasazení WebSphere Liberty a Open Liberty v Azure Red Hat OpenShiftu
- Nasazení aplikace v Javě s platformou Open Liberty nebo WebSphere Liberty v clusteru Azure Kubernetes Service (AKS)
- Ověřování OpenID Connect s ID Microsoft Entra
- Microsoft Identity Platform a tok autorizačního kódu OAuth 2.0
- Ověřování uživatelů prostřednictvím poskytovatelů sociálních médií
- Přihlášení sociálních médií 1.0
- OpenID Connect Client 1.0
- Co je OpenID Connect
- Konfigurace programových zásad zabezpečení
- Jak zabezpečit webovou službu RESTful pomocí Jakarta EE
- Jakarta Expression Language