Включение входа для приложений Java WebLogic с помощью идентификатора Microsoft Entra
В этой статье показано приложение Java WebLogic, которое входит в клиент Идентификатора Microsoft Entra с помощью библиотеки проверки подлинности Майкрософт (MSAL) для Java.
На следующей схеме показана топология приложения:
Клиентское приложение использует MSAL для Java (MSAL4J) для входа пользователей в собственный клиент Идентификатора Microsoft Entra ИД и получения маркера идентификатора от идентификатора Microsoft Entra ID. Маркер идентификатора подтверждает, что пользователь проходит проверку подлинности с помощью этого клиента. Приложение защищает маршруты в соответствии с состоянием проверки подлинности пользователя.
Необходимые компоненты
- JDK версии 8 или более поздней
- Maven 3
- Клиент идентификатора Microsoft Entra. Дополнительные сведения см. в разделе "Как получить клиент идентификатора Microsoft Entra".
- Учетная запись пользователя в собственном клиенте Идентификатора Microsoft Entra, если вы хотите работать только с учетными записями в каталоге организации, то есть в режиме одного клиента. Если вы не создали учетную запись пользователя в клиенте идентификатора Microsoft Entra ID, прежде чем продолжить. Дополнительные сведения см. в статье "Создание, приглашение и удаление пользователей".
- Учетная запись пользователя в клиенте идентификатора Microsoft Entra в любой организации, если вы хотите работать с учетными записями в любом каталоге организации, то есть в мультитенантном режиме. Этот пример необходимо изменить для работы с личной учетной записью Майкрософт. Если вы еще не создали учетную запись пользователя в клиенте идентификатора Microsoft Entra ID, прежде чем продолжить. Дополнительные сведения см. в статье "Создание, приглашение и удаление пользователей".
- Личная учетная запись Майкрософт, например Xbox, Hotmail, Live и т. д., если вы хотите работать с личными учетными записями Майкрософт.
Рекомендации
- Некоторые знания о Java / Jakarta Servlets.
- Некоторые знания о терминале Linux/OSX.
- jwt.ms для проверки маркеров.
- Fiddler для мониторинга активности сети и устранения неполадок.
- Следуйте блогу по идентификатору Microsoft Entra ID, чтобы оставаться в курсе последних разработок.
Настройка примера
В следующих разделах показано, как настроить пример приложения.
Клонирование или скачивание примера репозитория
Чтобы клонировать пример, откройте окно Bash и выполните следующую команду:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/1-Authentication/sign-in
Кроме того, перейдите к репозиторию ms-identity-msal-java-samples , а затем скачайте его в виде файла .zip и извлеките его на жесткий диск.
Внимание
Чтобы избежать ограничений длины пути к файлам в Windows, клонируйте или извлеките репозиторий в каталог рядом с корнем жесткого диска.
Регистрация примера приложения в клиенте Идентификатора Microsoft Entra
В этом примере есть один проект. В этом разделе показано, как зарегистрировать приложение.
Сначала зарегистрируйте приложение в портал Azure, следуя инструкциям в кратком руководстве. Регистрация приложения с помощью платформа удостоверений Майкрософт.
Затем выполните следующие действия, чтобы завершить регистрацию:
Перейдите на страницу Регистрация приложений Платформы удостоверений Майкрософт для разработчиков.
Выберите Создать регистрацию.
На появившемся экране "Регистрация приложения" введите следующие сведения о регистрации приложения:
В разделе "Имя" введите понятное имя приложения для отображения пользователям приложения, например
java-servlet-webapp-authentication
.В разделе "Поддерживаемые типы учетных записей" выберите один из следующих вариантов:
- Выберите учетные записи в этом каталоге организации только в том случае, если вы создаете приложение только для пользователей в клиенте, то есть однотенантное приложение.
- Выберите учетные записи в любом каталоге организации, если вы хотите, чтобы пользователи в любом клиенте Идентификатора Microsoft Entra могли использовать приложение, то есть мультитенантное приложение.
- Выберите учетные записи в любом каталоге организации и личных учетных записях Майкрософт для наиболее широкого набора клиентов, то есть мультитенантное приложение, которое также поддерживает microsoft личная учетная запись.
- Выберите персональные учетные записи Майкрософт для использования только пользователями личных учетных записей Майкрософт, например Hotmail, Live, Skype и Xbox.
В разделе URI перенаправления выберите Веб-файл в поле со списком и введите следующий URI перенаправления:
http://localhost:8080/msal4j-servlet-auth/auth/redirect
Выберите Зарегистрировать, чтобы создать приложение.
На странице регистрации приложения найдите и скопируйте значение идентификатора приложения (клиента), которое будет использоваться позже. Это значение используется в файле конфигурации или файлах приложения.
На странице регистрации приложения выберите сертификаты и секреты на панели навигации, чтобы открыть страницу для создания секретов и отправки сертификатов.
В разделе Секреты клиента выберите Создать секрет клиента.
Введите описание, например секрет приложения.
Выберите одну из доступных продолжительности: в течение 1 года, за 2 года или никогда не истекает.
Выберите Добавить. Отображается созданное значение.
Скопируйте и сохраните созданное значение для использования в последующих шагах. Это значение требуется для файлов конфигурации кода. Это значение не отображается снова, и его нельзя получить другими средствами. Таким образом, не забудьте сохранить его из портал Azure перед переходом на любой другой экран или область.
Настройка приложения для использования регистрации приложения
Чтобы настроить приложение, выполните следующие действия.
Примечание.
В следующих шагах ClientID
выполняется то же самое, что Application ID
и AppId
.
Откройте проект в интегрированной среде разработки.
Откройте файл ./src/main/resources/authentication.properties.
Найдите строку
{enter-your-tenant-id-here}
. Замените существующее значение одним из следующих значений:- Идентификатор клиента Microsoft Entra ID, если вы зарегистрировали приложение с учетными записями в этом каталоге организации.
- Слово
organizations
, если вы зарегистрировали приложение в учетных записях в любом каталоге организации. - Слово
common
, если вы зарегистрировали приложение в учетных записях в любом каталоге организации и личных учетных записях Майкрософт. - Слово
consumers
, если вы зарегистрировали приложение с помощью личных учетных записей Майкрософт.
Найдите строку
{enter-your-client-id-here}
и замените существующее значение идентификатором приложения илиclientId
java-servlet-webapp-authentication
приложением, скопированным из портал Azure.Найдите строку
{enter-your-client-secret-here}
и замените существующее значение значением, сохраненным во время созданияjava-servlet-webapp-authentication
приложения, в портал Azure.
Сборка примера
Чтобы создать пример с помощью Maven, перейдите в каталог, содержащий файл pom.xml для примера, а затем выполните следующую команду:
mvn clean package
Эта команда создает WAR-файл , который можно запустить на различных серверах приложений.
Развертывание примера
В этих инструкциях предполагается, что вы установили WebLogic и настроили некоторый домен сервера.
Перед развертыванием в WebLogic выполните следующие действия, чтобы внести некоторые изменения конфигурации в сам пример, а затем выполнить сборку или перестроить пакет:
В примере найдите файл application.properties или authentication.properties , где вы настроили идентификатор клиента, клиент, URL-адрес перенаправления и т. д.
В этом файле измените ссылки на
localhost:8080
localhost:8443
URL-адрес и порт, на который выполняется WebLogic, в котором по умолчанию должно бытьlocalhost:7001
.Кроме того, необходимо внести те же изменения в регистрацию приложения Azure, где вы задали его в портал Azure в качестве значения URI перенаправления на вкладке "Проверка подлинности".
Чтобы развернуть пример в WebLogic с помощью веб-консоли, выполните следующие действия.
Запустите сервер WebLogic с DOMAIN_NAME\bin\startWebLogic.cmd.
Перейдите в веб-консоль WebLogic в браузере
http://localhost:7001/console
.Перейдите к развертываниям структуры>домена, выберите "Установить", выберите "Отправить файлы", а затем найдите war-файл, созданный с помощью Maven.
Выберите "Установить это развертывание в качестве приложения", нажмите кнопку "Далее", выберите "Готово" и нажмите кнопку "Сохранить".
Большинство параметров по умолчанию должны быть хорошо, за исключением того, что вы должны присвоить приложению имя для сопоставления URI перенаправления, заданного в примере конфигурации или регистрации приложений Azure. То есть, если универсальный код ресурса (URI перенаправления) имеет значение
http://localhost:7001/msal4j-servlet-auth
, то следует присвоить приложениюmsal4j-servlet-auth
имя.Вернитесь к развертываниям структуры>домена и запустите приложение.
После запуска приложения перейдите
http://localhost:7001/<application-name>/
к приложению и сможете получить доступ к приложению.
Анализ примера
Чтобы изучить пример, выполните следующие действия.
- Обратите внимание, что состояние входа или выхода отображается в центре экрана.
- Нажмите кнопку с учетом контекста в углу. Эта кнопка считывает вход при первом запуске приложения.
- На следующей странице следуйте инструкциям и войдите с учетной записью в клиенте идентификатора Microsoft Entra ID.
- На экране согласия обратите внимание на запрашиваемые области.
- Обратите внимание, что кнопка с учетом контекста теперь говорит выход и отображает имя пользователя.
- Выберите сведения о маркере идентификатора, чтобы просмотреть некоторые декодированные утверждения маркера идентификатора.
- Нажмите кнопку в углу, чтобы выйти из нее.
- После выхода выберите "Сведения о маркере идентификатора", чтобы убедиться, что приложение отображает ошибку
401: unauthorized
вместо утверждений маркера идентификатора, если пользователь не авторизован.
Примечания о коде
В этом примере показано, как использовать MSAL для Java (MSAL4J) для входа пользователей в клиент Идентификатора Microsoft Entra. Если вы хотите использовать MSAL4J в собственных приложениях, необходимо добавить его в проекты с помощью Maven.
Если вы хотите реплицировать поведение этого примера, можно скопировать файл pom.xml и содержимое вспомогательных и папок authservlets в папке src/main/java/com/microsoft/azuresamples/msal4j. Вам также нужен файл authentication.properties . Эти классы и файлы содержат универсальный код, который можно использовать в широком массиве приложений. Вы также можете скопировать остальную часть примера, но другие классы и файлы создаются специально для решения задачи этого примера.
Содержимое
В следующей таблице показано содержимое папки примера проекта:
Файл или папка | Description |
---|---|
src/main/java/com/microsoft/azuresamples/msal4j/authwebapp/ | Этот каталог содержит классы, определяющие серверную бизнес-логику приложения. |
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ | Этот каталог содержит классы, используемые для входа и выхода конечных точек. |
____Servlet.java | Все доступные конечные точки определяются в классах .java, заканчивающиеся ____Servlet.java. |
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ | Вспомогательные классы для проверки подлинности. |
AuthenticationFilter.java | Перенаправляет запросы без проверки подлинности на защищенные конечные точки на страницу 401. |
src/main/resources/authentication.properties | Идентификатор и конфигурация программы Microsoft Entra. |
src/main/webapp/ | Этот каталог содержит шаблоны JSP пользовательского интерфейса |
CHANGELOG.md | Список изменений в примере. |
CONTRIBUTING.md | Рекомендации по участию в образце. |
ЛИЦЕНЗИЯ | Лицензия для примера. |
ConfidentialClientApplication
ConfidentialClientApplication
Экземпляр создается в файле AuthHelper.java, как показано в следующем примере. Этот объект помогает создать URL-адрес авторизации идентификатора Microsoft Entra, а также помогает обмениваться маркером проверки подлинности для маркера доступа.
// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.authority(AUTHORITY)
.build();
Для создания экземпляров используются следующие параметры:
- Идентификатор клиента приложения.
- Секрет клиента, который является обязательным для конфиденциальных клиентских приложений.
- Центр идентификатора Microsoft Entra ID, который включает идентификатор клиента Microsoft Entra ID.
В этом примере эти значения считываются из файла authentication.properties с помощью средства чтения свойств в файле Config.java .
Пошаговое руководство
Ниже приведены пошаговые инструкции по функциональным возможностям приложения:
Первым шагом процесса входа является отправка запроса
/authorize
в конечную точку для клиента Идентификатора Microsoft Entra. Экземпляр MSAL4JConfidentialClientApplication
используется для создания URL-адреса запроса авторизации. Приложение перенаправляет браузер на этот URL-адрес, где пользователь входит в систему.final ConfidentialClientApplication client = getConfidentialClientInstance(); AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES)) .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString(); contextAdapter.redirectUser(authorizeUrl);
В следующем списке описываются функции этого кода:
AuthorizationRequestUrlParameters
: параметры, которые должны быть заданы для сборки AuthorizationRequestUrl.REDIRECT_URI
: где идентификатор Microsoft Entra перенаправляет браузер вместе с кодом проверки подлинности после сбора учетных данных пользователя. Он должен соответствовать URI перенаправления в регистрации приложения идентификатора Записи Майкрософт в портал Azure.SCOPES
: области — это разрешения, запрашиваемые приложением. Как правило, три областиopenid profile offline_access
достаточно для получения ответа маркера идентификатора.Полный список областей, запрашиваемых приложением, можно найти в файле authentication.properties . Можно добавить дополнительные области, например
User.Read
.
Пользователь предоставляет запрос на вход с помощью идентификатора Microsoft Entra. Если попытка входа выполнена успешно, браузер пользователя перенаправляется в конечную точку перенаправления приложения. Допустимый запрос к этой конечной точке содержит код авторизации.
Затем
ConfidentialClientApplication
экземпляр обменивается этим кодом авторизации для маркера идентификатора и маркера доступа из идентификатора Microsoft Entra ID.// First, validate the state, then parse any error codes in response, then extract the authCode. Then: // build the auth code params: final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build(); // Get a client instance and leverage it to acquire the token: final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance(); final IAuthenticationResult result = client.acquireToken(authParams).get();
В следующем списке описываются функции этого кода:
AuthorizationCodeParameters
: параметры, которые необходимо задать для обмена кодом авторизации для идентификатора и (или) маркера доступа.authCode
: код авторизации, полученный в конечной точке перенаправления.REDIRECT_URI
: URI перенаправления, используемый на предыдущем шаге, должен быть передан еще раз.SCOPES
: области, используемые на предыдущем шаге, должны быть переданы снова.
При успешном выполнении
acquireToken
извлекаются утверждения токена. Если проверка неисключения проходит, результаты помещаются вcontext
экземпляр сеансаIdentityContextData
и сохраняются в сеансе. Затем приложение может создать экземплярIdentityContextData
сеанса путем экземпляраIdentityContextAdapterServlet
, когда ему требуется доступ, как показано в следующем коде:// parse IdToken claims from the IAuthenticationResult: // (the next step - validateNonce - requires parsed claims) context.setIdTokenClaims(result.idToken()); // if nonce is invalid, stop immediately! this could be a token replay! // if validation fails, throws exception and cancels auth: validateNonce(context); // set user to authenticated: context.setAuthResult(result, client.tokenCache().serialize());
Защита маршрутов
Сведения о том, как пример приложения фильтрует доступ к маршрутам, см. в AuthenticationFilter.java. В файле app.protect.authenticated
authentication.properties свойство содержит разделенные запятыми маршруты, к которым могут получить доступ только прошедшие проверку подлинности пользователи, как показано в следующем примере:
# for example, /token_details requires any user to be signed in and does not require special roles claim(s)
app.protect.authenticated=/token_details
Области
Области сообщают Microsoft Entra ID уровень доступа, который запрашивает приложение.
На основе запрошенных областей идентификатор Microsoft Entra представляет диалог согласия для пользователя при входе. Если пользователь дает согласие на одну или несколько областей и получает маркер, в результируемые области кодируются в результирующий access_token
код.
Области, запрошенные приложением, см. в разделе authentication.properties. Эти три области запрашиваются MSAL и предоставляются идентификатором Microsoft Entra ID по умолчанию.
Дополнительные сведения
- Библиотека проверки подлинности Майкрософт (MSAL) для Java
- Справочная документация по MSAL Java
- платформа удостоверений Майкрософт (идентификатор Microsoft Entra для разработчиков)
- Краткое описание: регистрация приложения на платформе Microsoft Identity
- Общие сведения о согласии приложений с идентификатором Microsoft Entra ID
- Understand user and admin consent (Получение согласия пользователя и администратора)
- Примеры кода MSAL
Следующий шаг
Развертывание приложений Java WebLogic в WebLogic в Azure Виртуальные машины