Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано приложение Java Tomcat, которое выполняет вход пользователей в ваш арендатор Microsoft Entra ID с помощью библиотеки аутентификации Microsoft (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 и т. д., если вы хотите работать с личными учетными записями Майкрософт.
- Tomcat 9
- 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-файл , который можно запустить на различных серверах приложений.
Запустите пример
- Развертывание в Служба приложений Azure
- Запуск локально
В следующих разделах описано, как развернуть пример в Службе приложений Azure.
Предварительные требования
Плагин Maven для приложений Служба приложений Azure
Если Maven не является вашим предпочтительным средством разработки, ознакомьтесь со следующими руководствами, которые используют другие инструменты:
- IntelliJ IDEA
- Eclipse
- Visual Studio Code
Настройте плагин Maven
При развертывании в Служба приложений Azure автоматически используются учетные данные Azure из Azure CLI. Если Azure CLI не установлен локально, то плагин Maven выполняет аутентификацию с помощью OAuth или входа с помощью кода устройства. Дополнительные сведения см. в разделе аутентификация в подключаемых модулях Maven.
Чтобы настроить подключаемый модуль, выполните следующие действия.
Выполните следующую команду, чтобы настроить развертывание. Эта команда помогает настроить операционную систему службы приложение Azure, версию Java и версию Tomcat.
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:configДля Создать новую конфигурацию запуска нажмите Y, затем нажмите Enter.
Для значения параметра ОС нажмите 1 для Windows или 2 для Linux, затем нажмите Enter.
Для определения значения javaVersion нажмите 2 для Java 11, затем нажмите Enter.
При появлении Define value for webContainer нажмите 4 для Tomcat 9.0, затем нажмите Enter.
Чтобы задать значение для pricingTier, нажмите Enter, чтобы выбрать уровень P1v2 по умолчанию.
Для подтверждения нажмите Y, затем нажмите Enter.
В следующем примере показаны выходные данные процесса развертывания:
Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[INFO] ------------------------------------------------------------------------
После того как вы подтвердите свой выбор, плагин добавит необходимый элемент плагина и параметры в файл проекта pom.xml, чтобы настроить приложение для запуска в Служба приложений Azure.
Соответствующая часть файла pom.xml должна выглядеть примерно так:
<build>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>>azure-webapp-maven-plugin</artifactId>
<version>x.xx.x</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<resourceGroup>your-resourcegroup-name</resourceGroup>
<appName>your-app-name</appName>
...
</configuration>
</plugin>
</plugins>
</build>
Параметры конфигурации для App Service можно изменить непосредственно в pom.xml. Некоторые распространенные конфигурации перечислены в следующей таблице:
| Свойство | Обязательное поле | Описание |
|---|---|---|
subscriptionId |
false | Идентификатор подписки. |
resourceGroup |
true | Группа ресурсов Azure для приложения. |
appName |
true | Имя приложения. |
region |
false | Регион, в котором размещается приложение. Значение по умолчанию — . Допустимые регионы см. в разделе Поддерживаемые регионы. |
pricingTier |
false | Ценовая категория приложения. Значение по умолчанию для рабочей нагрузки в производственной среде — . Рекомендуемое минимальное значение для разработки и тестирования Java — . Дополнительные сведения см. в разделе Цены на службу приложений. |
runtime |
false | Конфигурация среды выполнения. Дополнительные сведения см. в разделе Сведения о конфигурации. |
deployment |
false | Конфигурация развертывания. Дополнительные сведения см. в разделе Сведения о конфигурации. |
Полный список конфигураций см. в справочной документации по подключаемым модулям. Все плагины Azure Maven имеют общий набор параметров конфигурации. Сведения об этих конфигурациях см. в разделе Общие конфигурации. Сведения о конфигурациях для Служба приложений Azure см. в разделе Приложение Azure: сведения о конфигурации.
Не забудьте сохранить отдельно значения и для дальнейшего использования.
Подготовка приложения к развертыванию
Когда вы развертываете свое приложение в App Service, URL-адрес перенаправления меняется на URL-адрес перенаправления развернутого экземпляра вашего приложения. Чтобы изменить эти параметры в файле свойств, выполните следующие действия.
Откройте файл authentication.properties вашего приложения и измените значение на доменное имя вашего развернутого приложения, как показано в следующем примере. Например, если на предыдущем шаге вы выбрали в качестве имени приложения, то теперь необходимо использовать в качестве значения . Убедитесь, что вы также изменили протокол с на .
# 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://<your-app-name>.azurewebsites.netПосле сохранения этого файла используйте следующую команду, чтобы перестроить приложение:
mvn clean package
Внимание
В этом же файле authentication.properties у вас есть параметр для . Не рекомендуется развертывать это значение в Службу приложений. Не рекомендуется оставить это значение в коде и потенциально отправить его в репозиторий Git. Чтобы удалить это секретное значение из кода, вы можете найти более подробные инструкции в разделе Развертывание в App Service — удаление секрета. Это руководство добавляет дополнительные шаги по отправке значения секрета в Key Vault и использованию ссылок на Key Vault.
Обновите регистрацию приложения Microsoft Entra ID
Поскольку URI перенаправления изменяется после развертывания вашего приложения в Служба приложений Azure, необходимо также изменить URI перенаправления в регистрации приложения Microsoft Entra ID. Чтобы внести это изменение, выполните следующие действия:
Перейдите на страницу Регистрация приложений платформы идентификации Microsoft для разработчиков.
Используйте поле поиска, чтобы найти вашу регистрацию приложения, например .
Откройте регистрацию приложения, выбрав его имя.
Выберите Проверка подлинности в меню.
В разделе веб-URI перенаправления выберите Добавить URI.
Введите URI приложения, добавив в конец — например, .
Выберите Сохранить.
Развертывание приложения
Теперь вы готовы развернуть приложение в службе приложение Azure. Используйте следующую команду, чтобы убедиться, что вы вошли в среду Azure для выполнения развертывания:
az login
Когда вся конфигурация будет готова в вашем файле pom.xml, вы сможете использовать следующую команду для развертывания Java-приложения в Azure:
mvn package azure-webapp:deploy
После завершения развертывания ваше приложение будет доступно по адресу . Откройте URL в локальном браузере, после чего должна отобразиться стартовая страница приложения .
Анализ примера
Чтобы изучить пример, выполните следующие действия.
- Обратите внимание, что состояние входа или выхода отображается в центре экрана.
- Выберите контекстно-зависимую кнопку в углу. При первом запуске приложения на этой кнопке отображается надпись Войти.
- На следующей странице следуйте инструкциям и войдите с учетной записью в клиенте идентификатора 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