Beveiligde WebSphere Liberty/Open Liberty-toepassingen met Microsoft Entra ID met behulp van OpenID Connect
In dit artikel leest u hoe u IBM WebSphere Liberty/Open Liberty-toepassingen beveiligt met Microsoft Entra ID met behulp van OpenID Connect (OIDC).
In dit artikel leert u het volgende:
- Stel een OIDC-provider in met Microsoft Entra-id.
- Bescherm een WebSphere Liberty/Open Liberty-app met behulp van OIDC.
- Voer de WebSphere Liberty/Open Liberty-app uit en test deze.
Vereisten
- Een Azure-abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
- Een Azure-identiteit met ten minste de rol Cloud Application Administrator Microsoft Entra. Zie Roltoewijzingen van Microsoft Entra en ingebouwde Rollen van Microsoft Entra weergeven voor meer informatie.
- Een Microsoft Entra-tenant. Als u geen bestaande tenant hebt, raadpleegt u quickstart: Een tenant instellen.
- Een lokale computer waarop een Unix-achtig besturingssysteem is geïnstalleerd, bijvoorbeeld Ubuntu, macOS of Windows-subsysteem voor Linux.
- Git.
- Een Java SE-implementatie, versie 21 of hoger, bijvoorbeeld de Microsoft-build van OpenJDK.
- Maven, versie 3.9.3 of hoger.
Een OIDC-provider instellen met Microsoft Entra-id
OpenID Connect is een standaardverificatieprotocol dat door Microsoft Entra ID wordt ondersteund. In deze sectie stelt u een OIDC-provider in met Microsoft Entra-id voor gebruik met uw WebSphere Liberty/Open Liberty-app. In een latere sectie configureert u de WebSphere Liberty/Open Liberty-app met behulp van OIDC om gebruikers in uw Microsoft Entra-tenant te verifiëren en autoriseren.
Gebruikers maken in Microsoft Entra-tenant
Maak eerst twee gebruikers in uw Microsoft Entra-tenant door de stappen te volgen in Het maken, uitnodigen en verwijderen van gebruikers. U hebt alleen de sectie Een nieuwe gebruiker maken nodig. Gebruik de volgende aanwijzingen terwijl u het artikel doorloopt en ga vervolgens terug naar dit artikel nadat u gebruikers in uw Microsoft Entra-tenant hebt gemaakt.
Als u een gebruiker wilt maken die als beheerder in de app moet fungeren, gebruikt u de volgende stappen:
- Wanneer u bij het tabblad Basisbeginselen in de sectie Een nieuwe gebruiker maken bent, voert u de volgende stappen uit:
Voer de beheerder in voor de principal-naam van de gebruiker. Sla de waarde op zodat u deze later kunt gebruiken wanneer u zich aanmeldt bij de app.
Voor de bijnaam van Mail selecteert u Afleiden van de principal-naam van de gebruiker
Voer beheerder in bij Weergavenaam.
Selecteer voor Wachtwoord automatisch wachtwoord genereren. Kopieer en sla de wachtwoordwaarde op die u later wilt gebruiken wanneer u zich aanmeldt bij de app.
Selecteer Account ingeschakeld.
Selecteer Beoordelen en maken>Maken. Wacht totdat de gebruiker is gemaakt.
Wacht een minuut of zo en selecteer Vernieuwen. U ziet nu de nieuwe gebruiker in de lijst.
Als u een gebruiker wilt maken die als gebruiker in de app moet fungeren, herhaalt u deze stappen, maar gebruikt u de volgende waarden:
- Voer de gebruiker in voor user principal name.
- Voer gebruiker in bij Weergavenaam.
Een toepassing registreren in Microsoft Entra-id
Registreer vervolgens een toepassing door de stappen in quickstart te volgen: Een toepassing registreren bij het Microsoft Identity Platform. Gebruik de volgende aanwijzingen tijdens het doorlopen van het artikel en ga vervolgens terug naar dit artikel nadat u de toepassing hebt geregistreerd en geconfigureerd.
- Wanneer u de sectie Een toepassing registreren bereikt, voert u de volgende stappen uit:
- Voor ondersteunde accounttypen selecteert u alleen Accounts in deze organisatiemap (alleen standaardmap - één tenant).
- Wanneer de registratie is voltooid, slaat u de waarden voor de toepassings-id (client) en de map-id (tenant) op voor later gebruik in de app-configuratie.
- Wanneer u de sectie Een omleidings-URI toevoegen bereikt, slaat u de stappen over zoals nu. U voegt de omleidings-URI later toe wanneer u de voorbeeld-app lokaal in dit artikel uitvoert en test.
- Wanneer u bij de sectie Referenties toevoegen bent, selecteert u het tabblad Een clientgeheim toevoegen.
- Wanneer u een clientgeheim toevoegt, schrijft u de waarde van het clientgeheim op voor later gebruik in de app-configuratie.
App-rollen toevoegen aan uw toepassing
Voeg vervolgens app-rollen toe aan uw toepassing door de stappen in App-rollen toevoegen aan uw toepassing toe te voegen en deze in het token te ontvangen. U hebt alleen de secties Rollen declareren voor een toepassing nodig en gebruikers en groepen toewijzen aan Microsoft Entra-rollen. Gebruik de volgende aanwijzingen terwijl u het artikel doorloopt en ga vervolgens terug naar dit artikel nadat u rollen voor de toepassing hebt declareren.
Wanneer u de rollen Declare voor een toepassingssectie bereikt, gebruikt u de gebruikersinterface van app-rollen om rollen te maken voor de beheerder en de gewone gebruiker.
Maak een gebruikersrol beheerder met behulp van de volgende waarden:
- Voer beheerder in bij Weergavenaam.
- Voor toegestane lidtypen selecteert u Gebruikers/groepen.
- Voer voor Waarde de beheerder in.
- Voer beheerder in bij Beschrijving.
- Selecteer Wilt u deze app-rol inschakelen?
Selecteer Toepassen. Wacht totdat de rol is gemaakt.
Maak een gewone gebruikersrol met dezelfde stappen, maar met de volgende waarden:
- Voer gebruiker in bij Weergavenaam.
- Voer voor Waarde de gebruiker in.
- Voer bij Beschrijving gebruiker in.
Wanneer u de sectie Gebruikers en groepen toewijzen aan Microsoft Entra-rollen bereikt, gebruikt u de volgende stappen:
Selecteer Gebruiker/groep toevoegen.
Selecteer in het deelvenster Toewijzing toevoegen voor gebruikers de optie Gebruikersbeheerder en selecteer rolbeheerder voor Een rol selecteren. Selecteer vervolgens Toewijzen. Wacht totdat de toepassingstoewijzing is voltooid. Mogelijk moet u de tabel sideways schuiven om de kolom Toegewezen rollen te zien.
Herhaal de vorige stappen om de gebruikersrol toe te wijzen aan de gebruiker.
Selecteer Vernieuwen en u ziet de gebruikers en rollen die zijn toegewezen in het deelvenster Gebruikers en groepen .
Mogelijk moet u de breedte van de kolomkoppen aanpassen om de weergave eruit te laten zien als de afbeelding.
Volg geen andere stappen in App-rollen toevoegen aan uw toepassing en ontvang deze in het token.
Een WebSphere Liberty/Open Liberty-app beveiligen met behulp van OpenID Connect
In deze sectie beveiligt u een WebSphere Liberty/Open Liberty-app die gebruikers in uw Microsoft Entra-tenant verifieert en autoriseert met behulp van OIDC. U leert ook hoe u gebruikers toegang geeft tot bepaalde onderdelen van de app met behulp van op rollen gebaseerd toegangsbeheer (RBAC). De app maakt gebruik van de programmatische beveiligingsbeleidsconfiguratie van de Jakarta Servlet-specificatie. Jakarta EE ondersteunt ook RESTful-webservices. Zie de sectie Volgende stappen voor een verwijzing naar een artikel over het beveiligen van een RESTful-webservicetoepassing.
De voorbeeld-WebSphere Liberty/Open Liberty-app voor deze quickstart bevindt zich op GitHub in de opslagplaats liberty-entra-id .
Verificatie en autorisatie inschakelen om de app te beveiligen
De app heeft een welkomstpaginaresource gedefinieerd in index.html, die wordt weergegeven in de volgende voorbeeldcode. Deze pagina is toegankelijk voor niet-geverifieerde gebruikers. Het hoofdpad van de welkomstpagina bevindt zich op /
.
<!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>
Vanaf de welkomstpagina kunnen gebruikers zich aanmelden bij de app om toegang te krijgen tot de profielpagina. De welkomstpagina bevat koppelingen om u aan te melden als gebruiker of als beheerder. De koppelingen bevinden zich respectievelijk op /profile/user
en /profile/admin
, respectievelijk.
Zowel /profile/user
als /profile/admin
koppelingen verwijzen naar de profielservlet, gedefinieerd in ProfileServlet.java, zoals wordt weergegeven in de volgende voorbeeldcode. Deze servlet is alleen toegankelijk voor geverifieerde gebruikers met behulp van de aantekening jakarta.servlet.annotation.ServletSecurity
en aantekening jakarta.servlet.annotation.HttpConstraint
. Het kenmerk rolesAllowed = {"users"}
geeft aan dat alleen geverifieerde gebruikers met een beveiligingsrol users
toegang hebben tot het /profile
pad. De geverifieerde gebruiker krijgt automatisch de users
rol toegewezen in het Liberty-configuratiebestand 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);
}
}
De profielservlet haalt de rollen van de gebruiker op uit het id-token en controleert of de gebruiker de admin
rol heeft wanneer de gebruiker toegang probeert te krijgen tot het /profile/admin
pad. Als de gebruiker niet over de admin
rol beschikt, retourneert de servlet de fout 403 Verboden. In andere gevallen haalt de servlet de naam van de gebruiker op en stuurt de aanvraag door naar de profielpagina met de naam en rollen van de gebruiker.
De profielpagina wordt gedefinieerd in profile.jsp, zoals wordt weergegeven in het volgende voorbeeld. Op deze pagina worden de naam en rollen van de gebruiker weergegeven. De profielpagina heeft ook een afmeldingskoppeling op /logout
. De profielpagina is geschreven JSP (Jakarta Server Pages). Let op het gebruik van ${}
expressies op de pagina. ${}
Geeft het gebruik van Jakarta Expression Language (EL) aan. EL-expressies worden vervangen door de waarden van de bijbehorende variabelen wanneer de pagina wordt weergegeven. Zie de sectie Volgende stappen voor een verwijzing naar de EL-specificatie.
<%@ 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>
Wanneer de gebruiker de koppeling selecteert om zich af te melden, roept de app de afmeldingsservice aan, gedefinieerd in LogoutServlet.java, zoals wordt weergegeven in de volgende voorbeeldcode. De afmeldingsservicelet roept de methode aan om de request.logout()
gebruiker af te melden en stuurt de gebruiker vervolgens door naar de welkomstpagina.
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("/");
}
}
De WebSphere Liberty/Open Liberty-app uitvoeren en testen
In deze sectie voert u de WebSphere Liberty/Open Liberty-app uit en test u deze om te zien hoe deze werkt met Microsoft Entra ID als de OIDC-provider.
Een omleidings-URI toevoegen aan de app-registratie
Als u de app lokaal wilt uitvoeren en testen, moet u een omleidings-URI toevoegen aan de app-registratie. Volg de instructies in de sectie Een omleidings-URI van quickstart toevoegen: Registreer een toepassing bij het Microsoft Identity Platform en gebruik de volgende waarden:
- Voor Platformen configureren selecteert u Web.
- Voer voor omleidings-URI's de tekst in
https://localhost:9443/ibm/api/social-login/redirect/liberty-entra-id
.
Het voorbeeld voorbereiden
Gebruik de volgende stappen om de voorbeeld-app voor te bereiden:
Gebruik de volgende opdrachten om de voorbeeld-app te klonen vanuit GitHub:
git clone https://github.com/Azure-Samples/liberty-entra-id cd liberty-entra-id git checkout 2024-09-26
Als u een bericht ziet over een losgekoppelde HEAD-status , is dit bericht veilig te negeren. Dit bericht betekent alleen dat u een tag hebt uitgecheckt.
Gebruik de volgende opdrachten om de volgende omgevingsvariabelen te definiëren met de waarden die u eerder hebt geschreven:
export CLIENT_ID==<application/client-ID> export CLIENT_SECRET=<client-secret> export TENANT_ID=<directory/tenant-ID>
Deze omgevingsvariabelen bieden de waarden voor de ingebouwde ondersteuning van OIDC in WebSphere Liberty/Open Liberty. De bijbehorende OIDC-configuratie in de Liberty server.xml wordt weergegeven in het volgende voorbeeld.
<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" />
Als de waarde van een variabele niet is gedefinieerd in het configuratiebestand, leest WebSphere Liberty/Open Liberty de waarde uit de omgevingsvariabelen volgens de naamconventie. Zie Variabele vervangingsprioriteit voor meer informatie over de naamgevingsconversie.
De WebSphere Liberty/Open Liberty-app uitvoeren
U kunt de app uitvoeren met behulp van liberty-maven-plugin
. Selecteer een van de volgende methoden om de app uit te voeren:
Notitie
Als u WebSphere Liberty/Open Liberty wilt inschakelen om verbinding te maken met Microsoft Entra ID, moet u de opdracht uitvoeren in de shell waarin u de omgevingsvariabelen hebt gedefinieerd die worden weergegeven in de vorige sectie.
Voer de app uit in de ontwikkelmodus:
mvn liberty:dev
Voer de app uit in runtimemodus:
mvn liberty:run
Als u verschillende modi wilt proberen, gebruikt u Ctrl+C om de app te stoppen en vervolgens de app in een andere modus uit te voeren.
De WebSphere Liberty/Open Liberty-app testen
Nadat de app is uitgevoerd, opent u een webbrowser met een privétabblad en navigeert u naar https://localhost:9443
. Omdat het certificaat zelfondertekend is, ziet u mogelijk een waarschuwing over het certificaat. U kunt de waarschuwing veilig negeren en doorgaan naar de site.
U ziet de welkomstpagina met koppelingen om u aan te melden als een gebruiker of als beheerder. Als u een privétabblad gebruikt, voorkomt u dat bestaande Microsoft Entra ID-activiteiten die u in uw gewone browser hebt, vervuilen.
De referenties voor de twee gebruikers verzamelen
In dit artikel gebruikt Microsoft Entra ID het e-mailadres van elke gebruiker als de gebruikers-id voor aanmelding. Gebruik de volgende stappen om het e-mailadres voor de gebruiker met beheerdersrechten en gewone gebruiker op te halen:
- Meld u als cloudtoepassingsbeheerder aan bij het Microsoft Entra-beheercentrum.
- Als u toegang hebt tot meerdere tenants, gebruikt u het pictogram Instellingen () in het bovenste menu om over te schakelen naar de tenant waarin u de toepassing wilt registreren in het menu Mappen en abonnementen.
- Blader naar identiteitsgebruikers > > alle gebruikers.
- Zoek de gebruiker met beheerdersrechten in de lijst en selecteer deze.
- Zoek het veld User Principal Name .
- Gebruik het kopieerpictogram naast de waarde van het veld om het e-mailadres van de gebruiker op het klembord op te slaan. Sla de waarde op voor later gebruik.
- Volg dezelfde stappen om het e-mailadres voor de gewone gebruiker op te halen.
Gebruik de wachtwoorden voor de gebruiker met beheerdersrechten en de gewone gebruiker die u instelt bij het maken van de gebruikers.
De functionaliteit van de app oefenen
Gebruik de volgende stappen om de functionaliteit uit te oefenen:
Selecteer de koppeling Aanmelden als gebruiker . Meld u aan met de gewone gebruiker die u eerder hebt gemaakt. Nadat u zich hebt aangemeld, wordt u door Microsoft Entra ID omgeleid naar de profielpagina, waar u uw naam en rollen ziet.
Als dit de eerste keer is dat u zich aanmeldt, wordt u gevraagd uw wachtwoord bij te werken. Volg de instructies om uw wachtwoord bij te werken.
Als u wordt gevraagd bij Uw organisatie, zijn aanvullende beveiligingsgegevens vereist. Volg de aanwijzingen om de Microsoft Authenticator-app te downloaden en in te stellen. U kunt Vragen later selecteren om door te gaan met de test.
Als u wordt gevraagd om machtigingen die zijn aangevraagd, controleert u de machtigingen die door de app zijn aangevraagd. Selecteer Accepteren om door te gaan met de test.
Selecteer Afmelden om u af te melden bij de app. Nadat u zich hebt afgemeld, wordt u omgeleid naar de welkomstpagina.
Selecteer de koppeling Aanmelden als beheerder . Microsoft Entra ID leidt u om naar de aanmeldingspagina. Meld u aan met de beheerdergebruiker die u eerder hebt gemaakt. Nadat u zich hebt aangemeld, wordt u door Microsoft Entra ID omgeleid naar de vergelijkbare profielpagina, met een andere rol
admin
.Meld u opnieuw af en probeer u aan te melden als beheerder met de gewone gebruiker die u eerder hebt gemaakt. Er wordt een foutbericht weergegeven omdat de gewone gebruiker niet over de
admin
rol beschikt.
Resources opschonen
In dit artikel wordt u niet omgestuurd om uw app te implementeren in Azure. Er zijn geen Azure-resources om op te schonen voor de app, hoewel er Microsoft Entra ID-resources zijn . Als u een app in Azure wilt implementeren, kunt u de richtlijnen volgen waarnaar in de volgende sectie wordt verwezen.
Wanneer u klaar bent met de resources voor deze voorbeeld-app, gebruikt u de volgende stappen om de Microsoft Entra ID-resources op te schonen. Het verwijderen van ongebruikte Microsoft Entra ID-resources is een belangrijke aanbevolen procedure voor beveiliging.
- Verwijder de app-registratie die u hebt gemaakt door de stappen in Een toepassing verwijderen die is geregistreerd bij het Microsoft Identity Platform. U hoeft alleen de stappen te volgen in de sectie Een toepassing verwijderen die is geschreven door uw organisatie.
- De handeling van het verwijderen van de app-registratie moet ook de bedrijfstoepassing verwijderen. Zie Een bedrijfstoepassing verwijderen voor meer informatie over het verwijderen van bedrijfstoepassingen.
- Verwijder de gebruikers die u hebt gemaakt door de stappen te volgen in Het maken, uitnodigen en verwijderen van gebruikers.
Volgende stappen
In deze quickstart beveiligt u WebSphere Liberty/Open Liberty-toepassingen met Microsoft Entra ID met behulp van OIDC. Bekijk de volgende bronnen voor meer informatie:
- Een Java-toepassing implementeren met Open Liberty of WebSphere Liberty in Azure Container Apps
- WebSphere Liberty en Open Liberty implementeren in Azure Red Hat OpenShift
- Een Java-toepassing implementeren met Open Liberty of WebSphere Liberty op een AKS-cluster (Azure Kubernetes Service)
- OpenID Connect-verificatie met Microsoft Entra-id
- Microsoft identity platform en OAuth 2.0-autorisatiecodestroom
- Gebruikers verifiëren via sociale mediaproviders
- Social Media Login 1.0
- OpenID Connect-client 1.0
- Wat is OpenID Connect?
- Configuratie van programmatisch beveiligingsbeleid
- Een RESTful-webservice beveiligen met Jakarta EE
- Jakarta Expression Language