Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом примере показано приложение Java WebSphere, которое выполняет вход пользователей в ваш клиент Microsoft Entra ID с помощью библиотеки проверки подлинности Майкрософт (MSAL) для Java.
На следующей схеме показана топология приложения:
Схема, показывающая топологию приложения.
Клиентское приложение использует MSAL для Java (MSAL4J) для входа пользователей в систему в их собственном арендаторе Microsoft Entra ID и получения от Microsoft Entra ID токена идентификации. Маркер ID подтверждает, что пользователь прошёл проверку подлинности в этом арендаторе. Приложение защищает маршруты в соответствии с состоянием проверки подлинности пользователя.
Предварительные требования
- JDK версии 8 или выше
- Maven 3
- Клиент идентификатора Microsoft Entra. Дополнительные сведения см. в статье Как получить арендатор Microsoft Entra ID.
- Учетная запись пользователя в вашем собственном тенанте Microsoft Entra ID, если вы хотите работать только с учетными записями в каталоге вашей организации, то есть в однотенантном режиме. Если вы еще не создали учетную запись пользователя в арендаторе Microsoft Entra ID, вам следует сделать это, прежде чем продолжить. Дополнительные сведения см. в статье Как создать, пригласить и удалить пользователей.
- Учетная запись пользователя в клиенте Microsoft Entra ID любой организации, если вы хотите работать с учетными записями в любом каталоге организации, то есть в мультитенантном режиме. Этот пример необходимо изменить для работы с личной учетной записью Майкрософт. Если вы еще не создали учетную запись пользователя в вашем клиенте Microsoft Entra ID, вам следует сделать это, прежде чем продолжить. Дополнительные сведения см. в статье Как создать, пригласить и удалить пользователей.
- Личная учетная запись Майкрософт, например Xbox, Hotmail, Live и т. д., если вы хотите работать с личными учетными записями Майкрософт.
- WebSphere
- Visual Studio Code
- Инструменты Azure для Visual Studio Code
Рекомендации
- Некоторое знакомство с Java / Jakarta Servlets.
- Некоторые знания о терминале Linux/OSX.
- jwt.ms для проверки ваших токенов.
- Fiddler для мониторинга сетевой активности и устранения неполадок.
- Подписывайтесь на блог Microsoft Entra, чтобы быть в курсе последних обновлений.
Настройка примера
В следующих разделах показано, как настроить пример приложения.
Клонирование или скачивание примера репозитория
Чтобы клонировать пример, откройте окно 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, следуя инструкциям в кратком руководстве: Регистрация приложения с помощью платформы удостоверений Майкрософт.
Затем выполните следующие действия, чтобы завершить регистрацию:
Перейдите на страницу Регистрация приложений платформы идентификации Microsoft для разработчиков.
Выберите Новая регистрация.
На появившейся странице Регистрация приложения введите следующие данные для регистрации приложения:
В разделе Имя введите понятное название приложения, которое будет отображаться пользователям приложения, — например, .
В разделе "Поддерживаемые типы учетных записей" выберите один из следующих вариантов:
- Выберите Учетные записи только в этом каталоге организации, если вы создаете приложение, предназначенное для использования только пользователями в вашем клиенте, то есть однотенантное приложение.
- Выберите Учетные записи в любом каталоге организации, если хотите, чтобы пользователи в любом клиенте Microsoft Entra ID могли использовать ваше приложение, то есть это мультитенантное приложение.
- Выберите вариант Учетные записи в любом каталоге организации и личные учетные записи Microsoft для максимально широкого круга клиентов, то есть мультитенантное приложение, которое также поддерживает личные учетные записи Microsoft.
- Выберите персональные учетные записи Майкрософт для использования только пользователями личных учетных записей Майкрософт, например Hotmail, Live, Skype и Xbox.
В разделе URI перенаправления выберите Веб в раскрывающемся списке и введите следующий URI перенаправления:
Выберите Зарегистрировать, чтобы создать приложение.
На странице регистрации приложения найдите и скопируйте значение идентификатора приложения (клиента), которое будет использоваться позже. Это значение используется в файле конфигурации или файлах приложения.
На странице регистрации приложения выберите сертификаты и секреты на панели навигации, чтобы открыть страницу для создания секретов и отправки сертификатов.
В разделе Секреты клиента выберите Создать секрет клиента.
Введите описание — например, секрет приложения.
Выберите срок истечения действия секрета или укажите пользовательский срок его существования. Секреты клиента ограничены максимальным сроком существования 24 месяцев, и Microsoft рекомендует срок действия менее 12 месяцев. Для боевых приложений предпочтительнее использовать сертификат или учетные данные федеративной идентификации вместо секрета клиента.
Выберите Добавить. Отображается созданное значение.
Скопируйте и сохраните созданное значение для использования в последующих шагах. Это значение требуется для файлов конфигурации кода. Это значение не отображается снова, и его нельзя получить другими средствами. Поэтому обязательно сохраните его в портале Azure, прежде чем перейдёте на любой другой экран или панель.
Настройте приложение для использования регистрации приложения
Чтобы настроить приложение, выполните следующие действия.
Примечание.
В следующих шагах — это то же самое, что и или .
Откройте проект в интегрированной среде разработки.
Откройте файл ./src/main/resources/authentication.properties.
Найдите строку . Замените существующее значение одним из следующих значений:
- Идентификатор арендатора Microsoft Entra ID, если вы зарегистрировали приложение с параметром Только учетные записи в этом организационном каталоге.
- Слово , если вы зарегистрировали свое приложение с параметром Учетные записи в любом каталоге организации.
- Слово , если вы зарегистрировали приложение с параметром Учетные записи в любом каталоге организации и личные учетные записи Майкрософт.
- Слово , если вы зарегистрировали приложение с параметром Личные учетные записи Майкрософт.
Найдите строку и замените существующее значение на идентификатор приложения или приложения , скопированный из портала Azure.
Найдите строку и замените текущее значение на значение, которое вы сохранили при создании приложения в портале Azure.
Соберите пример
Чтобы создать пример с помощью Maven, перейдите в каталог, содержащий файл pom.xml для примера, а затем выполните следующую команду:
mvn clean package
Эта команда создает WAR-файл , который можно запустить на различных серверах приложений.
Запустите пример
В этих инструкциях предполагается, что вы установили WebSphere и настроили сервер. Вы можете использовать инструкции в Развертывание кластера WebSphere Application Server (традиционного) на виртуальных машинах Azure для базовой конфигурации сервера.
Перед развертыванием в WebSphere выполните следующие действия, чтобы внести некоторые изменения конфигурации в сам пример, а затем создать или перестроить пакет:
Перейдите к файлу authentication.properties вашего приложения и измените значение на URL-адрес и номер порта вашего сервера, которые вы планируете использовать, как показано в следующем примере:
# app.homePage is by default set to dev server address and app context path on the server # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net app.homePage=https://<server-url>:<port-number>/msal4j-servlet-auth/После сохранения этого файла используйте следующую команду, чтобы перестроить приложение:
mvn clean packageПосле завершения сборки кода скопируйте файл .war в файловую систему целевого сервера.
Кроме того, необходимо внести то же изменение в регистрацию приложения Azure, указав его в портале Azure в качестве значения URI перенаправления на вкладке Аутентификация.
Перейдите на страницу Регистрация приложений платформы идентификации Microsoft для разработчиков.
Используйте поле поиска, чтобы найти регистрацию своего приложения, например, .
Откройте регистрацию приложения, выбрав его имя.
Выберите Проверка подлинности в меню.
В разделе WebRedirect URIs выберите Add URI.
Укажите URI приложения, добавив в конец /auth/redirect - например, .
Выберите Сохранить.
Выполните следующие действия, чтобы развернуть пример с помощью консоли интегрированных решений WebSphere:
На вкладке "Приложения" выберите "Новое приложение", а затем "Новое корпоративное приложение".
Выберите файл .war, который вы собрали, затем нажимайте Далее, пока не дойдёте до шага установки Сопоставление корней контекста для веб-модулей. Другие параметры по умолчанию должны подойти.
Для корневого пути контекста задайте то же значение, что и после номера порта в 'Redirect URI', который вы указали в примере конфигурации/при регистрации приложения Azure. То есть, если URI перенаправления — , то корневой путь контекста должен быть .
Выберите Готово.
После завершения установки приложения перейдите в раздел корпоративных приложений WebSphere на вкладке "Приложения".
Выберите в списке приложений файл .war, который вы установили, а затем выберите Start, чтобы выполнить развертывание.
После завершения развертывания перейдите к , и вы должны увидеть приложение.
Анализ примера
Чтобы изучить пример, выполните следующие действия.
- Обратите внимание, что состояние входа или выхода отображается в центре экрана.
- Выберите контекстно-зависимую кнопку в углу. При первом запуске приложения на этой кнопке отображается надпись Войти.
- На следующей странице следуйте инструкциям и войдите с учетной записью в клиенте идентификатора Microsoft Entra ID.
- На экране согласия обратите внимание на запрашиваемые области.
- Обратите внимание, что на контекстно-зависимой кнопке теперь отображается надпись Выйти, а также ваше имя пользователя.
- Выберите Сведения о маркере ID, чтобы просмотреть некоторые декодированные утверждения маркера ID.
- Используйте кнопку в углу, чтобы выйти из системы.
- После выхода выберите Сведения о маркере идентификации, чтобы увидеть, что приложение отображает ошибку вместо утверждений маркера идентификации, если пользователь не авторизован.
О коде
В этом примере показано, как использовать MSAL для Java (MSAL4J) для входа пользователей в клиент Идентификатора Microsoft Entra. Если вы хотите использовать MSAL4J в собственных приложениях, необходимо добавить его в проекты с помощью Maven.
Если вы хотите воспроизвести поведение этого примера, можно скопировать файл pom.xml и содержимое папок helpers и authservlets в папке src/main/java/com/microsoft/azuresamples/msal4j. Вам также потребуется файл authentication.properties. Эти классы и файлы содержат универсальный код, который можно использовать в широком массиве приложений. Вы также можете скопировать остальную часть примера, но другие классы и файлы создаются специально для решения задачи этого примера.
Содержимое
В следующей таблице показано содержимое папки примера проекта:
| Файл или папка | Описание |
|---|---|
| src/main/java/com/microsoft/azuresamples/msal4j/authwebapp/ | Этот каталог содержит классы, определяющие серверную бизнес-логику приложения. |
| src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ | Этот каталог содержит классы, используемые для входа и выхода конечных точек. |
| *Servlet.java | Все доступные конечные точки определяются в классах Java с именами, заканчивающимися Servlet. |
| 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
Экземпляр создается в файле AuthHelper.java, как показано в следующем примере. Этот объект помогает сформировать URL-адрес авторизации Microsoft Entra ID, а также обменять токен аутентификации на токен доступа.
// 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 .
Пошаговое руководство
Ниже приведены пошаговые инструкции по функциональным возможностям приложения:
Первым шагом в процессе входа является отправка запроса к конечной точке для вашего арендатора Microsoft Entra ID. Экземпляр MSAL4J используется для формирования 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);В следующем списке описываются функции этого кода:
: параметры, которые необходимо задать для формирования AuthorizationRequestUrl.
: URL-адрес, на который Microsoft Entra ID перенаправляет браузер вместе с кодом аутентификации после того, как пользователь введет свои учетные данные. Он должен соответствовать URI перенаправления в регистрации приложения Microsoft Entra ID в портале Azure.
: Области действия — это разрешения, запрашиваемые приложением. Как правило, трех областей действия достаточно для получения ответа с токеном идентификации.
Полный список областей, запрашиваемых приложением, можно найти в файле authentication.properties . Можно добавить дополнительные области действия, например .
Пользователю отображается запрос на вход в систему от Microsoft Entra ID. Если попытка входа выполнена успешно, браузер пользователя перенаправляется в конечную точку перенаправления приложения. Допустимый запрос к этой конечной точке содержит код авторизации.
Затем экземпляр обменивает этот код авторизации на маркер ID и маркер доступа от 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();В следующем списке описываются функции этого кода:
- : Параметры, которые необходимо задать, чтобы обменять код авторизации на ID и/или маркер доступа.
- : код авторизации, который был получен в конечной точке перенаправления.
- : URI перенаправления, который использовался на предыдущем шаге, необходимо снова передать.
- : Области действия, использованные на предыдущем шаге, необходимо снова передать.
Если выполнение прошло успешно, извлекаются утверждения из токена. Если проверка nonce проходит успешно, результаты помещаются в — экземпляр — и сохраняются в сессии. Затем приложение может создать экземпляр из сеанса с помощью экземпляра всякий раз, когда ему требуется доступ к нему, как показано в следующем коде:
// 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. В файле 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 ID отображает пользователю диалоговое окно согласия при входе в систему. Если пользователь соглашается с одной или несколькими областями действия и получает токен, то согласованные области действия кодируются в полученном .
Сведения об областях, запрошенных приложением, см. в authentication.properties. Эти три области запрашиваются MSAL и предоставляются идентификатором Microsoft Entra ID по умолчанию.
Дополнительные сведения
- Библиотека аутентификации Microsoft (MSAL) для Java
- Справочная документация по MSAL Java
- платформа идентификации Microsoft (Microsoft Entra ID для разработчиков)
- Краткое руководство. Регистрация приложения на платформе удостоверений Майкрософт
- Общие сведения о сценариях предоставления согласия для приложений в Microsoft Entra ID
- Понимание согласия пользователя и администратора
- Примеры кода MSAL
Следующий шаг
Развертывание Java-приложений WebSphere в Traditional WebSphere на виртуальных машинах Azure