Skydda WebSphere Liberty/Open Liberty-program med Microsoft Entra-ID med OpenID Connect
Den här artikeln visar hur du skyddar IBM WebSphere Liberty/Open Liberty-program med Microsoft Entra-ID med Hjälp av OpenID Connect (OIDC).
I den här artikeln kan du se hur du:
- Konfigurera en OIDC-provider med Microsoft Entra-ID.
- Skydda en WebSphere Liberty/Open Liberty-app med hjälp av OIDC.
- Kör och testa appen WebSphere Liberty/Open Liberty.
Förutsättningar
- En Azure-prenumeration. Om du inte har en Azure-prenumeration kan du skapa ettkostnadsfritt konto innan du börjar.
- En Azure-identitet med minst rollen Molnprogramadministratör Microsoft Entra. Mer information finns i Lista microsoft entra-rolltilldelningar och inbyggda Microsoft Entra-roller.
- En Microsoft Entra-klientorganisation. Om du inte har någon befintlig klient kan du läsa Snabbstart: Konfigurera en klientorganisation.
- En lokal dator med ett Unix-liknande operativsystem installerat , till exempel Ubuntu, macOS eller Windows-undersystem för Linux.
- Git.
- En Java SE-implementering, version 21 eller senare – till exempel Microsoft-versionen av OpenJDK.
- Maven, version 3.9.3 eller senare.
Konfigurera en OIDC-provider med Microsoft Entra-ID
OpenID Connect är ett branschstandardautentiseringsprotokoll som stöds av Microsoft Entra ID. I det här avsnittet konfigurerar du en OIDC-provider med Microsoft Entra-ID för användning med din WebSphere Liberty/Open Liberty-app. I ett senare avsnitt konfigurerar du Appen WebSphere Liberty/Open Liberty med hjälp av OIDC för att autentisera och auktorisera användare i din Microsoft Entra-klientorganisation.
Skapa användare i Microsoft Entra-klientorganisationen
Skapa först två användare i din Microsoft Entra-klient genom att följa stegen i Skapa, bjuda in och ta bort användare. Du behöver bara avsnittet Skapa en ny användare . Använd följande anvisningar när du går igenom artikeln och gå sedan tillbaka till den här artikeln när du har skapat användare i din Microsoft Entra-klientorganisation.
Använd följande steg för att skapa en användare som ska fungera som "administratör" i appen:
- När du kommer till fliken Grundläggande i avsnittet Skapa en ny användare använder du följande steg:
För Användarens huvudnamn anger du administratör. Spara värdet så att du kan använda det senare när du loggar in på appen.
För E-post smeknamn väljer du Härled från användarens huvudnamn
Som Visningsnamn anger du Admin.
Som Lösenord väljer du Generera lösenord automatiskt. Kopiera och spara värdet Lösenord som ska användas senare när du loggar in på appen.
Välj Konto aktiverat.
Välj Granska + skapa>Skapa. Vänta tills användaren har skapats.
Vänta en minut eller så och välj Uppdatera. Du bör se den nya användaren i listan.
Om du vill skapa en användare som ska fungera som en "användare" i appen upprepar du de här stegen, men använder följande värden:
- För Användarens huvudnamn anger du användaren.
- Som Visningsnamn anger du Användare.
Registrera ett program i Microsoft Entra-ID
Registrera sedan ett program genom att följa stegen i Snabbstart: Registrera ett program med Microsofts identitetsplattform. Använd följande anvisningar när du går igenom artikeln och gå sedan tillbaka till den här artikeln när du har registrerat och konfigurerat programmet.
- När du kommer till avsnittet Registrera ett program använder du följande steg:
- För Kontotyper som stöds väljer du Endast Konton i den här organisationskatalogen (endast standardkatalog – enskild klient).
- När registreringen är klar sparar du värdena program-ID och katalog-ID (klientorganisation) som ska användas senare i appkonfigurationen.
- När du kommer till avsnittet Lägg till en omdirigerings-URI hoppar du över stegen som för tillfället. Du lägger till omdirigerings-URI:n senare när du kör och testar exempelappen lokalt i den här artikeln.
- När du kommer till avsnittet Lägg till autentiseringsuppgifter väljer du fliken Lägg till en klienthemlighet .
- När du lägger till en klienthemlighet skriver du ned värdet Klienthemlighet som ska användas senare i appkonfigurationen.
Lägga till approller i ditt program
Lägg sedan till approller i ditt program genom att följa stegen i Lägg till approller i ditt program och ta emot dem i token. Du behöver bara avsnitten Deklarera roller för ett program och Tilldela användare och grupper till Microsoft Entra-roller. Använd följande anvisningar när du går igenom artikeln och gå sedan tillbaka till den här artikeln när du har deklarerat roller för programmet.
När du når avsnittet Deklarera roller för ett program använder du användargränssnittet för approller för att skapa roller för administratören och den vanliga användaren.
Skapa en administratörsanvändarroll med hjälp av följande värden:
- Som Visningsnamn anger du Admin.
- För Tillåtna medlemstyper väljer du Användare/grupper.
- För Värde anger du administratör.
- Som Beskrivning anger du Admin.
- Välj Vill du aktivera den här approllen?.
Välj Använd. Vänta tills rollen har skapats.
Skapa en vanlig användarroll med hjälp av samma steg, men med följande värden:
- Som Visningsnamn anger du Användare.
- För Värde anger du användare.
- Som Beskrivning anger du Användare.
När du når avsnittet Tilldela användare och grupper till Microsoft Entra-roller använder du följande steg:
Välj Lägg till användare/grupp.
I fönstret Lägg till tilldelning för Användare väljer du Användaradministratör och för Välj en roll väljer du rolladministratör. Välj sedan Tilldela. Vänta tills programtilldelningen har slutförts. Du kan behöva rulla tabellen i sidled för att se kolumnen Rolltilldelad .
Upprepa föregående steg för att tilldela användarrollen till användaren Användare.
Välj Uppdatera så bör du se de användare och roller som tilldelats i fönstret Användare och grupper .
Du kan behöva justera bredden på kolumnrubrikerna så att vyn ser ut som bilden.
Följ inte några andra steg i Lägg till approller i ditt program och ta emot dem i token.
Skydda en WebSphere Liberty/Open Liberty-app med hjälp av OpenID Connect
I det här avsnittet skyddar du en WebSphere Liberty/Open Liberty-app som autentiserar och auktoriserar användare i din Microsoft Entra-klientorganisation med hjälp av OIDC. Du får också lära dig hur du ger användarna åtkomst till vissa delar av appen med hjälp av rollbaserad åtkomstkontroll (RBAC). Appen använder programmatisk säkerhetsprincipkonfiguration för Jakarta Servlet-specifikationen. Jakarta EE stöder även RESTful-webbtjänster. I avsnittet Nästa steg finns en referens till en artikel om hur du skyddar ett RESTful-webbtjänstprogram.
Exempelappen WebSphere Liberty/Open Liberty för den här snabbstarten finns på GitHub på lagringsplatsen liberty-entra-id .
Aktivera autentisering och auktorisering för att skydda appen
Appen har en välkomstsida som definierats i index.html, som visas i följande exempelkod. Den här sidan är tillgänglig för oautentiserade användare. Rotsökvägen till välkomstsidan finns på /
.
<!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>
Från välkomstsidan kan användare logga in på appen för att komma åt profilsidan. Välkomstsidan har länkar för att logga in som användare eller administratör. Länkarna finns på /profile/user
respektive /profile/admin
.
Både /profile/user
och /profile/admin
länkar pekar på profilservleten, som definieras i ProfileServlet.java, enligt följande exempelkod. Den här servleten är endast tillgänglig för autentiserade användare med hjälp av anteckningen jakarta.servlet.annotation.ServletSecurity
och anteckningen jakarta.servlet.annotation.HttpConstraint
. Attributet rolesAllowed = {"users"}
anger att endast autentiserade users
användare med säkerhetsroll /profile
kan komma åt sökvägen. Den autentiserade users
användaren tilldelas automatiskt rollen i Liberty-konfigurationsfilen 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);
}
}
Profilservleten hämtar användarens roller från ID-token och kontrollerar om användaren har admin
rollen när användaren försöker komma åt /profile/admin
sökvägen. Om användaren inte har rollen admin
returnerar servleten ett 403 Forbidden-fel. I andra fall hämtar servleten användarens namn och vidarebefordrar begäran till profilsidan med användarens namn och roller.
Profilsidan definieras i profile.jsp, som du ser i följande exempel. På den här sidan visas användarens namn och roller. Profilsidan har också en utloggningslänk på /logout
. Profilsidan är skriven JSP (Jakarta Server Pages). Observera användningen av ${}
uttryck på sidan.
${}
Anger användningen av Jakarta Expression Language (EL). EL-uttryck ersätts med värdena för motsvarande variabler när sidan återges. Se avsnittet Nästa steg för en referens till EL-specifikationen.
<%@ 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>
När användaren väljer länken för att logga ut anropar appen utloggningsservleten, definierad i LogoutServlet.java, enligt följande exempelkod. Utloggningsservleten request.logout()
anropar metoden för att logga ut användaren och omdirigerar sedan användaren till välkomstsidan.
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("/");
}
}
Köra och testa Appen WebSphere Liberty/Open Liberty
I det här avsnittet kör och testar du appen WebSphere Liberty/Open Liberty för att se hur den fungerar med Microsoft Entra ID som OIDC-provider.
Lägga till en omdirigerings-URI i appregistreringen
Om du vill köra och testa appen lokalt måste du lägga till en omdirigerings-URI i appregistreringen. Följ anvisningarna i avsnittet Lägg till en omdirigerings-URIi Snabbstart: Registrera ett program med Microsofts identitetsplattform och använd följande värden:
- För Konfigurera plattformar väljer du Webb.
- För omdirigerings-URI:er anger du
https://localhost:9443/ibm/api/social-login/redirect/liberty-entra-id
.
Förbereda exemplet
Använd följande steg för att förbereda exempelappen:
Använd följande kommandon för att klona exempelappen från GitHub:
git clone https://github.com/Azure-Samples/liberty-entra-id cd liberty-entra-id git checkout 2024-09-26
Om du ser ett meddelande om att befinna sig i
detached HEAD
-läget kan du lugnt ignorera detta meddelande. Det här meddelandet innebär bara att du checkade ut en tagg.Använd följande kommandon för att definiera följande miljövariabler med de värden som du skrev ned tidigare:
export CLIENT_ID==<application/client-ID> export CLIENT_SECRET=<client-secret> export TENANT_ID=<directory/tenant-ID>
Dessa miljövariabler ger värdena för det inbyggda stödet för OIDC i WebSphere Liberty/Open Liberty. Motsvarande OIDC-konfiguration i Liberty server.xml visas i följande exempel.
<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" />
Om värdet för en variabel inte definieras i konfigurationsfilen läser WebSphere Liberty/Open Liberty värdet från miljövariablerna efter namngivningskonventionen. Mer information om namngivningskonverteringen finns i Variabel ersättningspriorence.
Kör appen WebSphere Liberty/Open Liberty
Du kan köra appen med .liberty-maven-plugin
Om du vill köra appen väljer du någon av följande metoder:
Kommentar
Om du vill aktivera WebSphere Liberty/Open Liberty för att ansluta till Microsoft Entra-ID ska du köra kommandot i gränssnittet där du definierade miljövariablerna som visas i föregående avsnitt.
Kör appen i utvecklingsläge:
mvn liberty:dev
Kör appen i körningsläge:
mvn liberty:run
Om du vill prova olika lägen använder du Ctrl+C för att stoppa appen och kör sedan appen i ett annat läge.
Testa Appen WebSphere Liberty/Open Liberty
När appen har körts öppnar du en webbläsare med en privat flik och navigerar till https://localhost:9443
. Eftersom certifikatet är självsignerat kan du se en varning om certifikatet. Du kan ignorera varningen på ett säkert sätt och gå vidare till webbplatsen.
Du bör se välkomstsidan med länkar för att logga in som användare eller administratör. Om du använder en privat flik kan du undvika att förorena befintliga Microsoft Entra-ID-aktiviteter som du kan ha i din vanliga webbläsare.
Samla in autentiseringsuppgifterna för de två användarna
I den här artikeln använder Microsoft Entra-ID:t varje användares e-postadress som användar-ID för inloggning. Använd följande steg för att hämta e-postadressen för administratörsanvändaren och den vanliga användaren:
- Logga in på administrationscentret för Microsoft Entra som minst molnprogramadministratör.
- Om du har åtkomst till flera klienter använder du ikonen Inställningar (
) på den översta menyn för att växla till den klientorganisation där du vill registrera programmet från menyn Kataloger + prenumerationer.
- Bläddra till Identitetsanvändare >> Alla användare.
- Leta upp administratörsanvändaren i listan och välj den.
- Leta upp fältet Användarens huvudnamn .
- Använd kopieringsikonen bredvid värdet för fältet för att spara användarens e-postadress i Urklipp. Spara värdet för senare användning.
- Följ samma steg för att hämta e-postadressen för den vanliga användaren.
Använd lösenorden för administratörsanvändaren och den vanliga användare som du anger när du skapar användarna.
Använda appens funktioner
Använd följande steg för att använda funktionerna:
Välj länken Logga in som användare. Logga in med den vanliga användare som du skapade tidigare. När du har loggat in omdirigerar Microsoft Entra-ID dig till profilsidan, där du ser ditt namn och dina roller.
Om det är första gången du loggar in uppmanas du att uppdatera lösenordet. Följ anvisningarna för att uppdatera lösenordet.
Om du uppmanas med Din organisation krävs ytterligare säkerhetsinformation. Följ anvisningarna för att ladda ned och konfigurera Microsoft Authenticator-appen. Du kan välja Be senare om du vill fortsätta testet.
Om du uppmanas med begärda behörigheter granskar du de behörigheter som begärs av appen. Välj Acceptera för att fortsätta testet.
Välj Logga ut för att logga ut från appen. När du har loggat ut omdirigeras du till välkomstsidan.
Välj länken Logga in som administratör. Microsoft Entra ID omdirigerar dig till inloggningssidan. Logga in med administratörsanvändaren som du skapade tidigare. När du har loggat in omdirigerar Microsoft Entra-ID dig till liknande profilsida med en annan roll
admin
.Logga ut igen och försök logga in som administratör med den vanliga användare som du skapade tidigare. Du bör se ett felmeddelande eftersom den vanliga användaren inte har rollen
admin
.
Rensa resurser
Den här artikeln instruerar dig inte att distribuera din app i Azure. Det finns inga Azure-resurser att rensa för appen, även om det finns Microsoft Entra-ID-resurser. Om du vill distribuera en app i Azure kan du följa de riktlinjer som beskrivs i nästa avsnitt.
När du är klar med resurserna för den här exempelappen använder du följande steg för att rensa Microsoft Entra-ID-resurserna. Det är viktigt att ta bort oanvända Microsoft Entra-ID-resurser.
- Ta bort appregistreringen som du skapade genom att följa stegen i Ta bort ett program som registrerats med Microsofts identitetsplattform. Du behöver bara följa stegen i avsnittet Ta bort ett program som skapats av din organisation.
- Åtgärden att ta bort appregistreringen bör också ta bort företagsappen. Mer information om hur du tar bort företagsprogram finns i Ta bort ett företagsprogram.
- Ta bort de användare som du skapade genom att följa stegen i Skapa, bjuda in och ta bort användare.
Nästa steg
I den här snabbstarten skyddar du WebSphere Liberty/Open Liberty-program med Microsoft Entra-ID med hjälp av OIDC. Mer information finns i följande resurser:
- Distribuera ett Java-program med Open Liberty eller WebSphere Liberty i Azure Container Apps
- Distribuera WebSphere Liberty och Open Liberty på Azure Red Hat OpenShift
- Distribuera ett Java-program med Open Liberty eller WebSphere Liberty i ett AKS-kluster (Azure Kubernetes Service)
- OpenID Connect-autentisering med Microsoft Entra-ID
- Microsofts identitetsplattform och kodflöde för OAuth 2.0-auktorisering
- Autentisera användare via leverantörer av sociala medier
- Inloggning på sociala medier 1.0
- OpenID Connect Client 1.0
- Vad är OpenID Connect?
- Konfiguration av programmatisk säkerhetsprincip
- Så här skyddar du en RESTful-webbtjänst med Jakarta EE
- Jakarta-uttrycksspråk