Поделиться через


Безопасные приложения WebSphere Liberty/Open Liberty с идентификатором Microsoft Entra с помощью OpenID Connect

В этой статье показано, как защитить приложения IBM WebSphere Liberty/Open Liberty с помощью Идентификатора Microsoft Entra с помощью OpenID Connect (OIDC).

Вы узнаете, как выполнять следующие задачи:

  • Настройте поставщик OIDC с идентификатором Microsoft Entra.
  • Защита приложения WebSphere Liberty/Open Liberty с помощью OIDC.
  • Запустите и проверьте приложение WebSphere Liberty/Open Liberty.

Необходимые компоненты

Настройка поставщика OIDC с помощью идентификатора Microsoft Entra

OpenID Connect — это стандартный стандартный протокол проверки подлинности, поддерживаемый идентификатором Microsoft Entra. В этом разделе описана настройка поставщика OIDC с идентификатором Microsoft Entra ID для использования с приложением WebSphere Liberty/Open Liberty. В следующем разделе описана настройка приложения WebSphere Liberty/Open Liberty с помощью OIDC для проверки подлинности и авторизации пользователей в клиенте Microsoft Entra.

Создание пользователей в клиенте Microsoft Entra

Сначала создайте двух пользователей в клиенте Microsoft Entra, выполнив инструкции по созданию, приглашению и удалению пользователей. Вам просто нужен раздел "Создание нового пользователя ". Используйте следующие инструкции, как описано в этой статье, а затем вернитесь к этой статье после создания пользователей в клиенте Microsoft Entra.

Чтобы создать пользователя в качестве администратора в приложении, выполните следующие действия:

  1. Когда вы перейдете на вкладку "Основные сведения" в разделе "Создание нового пользователя ", выполните следующие действия.
    1. Для имени участника-пользователя введите администратора. Сохраните значение, чтобы использовать его позже при входе в приложение.

    2. Для псевдонима Mail выберите "Производный от имени участника-пользователя"

    3. В поле Отображаемое имя введите admin.

    4. В поле "Пароль" выберите "Автоматически создать пароль". Скопируйте и сохраните значение пароля , которое будет использоваться позже при входе в приложение.

    5. Выберите "Учетная запись включена".

      Снимок экрана: портал Azure, на котором показана панель

    6. Выберите Просмотреть и создать>Создать. Подождите, пока пользователь не будет создан.

    7. Подождите минуту или около этого и нажмите кнопку "Обновить". В списке должен появиться новый пользователь.

Чтобы создать пользователя в качестве пользователя в приложении, повторите следующие действия, но используйте следующие значения:

  • В поле "Имя участника-пользователя" введите пользователя.
  • В поле "Отображаемое имя" введите "Пользователь".

Снимок экрана: портал Azure, на котором показана панель

Регистрация приложения в идентификаторе Microsoft Entra

Затем зарегистрируйте приложение, выполнив действия, описанные в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт. Используйте следующие инструкции, как описано в статье, а затем вернитесь к этой статье после регистрации и настройки приложения.

  1. Когда вы перейдете к разделу "Регистрация приложения ", выполните следующие действия.
    1. Для поддерживаемых типов учетных записей выберите только учетные записи в этом каталоге организации (только каталог по умолчанию — один клиент).
    2. После завершения регистрации сохраните значения идентификатора приложения (клиента) и идентификатора каталога (клиента), чтобы использовать его позже в конфигурации приложения.
  2. Когда вы перейдете к разделу "Добавление URI перенаправления", пропустите шаги, как и сейчас. Вы добавляете URI перенаправления позже при запуске и тестировании примера приложения локально в этой статье.
  3. Когда вы перейдете к разделу "Добавление учетных данных" , выберите вкладку "Добавить секрет клиента".
  4. При добавлении секрета клиента запишите значение секрета клиента, которое будет использоваться позже в конфигурации приложения.

Добавление ролей приложения в приложение

Затем добавьте роли приложений в приложение, выполнив действия по добавлению ролей приложения в приложение и их получении в маркере. Вам просто нужны разделы "Объявление ролей для приложения " и назначение пользователей и групп ролям Microsoft Entra. Используйте следующие инструкции, как описано в статье, а затем вернитесь к этой статье после объявления ролей для приложения.

  1. Когда вы перейдете к ролям объявления для раздела приложения, используйте пользовательский интерфейс ролей приложения для создания ролей администратора и обычного пользователя.

    1. Создайте роль администратора с помощью следующих значений:

      • В поле Отображаемое имя введите admin.
      • Для типов разрешенных элементов выберите "Пользователи или группы".
      • Для параметра Value введите администратора.
      • В поле "Описание" введите "Администратор".
      • Выберите " Включить эту роль приложения?".

      Снимок экрана: портал Azure, на котором показана область

    2. Выберите Применить. Дождитесь создания роли.

    3. Создайте обычную роль пользователя, выполнив те же действия, но со следующими значениями:

      • В поле "Отображаемое имя" введите "Пользователь".
      • Для параметра Value введите пользователя.
      • В поле "Описание" введите user.

      Снимок экрана: портал Azure, на котором показана область

  2. Когда вы достигнете роли "Назначение пользователей и групп" ролей Microsoft Entra, выполните следующие действия.

    1. Выберите Добавить пользователя или группу.

    2. В области "Добавление назначения" для пользователей выберите "Администратор пользователя" и выберите роль "Администратор роли". Затем нажмите кнопку "Назначить". Дождитесь успешного назначения приложения. Чтобы увидеть назначенный ролями столбец роли, может потребоваться прокрутить таблицу.

    3. Повторите предыдущие действия, чтобы назначить роль пользователя пользователю.

    4. Выберите "Обновить" , и вы увидите пользователей и ролей, назначенных в области "Пользователи и группы ".

      Снимок экрана: портал Azure с назначенными пользователями и ролями.

      Возможно, потребуется настроить ширину заголовков столбцов, чтобы представление выглядело как изображение.

Не выполняйте никаких других действий в разделе "Добавление ролей приложения в приложение" и их получение в маркере.

Защита приложения WebSphere Liberty/Open Liberty с помощью OpenID Connect

В этом разделе описано, как защитить приложение WebSphere Liberty/Open Liberty, которое проверяет подлинность и авторизует пользователей в клиенте Microsoft Entra с помощью OIDC. Вы также узнаете, как предоставить пользователям доступ к определенным частям приложения с помощью управления доступом на основе ролей (RBAC). Приложение использует конфигурацию политики программной безопасности спецификации Jakarta Servlet. Jakarta EE также поддерживает веб-службы RESTful. Дополнительные сведения о защите приложения веб-служб RESTful см. в разделе "Дальнейшие действия".

Пример приложения WebSphere Liberty/Open Liberty для этого краткого руководства находится на сайте GitHub в репозитории liberty-entra-id .

Включение проверки подлинности и авторизации для безопасного приложения

Приложение имеет ресурс страницы приветствия, определенный в index.html, который показан в следующем примере кода. Эта страница доступна для пользователей, не прошедших проверку подлинности. Корневой путь страницы приветствия находится в /.

<!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>

На странице приветствия пользователи могут войти в приложение, чтобы получить доступ к странице профиля. На странице приветствия есть ссылки на вход в качестве пользователя или администратора. Ссылки находятся в /profile/user и /profile/adminсоответственно.

/profile/admin Оба /profile/user и ссылки указывают на сервлет профиля, определенный в ProfileServlet.java, как показано в следующем примере кода. Этот сервлет доступен только для пользователей, прошедших проверку подлинности, с помощью заметки jakarta.servlet.annotation.ServletSecurity и заметки jakarta.servlet.annotation.HttpConstraint. rolesAllowed = {"users"} Атрибут указывает, что только прошедшие проверку подлинности пользователи с ролью users безопасности могут получить доступ к /profile пути. Пользователь, прошедший проверку подлинности, автоматически назначается users роль в файле конфигурации 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);
    }
}

Служевец профиля извлекает роли пользователя из маркера идентификатора и проверяет, имеет admin ли пользователь роль, когда пользователь пытается получить доступ /profile/admin к пути. Если у пользователя нет admin роли, сервлет возвращает ошибку 403 Запрещено. В других случаях сервлет извлекает имя пользователя и пересылает запрос на страницу профиля с именем и ролями пользователя.

Страница профиля определена в profile.jsp, как показано в следующем примере. На этой странице отображаются имя и роли пользователя. На странице профиля также есть ссылка /logoutна выход. Страница профиля написана JSP (Страницы сервера Jakarta). Обратите внимание на использование выражений ${} на странице. ${} Указывает использование языка выражений Jakarta (EL). Выражения EL заменяются значениями соответствующих переменных при отрисовки страницы. Дополнительные сведения о спецификации 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>

Когда пользователь выбирает ссылку для выхода, приложение вызывает сервлет выхода, определенный в LogoutServlet.java, как показано в следующем примере кода. Служба выхода вызывает request.logout() метод выхода пользователя, а затем перенаправляет пользователя на страницу приветствия.

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

Запуск и тестирование приложения WebSphere Liberty/Open Liberty

В этом разделе описано, как запустить и протестировать приложение WebSphere Liberty/Open Liberty, чтобы узнать, как он работает с идентификатором Microsoft Entra в качестве поставщика OIDC.

Добавление URI перенаправления в регистрацию приложения

Чтобы успешно запустить и протестировать приложение локально, необходимо добавить URI перенаправления в регистрацию приложения. Следуйте инструкциям в разделе "Добавление URI перенаправления" краткого руководства. Регистрация приложения с помощью платформа удостоверений Майкрософт и использование следующих значений:

  • Для настройки платформ выберите "Веб".
  • Для URI перенаправления введите https://localhost:9443/ibm/api/social-login/redirect/liberty-entra-id.

Подготовка примера

Чтобы подготовить пример приложения, выполните следующие действия.

  1. Используйте следующие команды, чтобы клонировать пример приложения из GitHub:

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

    Если появится сообщение об отключенном состоянии HEAD , это сообщение безопасно игнорировать. Это сообщение означает, что вы проверили тег.

  2. Используйте следующие команды, чтобы определить следующие переменные среды со значениями, которые вы записали ранее:

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

    Эти переменные среды предоставляют значения встроенной поддержки OIDC в WebSphere Liberty/Open Liberty. Соответствующая конфигурация OIDC в server.xml Liberty показана в следующем примере.

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

    Если значение переменной не определено в файле конфигурации, WebSphere Liberty/Open Liberty считывает значение из переменных среды после соглашения об именовании. Дополнительные сведения о преобразовании именования см. в разделе "Приоритет подстановки переменной".

Запуск приложения WebSphere Liberty/Open Liberty

Вы можете запустить приложение с помощью liberty-maven-plugin. Чтобы запустить приложение, выберите один из следующих методов:

Примечание.

Чтобы разрешить WebSphere Liberty/Open Liberty подключаться к идентификатору Microsoft Entra ID, обязательно выполните команду в оболочке, в которой определены переменные среды, показанные в предыдущем разделе.

  • Запустите приложение в режиме разработки:

    mvn liberty:dev
    
  • Запустите приложение в режиме выполнения:

    mvn liberty:run
    

Если вы хотите попробовать различные режимы, нажмите клавиши CTRL+C, чтобы остановить приложение, а затем запустить приложение в другом режиме.

Тестирование приложения WebSphere Liberty/Open Liberty

После запуска приложения откройте веб-браузер с частной вкладкой и перейдите к ней https://localhost:9443. Так как сертификат самозаверяется, может появиться предупреждение о сертификате. Вы можете безопасно игнорировать предупреждение и перейти к сайту.

Вы увидите страницу приветствия со ссылками для входа в качестве пользователя или администратора. Использование частной вкладки позволяет не загрязнять существующие действия идентификатора Microsoft Entra, которые могут быть в обычном браузере.

Снимок экрана: пример приложения, на котором показана страница приветствия.

Сбор учетных данных для двух пользователей

В этой статье идентификатор Microsoft Entra использует адрес электронной почты каждого пользователя в качестве идентификатора пользователя для входа. Чтобы получить адрес электронной почты для пользователя администратора и обычного пользователя, выполните следующие действия.

  1. Войдите в Центр администрирования Microsoft Entra как минимум администратор облачных приложений.
  2. Если у вас есть доступ к нескольким клиентам, используйте значок параметров ( ) в верхнем меню, чтобы переключиться на клиент, в котором вы хотите зарегистрировать приложение из меню каталогов и подписок .
  3. Перейдите к пользователям удостоверений > всех пользователей>.
  4. Найдите пользователя администратора в списке и выберите его.
  5. Найдите поле имени участника-пользователя.
  6. Используйте значок копирования рядом со значением поля, чтобы сохранить адрес электронной почты пользователя в буфер обмена. Сохраните значение для последующего использования.
  7. Чтобы получить адрес электронной почты для обычного пользователя, выполните те же действия.

Используйте пароли для пользователя администратора и обычного пользователя, заданного при создании пользователей.

Выполнение функциональных возможностей приложения

Выполните следующие действия, чтобы реализовать функциональные возможности.

  1. Выберите ссылку для входа в качестве пользователя . Войдите с помощью обычного пользователя, созданного ранее. После входа идентификатор Microsoft Entra перенаправляет вас на страницу профиля, где отображаются имя и роли.

    Снимок экрана: пример приложения, на котором показан профиль пользователя.

  2. Если это первый вход, вам будет предложено обновить пароль. Следуйте инструкциям по обновлению пароля.

  3. Если вам будет предложено в вашей организации, требуются дополнительные сведения о безопасности. Следуйте инструкциям, чтобы скачать и настроить приложение Microsoft Authenticator, вы можете выбрать "Попросить позже ", чтобы продолжить тест.

  4. Если вам будет предложено запрашивать разрешения, просмотрите разрешения, запрошенные приложением. Нажмите кнопку "Принять" , чтобы продолжить тест.

  5. Выберите "Выйти" , чтобы выйти из приложения. После выхода вы перейдете на страницу приветствия.

  6. Выберите ссылку для входа в качестве администратора . Идентификатор Microsoft Entra перенаправляет вас на страницу входа. Войдите с помощью созданного ранее пользователя администратора. После входа идентификатор Microsoft Entra перенаправляет вас на аналогичную страницу профиля с другой ролью admin.

    Снимок экрана: пример приложения, на котором показан профиль администратора.

  7. Выйдите еще раз и попробуйте войти в качестве администратора с помощью обычного пользователя, созданного ранее. Должно появиться сообщение об ошибке, так как обычный пользователь не имеет admin роли.

    Снимок экрана: пример приложения, на котором показано сообщение об отказе в доступе.

Очистка ресурсов

Эта статья не направляет вас на развертывание приложения в Azure. Для очистки приложения нет ресурсов Azure, хотя существуют ресурсы идентификатора Microsoft Entra. Чтобы развернуть приложение в Azure, следуйте инструкциям, приведенным в следующем разделе.

Завершив работу с ресурсами для этого примера приложения, выполните следующие действия, чтобы очистить ресурсы идентификатора Microsoft Entra. Удаление неиспользуемых ресурсов идентификатора Microsoft Entra является важной рекомендацией по обеспечению безопасности.

  1. Удалите регистрацию приложения, созданную, выполнив действия, описанные в разделе "Удаление приложения, зарегистрированного в платформа удостоверений Майкрософт". Вам нужно выполнить действия, описанные в разделе "Удалить приложение, созданное вашей организацией".
  2. Действие удаления регистрации приложения также должно удалить корпоративное приложение. Дополнительные сведения об удалении корпоративных приложений см. в статье "Удаление корпоративного приложения".
  3. Удалите пользователей, созданных с помощью инструкций по созданию, приглашению и удалению пользователей.

Следующие шаги

В этом кратком руководстве описана защита приложений WebSphere Liberty и Open Liberty с помощью идентификатора Microsoft Entra с помощью OIDC. Дополнительные сведения см. в следующих ресурсах: