Udostępnij za pośrednictwem


Zabezpieczanie aplikacji WebSphere Liberty/Open Liberty za pomocą identyfikatora Entra firmy Microsoft przy użyciu protokołu OpenID Connect

W tym artykule pokazano, jak zabezpieczyć aplikacje IBM WebSphere Liberty/Open Liberty przy użyciu identyfikatora Entra firmy Microsoft przy użyciu protokołu OpenID Connect (OIDC).

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Skonfiguruj dostawcę OIDC przy użyciu identyfikatora Entra firmy Microsoft.
  • Ochrona aplikacji WebSphere Liberty/Open Liberty przy użyciu funkcji OIDC.
  • Uruchom i przetestuj aplikację WebSphere Liberty/Open Liberty.

Wymagania wstępne

Konfigurowanie dostawcy OIDC przy użyciu identyfikatora Entra firmy Microsoft

OpenID Connect to standardowy protokół uwierzytelniania w branży obsługiwany przez firmę Microsoft Entra ID. W tej sekcji skonfigurujesz dostawcę OIDC z identyfikatorem Entra firmy Microsoft do użycia z aplikacją WebSphere Liberty/Open Liberty. W nowszej sekcji skonfigurujesz aplikację WebSphere Liberty/Open Liberty przy użyciu funkcji OIDC w celu uwierzytelniania i autoryzacji użytkowników w dzierżawie firmy Microsoft Entra.

Tworzenie użytkowników w dzierżawie firmy Microsoft Entra

Najpierw utwórz dwóch użytkowników w dzierżawie firmy Microsoft Entra, wykonując kroki opisane w temacie Jak utworzyć, zaprosić i usunąć użytkowników. Potrzebujesz tylko sekcji Tworzenie nowego użytkownika . Skorzystaj z poniższych wskazówek, przechodząc przez ten artykuł, a następnie wróć do tego artykułu po utworzeniu użytkowników w dzierżawie firmy Microsoft Entra.

Aby utworzyć użytkownika, który będzie służył jako "administrator" w aplikacji, wykonaj następujące kroki:

  1. Po dotarciu do karty Podstawowe w sekcji Tworzenie nowego użytkownika wykonaj następujące kroki:
    1. W polu Główna nazwa użytkownika wprowadź wartość admin. Zapisz wartość, aby można było jej użyć później podczas logowania się do aplikacji.

    2. W polu Pseudonim poczty wybierz pozycję Pochodne od głównej nazwy użytkownika

    3. W polu Nazwa wyświetlana wprowadź wartość Administrator.

    4. W polu Hasło wybierz pozycję Automatycznie generuj hasło. Skopiuj i zapisz wartość Hasło , która będzie używana później podczas logowania się do aplikacji.

    5. Wybierz pozycję Konto włączone.

      Zrzut ekranu witryny Azure Portal przedstawiający okienko Tworzenie nowych podstaw użytkowników dla użytkownika administracyjnego.

    6. Wybierz pozycję Przeglądanie + tworzenie>Utwórz. Poczekaj na utworzenie użytkownika.

    7. Poczekaj minutę i wybierz pozycję Odśwież. Na liście powinien zostać wyświetlony nowy użytkownik.

Aby utworzyć użytkownika, który będzie służył jako "użytkownik" w aplikacji, powtórz następujące kroki, ale użyj następujących wartości:

  • W polu Główna nazwa użytkownika wprowadź wartość user.
  • W polu Nazwa wyświetlana wprowadź wartość User (Użytkownik).

Zrzut ekranu witryny Azure Portal przedstawiający okienko Tworzenie nowego użytkownika Podstawowe informacje dla zwykłego użytkownika.

Rejestrowanie aplikacji w identyfikatorze Entra firmy Microsoft

Następnie zarejestruj aplikację, wykonując kroki opisane w przewodniku Szybki start: rejestrowanie aplikacji przy użyciu Platforma tożsamości Microsoft. Skorzystaj z poniższych wskazówek, przechodząc przez ten artykuł, a następnie wróć do tego artykułu po zarejestrowaniu i skonfigurowaniu aplikacji.

  1. Po dotarciu do sekcji Rejestrowanie aplikacji wykonaj następujące kroki:
    1. W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym (tylko katalog domyślny — pojedyncza dzierżawa).
    2. Po zakończeniu rejestracji zapisz wartości identyfikatora aplikacji (klienta) i identyfikatora katalogu (dzierżawy), które będą używane w dalszej części konfiguracji aplikacji.
  2. Po dotarciu do sekcji Dodawanie identyfikatora URI przekierowania pomiń kroki tak jak na razie. Identyfikator URI przekierowania zostanie dodany później podczas uruchamiania i testowania przykładowej aplikacji lokalnie w tym artykule.
  3. Po dotarciu do sekcji Dodawanie poświadczeń wybierz kartę Dodaj klucz tajny klienta.
  4. Po dodaniu wpisu tajnego klienta zapisz wartość klucza tajnego klienta do późniejszego użycia w konfiguracji aplikacji.

Dodawanie ról aplikacji do aplikacji

Następnie dodaj role aplikacji do aplikacji, wykonując kroki opisane w temacie Dodawanie ról aplikacji do aplikacji i odbieranie ich w tokenie. Potrzebujesz tylko sekcji Deklarowanie ról dla aplikacji oraz Przypisywanie użytkowników i grup do ról firmy Microsoft Entra. Skorzystaj z poniższych wskazówek, przechodząc przez ten artykuł, a następnie wróć do tego artykułu po zadeklarowaniu ról dla aplikacji.

  1. Po dotarciu do sekcji Deklarowanie ról dla aplikacji użyj interfejsu użytkownika ról aplikacji, aby utworzyć role dla administratora i zwykłego użytkownika.

    1. Utwórz rolę użytkownika administratora przy użyciu następujących wartości:

      • W polu Nazwa wyświetlana wprowadź wartość Administrator.
      • W obszarze Dozwolone typy elementów członkowskich wybierz pozycję Użytkownicy/grupy.
      • W polu Wartość wprowadź wartość admin.
      • W polu Opis wprowadź wartość Administrator.
      • Wybierz pozycję Czy chcesz włączyć tę rolę aplikacji?.

      Zrzut ekranu witryny Azure Portal przedstawiający okienko Tworzenie roli aplikacji dla użytkownika administracyjnego.

    2. Wybierz Zastosuj. Poczekaj na utworzenie roli.

    3. Utwórz zwykłą rolę użytkownika przy użyciu tych samych kroków, ale z następującymi wartościami:

      • W polu Nazwa wyświetlana wprowadź wartość User (Użytkownik).
      • W polu Wartość wprowadź wartość użytkownika.
      • W polu Opis wprowadź wartość User (Użytkownik).

      Zrzut ekranu witryny Azure Portal przedstawiający okienko Tworzenie roli aplikacji dla zwykłego użytkownika.

  2. Gdy dotrzesz do sekcji Przypisywanie użytkowników i grup do ról firmy Microsoft Entra, wykonaj następujące kroki:

    1. Wybierz pozycję Dodaj użytkownika/grupę.

    2. W okienku Dodawanie przypisania w obszarze Użytkownicy wybierz pozycję Administrator użytkownika, a w obszarze Wybierz rolę wybierz pozycję Administrator roli. Następnie wybierz pozycję Przypisz. Poczekaj, aż przypisanie aplikacji zakończy się pomyślnie. Może być konieczne przewinięcie tabeli w bok, aby wyświetlić kolumnę Przypisana rola .

    3. Powtórz poprzednie kroki, aby przypisać rolę Użytkownika użytkownikowi.

    4. Wybierz pozycję Odśwież , a użytkownicy i role przypisane w okienku Użytkownicy i grupy .

      Zrzut ekranu witryny Azure Portal przedstawiający przypisanych użytkowników i role.

      Może być konieczne dostosowanie szerokości nagłówków kolumn, aby widok wyglądał jak obraz.

Nie należy wykonywać żadnych innych kroków w temacie Dodawanie ról aplikacji do aplikacji i odbieranie ich w tokenie.

Ochrona aplikacji WebSphere Liberty/Open Liberty przy użyciu protokołu OpenID Connect

W tej sekcji zabezpieczysz aplikację WebSphere Liberty/Open Liberty, która uwierzytelnia i autoryzuje użytkowników w dzierżawie firmy Microsoft Entra przy użyciu OIDC. Dowiesz się również, jak zapewnić użytkownikom dostęp do niektórych części aplikacji przy użyciu kontroli dostępu opartej na rolach (RBAC). Aplikacja używa konfiguracji zasad zabezpieczeń programowych specyfikacji Serwletu Dżakarta. Jakarta EE obsługuje również usługi internetowe RESTful. Zobacz sekcję Następne kroki, aby zapoznać się z artykułem dotyczącym zabezpieczania aplikacji usług internetowych RESTful.

Przykładowa aplikacja WebSphere Liberty/Open Liberty dla tego przewodnika Szybki start znajduje się w witrynie GitHub w repozytorium liberty-entra-id .

Włączanie uwierzytelniania i autoryzacji w celu zabezpieczenia aplikacji

Aplikacja ma zasób strony powitalnej zdefiniowany w index.html, który jest wyświetlany w poniższym przykładowym kodzie. Ta strona jest dostępna dla nieuwierzytelnionych użytkowników. Ścieżka główna strony powitalnej znajduje się pod adresem /.

<!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 stronie powitalnej użytkownicy mogą zalogować się do aplikacji, aby uzyskać dostęp do strony profilu. Strona powitalna zawiera linki do logowania się jako użytkownik lub jako administrator. Linki znajdują się odpowiednio pod adresem /profile/user i /profile/admin.

Obie /profile/user metody i /profile/admin wskazują serwlet profilu zdefiniowany w ProfileServlet.java, jak pokazano w poniższym przykładowym kodzie. Ten serwlet jest dostępny tylko dla uwierzytelnionych użytkowników przy użyciu adnotacji jakarta.servlet.annotation.ServletSecurity i adnotacji jakarta.servlet.annotation.HttpConstraint. rolesAllowed = {"users"} Atrybut określa, że tylko uwierzytelnieni użytkownicy z rolą users zabezpieczeń mogą uzyskać dostęp do ścieżki/profile. Uwierzytelniony użytkownik jest automatycznie przypisywany users do roli w pliku konfiguracji 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);
    }
}

Serwlet profilu pobiera role użytkownika z tokenu identyfikatora i sprawdza, czy użytkownik ma admin rolę, gdy użytkownik próbuje uzyskać dostęp do ścieżki /profile/admin . Jeśli użytkownik nie ma admin roli, serwlet zwraca błąd 403 Zabronione. W innych przypadkach serwlet pobiera nazwę użytkownika i przekazuje żądanie do strony profilu przy użyciu nazwy i ról użytkownika.

Strona profilu jest zdefiniowana w profile.jsp, jak pokazano w poniższym przykładzie. Na tej stronie są wyświetlane nazwy i role użytkownika. Strona profilu zawiera również link wylogowania pod adresem /logout. Strona profilu jest napisana w programie JSP (Dżakarta Server Pages). Zwróć uwagę na użycie ${} wyrażeń na stronie. ${} Wskazuje użycie języka Dżakarta Expression Language (EL). Wyrażenia EL są zastępowane wartościami odpowiednich zmiennych podczas renderowania strony. Zobacz sekcję Następne kroki, aby zapoznać się ze specyfikacją EL.

<%@ 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>

Gdy użytkownik wybierze link do wylogowania, aplikacja wywołuje serwlet wylogowania zdefiniowany w LogoutServlet.java, jak pokazano w poniższym przykładowym kodzie. Serwlet wylogowania wywołuje metodę request.logout() w celu wylogowania użytkownika, a następnie przekierowuje użytkownika do strony powitalnej.

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("/");
    }
}

Uruchamianie i testowanie aplikacji WebSphere Liberty/Open Liberty

W tej sekcji uruchomisz i przetestujesz aplikację WebSphere Liberty/Open Liberty, aby zobaczyć, jak działa z identyfikatorem Entra firmy Microsoft jako dostawcą OIDC.

Dodawanie identyfikatora URI przekierowania do rejestracji aplikacji

Aby pomyślnie uruchomić i przetestować aplikację lokalnie, musisz dodać identyfikator URI przekierowania do rejestracji aplikacji. Postępuj zgodnie z instrukcjami w sekcji Dodawanie identyfikatora URI przekierowania w przewodniku Szybki start: rejestrowanie aplikacji przy użyciu Platforma tożsamości Microsoft i używanie następujących wartości:

  • W obszarze Konfigurowanie platform wybierz pozycję Sieć Web.
  • W polu Identyfikatory URI przekierowania wprowadź .https://localhost:9443/ibm/api/social-login/redirect/liberty-entra-id

Przygotowywanie przykładu

Aby przygotować przykładową aplikację, wykonaj następujące kroki:

  1. Użyj następujących poleceń, aby sklonować przykładową aplikację z usługi GitHub:

    git clone https://github.com/Azure-Samples/liberty-entra-id
    cd liberty-entra-id
    git checkout 2024-09-26
    

    Jeśli zostanie wyświetlony komunikat o odłączeniu stanu HEAD , ten komunikat jest bezpieczny do zignorowania. Ten komunikat oznacza po prostu wyewidencjonowanie tagu.

  2. Użyj następujących poleceń, aby zdefiniować następujące zmienne środowiskowe z wartościami zanotowymi wcześniej:

    export CLIENT_ID==<application/client-ID>
    export CLIENT_SECRET=<client-secret>
    export TENANT_ID=<directory/tenant-ID>
    

    Te zmienne środowiskowe zapewniają wartości wbudowanej obsługi OIDC w witrynie WebSphere Liberty/Open Liberty. Odpowiadająca konfiguracja OIDC w server.xml Liberty jest pokazana w poniższym przykładzie.

     <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" />
    

    Jeśli wartość zmiennej nie jest zdefiniowana w pliku konfiguracji, WebSphere Liberty/Open Liberty odczytuje wartość ze zmiennych środowiskowych zgodnie z konwencją nazewnictwa. Aby uzyskać szczegółowe informacje na temat konwersji nazewnictwa, zobacz Pierwszeństwo podstawiania zmiennych.

Uruchamianie aplikacji WebSphere Liberty/Open Liberty

Aplikację można uruchomić przy użyciu polecenia liberty-maven-plugin. Aby uruchomić aplikację, wybierz jedną z następujących metod:

Uwaga

Aby włączyć program WebSphere Liberty/Open Liberty w celu nawiązania połączenia z identyfikatorem Entra firmy Microsoft, pamiętaj, aby uruchomić polecenie w powłoce, w której zdefiniowano zmienne środowiskowe pokazane w poprzedniej sekcji.

  • Uruchom aplikację w trybie programowania:

    mvn liberty:dev
    
  • Uruchom aplikację w trybie środowiska uruchomieniowego:

    mvn liberty:run
    

Jeśli chcesz wypróbować różne tryby, użyj Ctrl+C, aby zatrzymać aplikację, a następnie uruchomić aplikację w innym trybie.

Testowanie aplikacji WebSphere Liberty/Open Liberty

Po uruchomieniu aplikacji otwórz przeglądarkę internetową z prywatną kartą i przejdź do https://localhost:9443strony . Ponieważ certyfikat jest podpisany samodzielnie, może zostać wyświetlone ostrzeżenie dotyczące certyfikatu. Możesz bezpiecznie zignorować ostrzeżenie i przejść do witryny.

Powinna zostać wyświetlona strona powitalna z linkami umożliwiającymi zalogowanie się jako użytkownik lub administrator. Korzystanie z karty prywatnej pozwala uniknąć zanieczyszczania wszelkich istniejących działań microsoft Entra ID, które mogą być używane w regularnej przeglądarce.

Zrzut ekranu przedstawiający przykładową aplikację z wyświetloną stroną powitalną.

Zbieranie poświadczeń dla dwóch użytkowników

W tym artykule identyfikator Entra firmy Microsoft używa adresu e-mail każdego użytkownika jako identyfikatora użytkownika do logowania. Wykonaj następujące kroki, aby uzyskać adres e-mail użytkownika administratora i zwykłego użytkownika:

  1. Zaloguj się do centrum administracyjnego firmy Microsoft Entra co najmniej jako administrator aplikacji w chmurze.
  2. Jeśli masz dostęp do wielu dzierżaw, użyj ikony Ustawienia ( ) w górnym menu, aby przełączyć się do dzierżawy, w której chcesz zarejestrować aplikację z menu Katalogi i subskrypcje .
  3. Przejdź do pozycji Użytkownicy tożsamości > > Wszyscy użytkownicy.
  4. Znajdź użytkownika administratora na liście i wybierz go.
  5. Znajdź pole Główna nazwa użytkownika.
  6. Użyj ikony kopiowania obok wartości pola, aby zapisać adres e-mail użytkownika w schowku. Zapisz wartość do późniejszego użycia.
  7. Aby uzyskać adres e-mail dla zwykłego użytkownika, wykonaj te same kroki.

Użyj haseł dla użytkownika administratora i zwykłego użytkownika ustawionego podczas tworzenia użytkowników.

Ćwiczenie funkcjonalności aplikacji

Aby wykonać działanie funkcji, wykonaj następujące czynności:

  1. Wybierz link Zaloguj się jako użytkownik. Zaloguj się przy użyciu utworzonego wcześniej zwykłego użytkownika. Po zalogowaniu identyfikator Entra firmy Microsoft przekierowuje Cię do strony profilu, na której zobaczysz swoją nazwę i role.

    Zrzut ekranu przedstawiający przykładową aplikację z profilem użytkownika.

  2. Jeśli jest to pierwszy raz podczas logowania, zostanie wyświetlony monit o zaktualizowanie hasła. Postępuj zgodnie z instrukcjami, aby zaktualizować hasło.

  3. Jeśli zostanie wyświetlony monit o podanie w organizacji dodatkowych informacji zabezpieczających. Postępuj zgodnie z monitami, aby pobrać i skonfigurować aplikację Microsoft Authenticator, możesz wybrać pozycję Zapytaj później , aby kontynuować test.

  4. Jeśli zostanie wyświetlony monit o podanie żądanych uprawnień, zapoznaj się z uprawnieniami żądanymi przez aplikację. Wybierz pozycję Akceptuj , aby kontynuować test.

  5. Wybierz pozycję Wyloguj się, aby wylogować się z aplikacji. Po wylogowaniu nastąpi przekierowanie do strony powitalnej.

  6. Wybierz link Zaloguj się jako administrator. Identyfikator Entra firmy Microsoft przekierowuje Cię do strony logowania. Zaloguj się przy użyciu utworzonego wcześniej użytkownika administratora. Po zalogowaniu identyfikator Entra firmy Microsoft przekierowuje Cię do podobnej strony profilu z inną rolą admin.

    Zrzut ekranu przedstawiający przykładową aplikację z profilem administratora.

  7. Wyloguj się ponownie i spróbuj zalogować się jako administrator przy użyciu utworzonego wcześniej zwykłego użytkownika. Powinien zostać wyświetlony komunikat o błędzie, ponieważ zwykły użytkownik nie ma admin roli.

    Zrzut ekranu przedstawiający przykładową aplikację z komunikatem o odmowie dostępu.

Czyszczenie zasobów

Ten artykuł nie kieruje Cię do wdrażania aplikacji na platformie Azure. Nie ma zasobów platformy Azure do oczyszczenia aplikacji, chociaż istnieją zasoby identyfikatora Entra firmy Microsoft. Aby wdrożyć aplikację na platformie Azure, możesz postępować zgodnie ze wskazówkami podanymi w następnej sekcji.

Po zakończeniu pracy z zasobami dla tej przykładowej aplikacji wykonaj następujące kroki, aby wyczyścić zasoby identyfikatora Entra firmy Microsoft. Usuwanie nieużywanych zasobów identyfikatora Entra firmy Microsoft jest ważnym najlepszym rozwiązaniem w zakresie zabezpieczeń.

  1. Usuń rejestrację aplikacji utworzoną, wykonując kroki opisane w temacie Usuwanie aplikacji zarejestrowanej w Platforma tożsamości Microsoft. Wystarczy wykonać kroki opisane w sekcji Usuwanie aplikacji utworzonej przez organizację.
  2. Czynność usuwania rejestracji aplikacji powinna również usunąć aplikację dla przedsiębiorstw. Aby uzyskać więcej informacji na temat usuwania aplikacji dla przedsiębiorstw, zobacz Usuwanie aplikacji dla przedsiębiorstw.
  3. Usuń utworzonych użytkowników, wykonując kroki opisane w temacie Tworzenie, zapraszanie i usuwanie użytkowników.

Następne kroki

W tym przewodniku Szybki start chronisz aplikacje WebSphere Liberty/Open Liberty za pomocą identyfikatora Entra firmy Microsoft przy użyciu identyfikatora OIDC. Aby dowiedzieć się więcej, zapoznaj się z następującymi zasobami: