Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано приложение Java для WebSphere, которое выполняет вход пользователей в систему и получает маркер доступа для вызова Microsoft Graph. Она использует библиотеку проверки подлинности Microsoft (MSAL) для Java.
На следующей схеме показана топология приложения:
Схема, показывающая топологию приложения.
Клиентское приложение использует MSAL для Java (MSAL4J) для входа пользователя в систему и получения маркера доступа для Microsoft Graph от Microsoft Entra ID. Токен доступа подтверждает, что пользователь авторизован для доступа к конечной точке API Microsoft Graph в соответствии с областью действия.
Предварительные требования
- Java 8 или более поздней версии
- Maven 3
- Клиент идентификатора Microsoft Entra. Дополнительные сведения см. в статье Как получить арендатор 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/2-Authorization-I/call-graph
Или перейдите в репозиторий ms-identity-msal-java-samples, затем скачайте его как файл .zip и распакуйте его на жесткий диск.
Внимание
Чтобы избежать ограничений длины пути к файлам в Windows, клонируйте или извлеките репозиторий в каталог рядом с корнем жесткого диска.
Регистрация примера приложения в клиенте Идентификатора Microsoft Entra
В этом примере есть один проект. В следующих разделах показано, как зарегистрировать приложение с помощью портал Azure.
Выберите клиент Идентификатора Microsoft Entra, в котором вы хотите создать приложения
Чтобы выбрать арендатора, выполните следующие действия:
Войдите в портал Azure.
Если ваша учетная запись присутствует более чем в одном клиенте Microsoft Entra ID, выберите свой профиль в углу портала Azure, а затем выберите Сменить каталог, чтобы переключить сеанс на нужный клиент Microsoft Entra ID.
Зарегистрируйте приложение (java-servlet-webapp-call-graph)
Сначала зарегистрируйте новое приложение на портале Azure, следуя инструкциям из Краткого руководства: регистрация приложения с помощью платформы удостоверений Майкрософт.
Затем выполните следующие действия, чтобы завершить регистрацию:
Перейдите на страницу Регистрация приложений платформы идентификации Microsoft для разработчиков.
Выберите Новая регистрация.
На появившейся странице Регистрация приложения введите следующие данные для регистрации приложения:
В разделе Name введите осмысленное имя приложения, которое будет отображаться пользователям приложения, — например, .
В разделе "Поддерживаемые типы учетных записей" выберите один из следующих вариантов:
- Выберите Учетные записи только в этом каталоге организации, если вы создаете приложение, предназначенное для использования только пользователями в вашем клиенте, то есть однотенантное приложение.
- Выберите Учетные записи в любом каталоге организации, если хотите, чтобы пользователи в любом клиенте Microsoft Entra ID могли использовать ваше приложение, то есть это мультитенантное приложение.
- Выберите вариант Учетные записи в любом каталоге организации и личные учетные записи Microsoft для максимально широкого круга клиентов, то есть мультитенантное приложение, которое также поддерживает личные учетные записи Microsoft.
Выберите персональные учетные записи Майкрософт для использования только пользователями личных учетных записей Майкрософт, например Hotmail, Live, Skype и Xbox.
В разделе URI перенаправления выберите Веб в раскрывающемся списке и введите следующий URI перенаправления:
Выберите Зарегистрировать, чтобы создать приложение.
На странице регистрации приложения найдите и скопируйте значение идентификатора приложения (клиента), которое будет использоваться позже. Это значение используется в файле конфигурации или файлах приложения.
Выберите Сохранить, чтобы сохранить изменения.
На странице регистрации приложения выберите сертификаты и секреты на панели навигации, чтобы открыть страницу, где можно создать секреты и отправить сертификаты.
В разделе Секреты клиента выберите Создать секрет клиента.
Введите описание — например, секрет приложения.
Выберите срок истечения действия секрета или укажите пользовательский срок его существования. Секреты клиента ограничены максимальным сроком существования 24 месяцев, и Microsoft рекомендует срок действия менее 12 месяцев. Для боевых приложений предпочтительнее использовать сертификат или учетные данные федеративной идентификации вместо секрета клиента.
Выберите Добавить. Отображается созданное значение.
Скопируйте и сохраните созданное значение для использования в последующих шагах. Это значение требуется для файлов конфигурации кода. Это значение не отображается снова, и его нельзя получить другими средствами. Поэтому обязательно сохраните его в портале Azure, прежде чем перейдёте на любой другой экран или панель.
На странице регистрации приложения выберите API permissions на панели навигации, чтобы открыть страницу добавления доступа к API, необходимым вашему приложению.
Выберите Добавить разрешения.
Убедитесь, что выбрана вкладка API Майкрософт.
В разделе Часто используемые интерфейсы API Microsoft выберите Microsoft Graph.
В разделе "Делегированные разрешения" выберите User.Read из списка. При необходимости используйте поле поиска.
Выберите Добавить разрешения.
Настройте приложение (java-servlet-webapp-call-graph) для использования вашей регистрации приложения
Чтобы настроить приложение, выполните следующие действия.
Примечание.
В следующих шагах — это то же самое, что и или .
Откройте проект в интегрированной среде разработки.
Откройте файл ./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.
- Выберите Call Graph, чтобы выполнить запрос к конечной точке Microsoft Graph /me endpoint и просмотреть некоторые полученные сведения о пользователе.
- Используйте кнопку в углу, чтобы выйти из системы.
О коде
В этом примере используется MSAL для Java (MSAL4J) для входа пользователя в систему и получения токена для Microsoft API Graph. Он использует Microsoft Graph SDK for Java для получения данных из Microsoft Graph. Эти библиотеки необходимо добавить в проекты с помощью Maven.
Если вы хотите воспроизвести поведение этого примера, можно скопировать файл pom.xml и содержимое папок helpers и authservlets в папке src/main/java/com/microsoft/azuresamples/msal4j. Вам также потребуется файл authentication.properties. Эти классы и файлы содержат универсальный код, который можно использовать в широком массиве приложений. Вы также можете скопировать остальную часть примера, но другие классы и файлы создаются специально для решения задачи этого примера.
Содержимое
В следующей таблице показано содержимое папки примера проекта:
| Файл или папка | Описание |
|---|---|
| src/main/java/com/microsoft/azuresamples/msal4j/callgraphwebapp/ | Этот каталог содержит классы, определяющие серверную бизнес-логику приложения. |
| 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);В следующем списке описываются функции этого кода:
- : параметры, которые необходимо задать, чтобы сформировать .
- : Куда 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 or groups claim(s)
app.protect.authenticated=/token_details, /call_graph
Граф вызовов
Когда пользователь переходит к , приложение создает экземпляр из Java Graph SDK, передавая токен доступа вошедшего в систему пользователя. Клиент Graph помещает маркер доступа в заголовки своих запросов . Затем приложение просит клиента Graph вызвать конечную точку , чтобы получить сведения о пользователе, вошедшем в систему.
Если у вас уже есть действительный маркер доступа для службы Graph с областью действия , вам нужен только следующий код, чтобы получить доступ к конечной точке :
//CallGraphServlet.java
User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();
Области действия
Области действия указывают Microsoft Entra ID, какой уровень доступа запрашивает приложение.
На основании запрошенных областей действия Microsoft Entra ID отображает пользователю диалоговое окно согласия при входе в систему. Если пользователь соглашается с одной или несколькими областями действия и получает токен, то согласованные области действия кодируются в полученном .
Сведения об областях, запрошенных приложением, см. в authentication.properties. По умолчанию приложение задаёт значение параметра scopes как . Эта конкретная область API Microsoft Graph предназначена для доступа к сведениям текущего пользователя, вошедшего в систему. Конечная точка Graph для доступа к этой информации: . Все допустимые запросы, отправленные к этой конечной точке, должны содержать , который содержит область действия в заголовке .
Дополнительные сведения
- Библиотека аутентификации Microsoft (MSAL) для Java
- платформа идентификации Microsoft (Microsoft Entra ID для разработчиков)
- Краткое руководство. Регистрация приложения на платформе удостоверений Майкрософт
- Общие сведения о сценариях предоставления согласия для приложений в Microsoft Entra ID
- Общие сведения о согласии пользователя и администратора
- Примеры кода MSAL
Следующий шаг
Развертывание Java-приложений WebSphere в Traditional WebSphere на виртуальных машинах Azure