Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье демонстрируется приложение Java Servlet, которое выполняет аутентификацию пользователей с помощью Azure Active Directory B2C (Azure AD B2C), используя Библиотеку проверки подлинности Майкрософт для Java (MSAL4J).
Примечание.
По состоянию на 1 мая 2025 г. Azure Active Directory B2C больше не доступен для покупки для новых клиентов. Существующие клиенты могут продолжать использовать Azure AD B2C с поддержкой, предоставленной по крайней мере до мая 2030 года. Для новых проектов по управлению удостоверениями клиентов и доступом (CIAM) используйте вместо этого Внешняя идентификация Microsoft Entra.
На следующей схеме показана топология приложения:
Схема, показывающая топологию приложения.
Приложение использует MSAL4J для входа пользователей в систему и получения токена идентификации из Azure AD B2C. Токен идентификации подтверждает, что пользователь прошёл проверку подлинности в тенанте Azure AD B2C.
Предварительные требования
- JDK версии 8 или выше
- Maven 3
- Клиент Azure AD B2C. Дополнительные сведения см. в статье Руководство. Создание клиента Azure Active Directory B2C
- Учетная запись пользователя в клиенте Azure AD B2C.
- 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-b2c
Или перейдите в репозиторий ms-identity-msal-java-samples, затем скачайте его как файл .zip и распакуйте его на жесткий диск.
Внимание
Чтобы избежать ограничений длины пути к файлам в Windows, клонируйте или извлеките репозиторий в каталог рядом с корнем жесткого диска.
Регистрация примера приложения в клиенте Azure AD B2C
Пример поставляется с предварительно зарегистрированным приложением для тестирования. Если вы хотите использовать собственный клиент и приложение Azure AD B2C, выполните действия, описанные в следующих разделах, чтобы зарегистрировать и настроить приложение в портал Azure. В противном случае выполните шаги для запуска примера.
Выберите клиент Azure AD B2C, в котором вы хотите создать приложения
Чтобы выбрать арендатора, выполните следующие действия:
Войдите в портал Azure.
Если ваша учетная запись присутствует в нескольких арендаторах Azure AD B2C, выберите свой профиль в углу портала Azure, а затем выберите Переключить каталог, чтобы переключить сеанс на нужный арендатор Azure AD B2C.
Создание потоков пользователей и настраиваемых политик
Чтобы создать распространенные потоки пользователей, такие как регистрация, вход в систему, изменение профиля и сброс пароля, см. Руководство. Создание потоков пользователей в Azure Active Directory B2C.
Вам также следует рассмотреть возможность создания настраиваемых политик в Azure Active Directory B2C, однако это выходит за рамки данного руководства.
Добавить внешних поставщиков удостоверений личности
См. Руководство. Добавление поставщиков удостоверений в приложения в Azure Active Directory B2C.
Зарегистрируйте приложение (ms-identity-b2c-java-servlet-webapp-authentication)
Чтобы зарегистрировать приложение, выполните следующие действия.
Перейдите на портал Azure и выберите Azure AD B2C.
Выберите "Регистрация приложений" на панели навигации и выберите "Создать регистрацию".
На появившейся странице Регистрация приложения введите следующие данные для регистрации приложения:
- В разделе Name введите осмысленное имя приложения, которое будет отображаться пользователям приложения, — например, .
- В разделе "Поддерживаемые типы учетных записей" выберите учетные записи в любом каталоге организации и личных учетных записях Майкрософт (например, Skype, Xbox, Outlook.com).
- В разделе URI перенаправления (необязательно) выберите Интернет в раскрывающемся списке и введите следующий URI перенаправления:
Выберите Зарегистрировать, чтобы создать приложение.
На странице регистрации приложения найдите и скопируйте значение идентификатора приложения (клиента), которое будет использоваться позже. Это значение используется в файле конфигурации или файлах приложения.
Выберите Сохранить, чтобы сохранить изменения.
На странице регистрации приложения выберите сертификаты и секреты на панели навигации, чтобы открыть страницу, где можно создать секреты и отправить сертификаты.
В разделе Секреты клиента выберите Создать секрет клиента.
Введите описание — например, секрет приложения.
Выберите срок истечения действия секрета или укажите пользовательский срок его существования. Секреты клиента ограничены максимальным сроком существования 24 месяцев, и Microsoft рекомендует срок действия менее 12 месяцев. Для боевых приложений предпочтительнее использовать сертификат или учетные данные федеративной идентификации вместо секрета клиента.
Выберите Добавить. Отображается созданное значение.
Скопируйте и сохраните созданное значение для использования в последующих шагах. Это значение требуется для файлов конфигурации кода. Это значение не отображается снова, и его нельзя получить другими средствами. Поэтому обязательно сохраните его в портале Azure, прежде чем перейдёте на любой другой экран или панель.
Настройте приложение (ms-identity-b2c-java-servlet-webapp-authentication) для использования регистрации приложения
Чтобы настроить приложение, выполните следующие действия.
Примечание.
В следующих шагах — это то же самое, что и или .
Откройте проект в интегрированной среде разработки.
Откройте файл ./src/main/resources/authentication.properties.
Найдите свойство и замените существующее значение на идентификатор приложения или приложения с портала Azure.
Найдите свойство
aad.secretи замените существующее значение на значение, которое вы сохранили при создании приложенияms-identity-b2c-java-servlet-webapp-authenticationв портале Azure.Найдите свойство и замените существующий clientId приложения на значение, которое вы указали в на шаге 1 этого раздела.
Найдите свойство и замените первое вхождение на имя клиента Azure AD B2C, в котором вы создали приложение на портале Azure.
Найдите свойство
aad.authorityи замените второе вхождениеfabrikamb2cименем арендатора Azure AD B2C, в котором вы создали приложениеms-identity-b2c-java-servlet-webapp-authenticationв портале Azure.Найдите свойство и замените его именем политики пользовательского потока регистрации и входа, которую вы создали в клиенте Azure AD B2C, где вы создали приложение в портале Azure.
Найдите свойство и замените его именем политики пользовательского потока сброса пароля, которую вы создали в арендаторе Azure AD B2C, где вы создали приложение на портале Azure.
Найдите свойство и замените его именем политики пользовательского потока редактирования профиля, созданной в арендаторе Azure AD B2C, в котором вы создали приложение на портале 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, чтобы выполнить развертывание.
После завершения развертывания перейдите к , и вы должны увидеть приложение.
Анализ примера
Чтобы изучить пример, выполните следующие действия.
- Обратите внимание, что состояние входа или выхода отображается в центре экрана.
- Выберите контекстно-зависимую кнопку в углу. При первом запуске приложения на этой кнопке отображается надпись Войти.
- На следующей странице следуйте инструкциям и войдите с учетной записью выбранного поставщика удостоверений.
- Обратите внимание, что на контекстно-зависимой кнопке теперь отображается надпись Выйти, а также ваше имя пользователя.
- Выберите Сведения о маркере ID, чтобы просмотреть некоторые декодированные утверждения маркера ID.
- Вы также можете изменить свой профиль. Выберите ссылку, чтобы изменить сведения, такие как отображаемое имя, место проживания и профессия.
- Используйте кнопку в углу, чтобы выйти из системы.
- После выхода из системы перейдите по следующему URL-адресу на страницу сведений о токене: . Здесь можно увидеть, как приложение отображает ошибку вместо утверждений токена ID.
О коде
В этом примере показано, как использовать MSAL4J для входа пользователей в клиент Azure AD B2C.
Содержимое
В следующей таблице показано содержимое папки примера проекта:
| Файл или папка | Описание |
|---|---|
| AuthHelper.java | Вспомогательные функции для проверки подлинности. |
| Config.java | Выполняется при запуске и настраивает средство чтения свойств и средства ведения журнала. |
| authentication.properties | Идентификатор и конфигурация программы Microsoft Entra. |
| AuthenticationFilter.java | Перенаправляет запросы, не прошедшие проверку подлинности, на защищенные ресурсы на страницу 401. |
| MsalAuthSession | Создается с помощью . Хранит все атрибуты сеанса, связанные с MSAL, в атрибуте сеанса. |
| *Servlet.java | Все доступные конечные точки определяются в классах Java с именами, заканчивающимися Servlet.. |
| CHANGELOG.md | Список изменений в примере. |
| CONTRIBUTING.md | Рекомендации по участию в образце. |
| ЛИЦЕНЗИЯ | Лицензия на образец. |
ConfidentialClientApplication
Экземпляр создается в файле AuthHelper.java, как показано в следующем примере. Этот объект помогает сформировать URL-адрес авторизации Azure AD B2C, а также обменять токен аутентификации на токен доступа.
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.b2cAuthority(AUTHORITY + policy)
.build();
Для создания экземпляра используются следующие параметры:
- Идентификатор клиента приложения.
- Секрет клиента, который является обязательным для конфиденциальных клиентских приложений.
- Адрес полномочий Azure AD B2C, объединенный с соответствующим для регистрации, входа, редактирования профиля или сброса пароля.
В этом примере эти значения считываются из файла authentication.properties с помощью средства чтения свойств в файле Config.java .
Пошаговое руководство
Ниже приведены пошаговые инструкции по функциональным возможностям приложения:
Первым шагом в процессе входа является отправка запроса к конечной точке для вашего арендатора Azure Active Directory B2C. Экземпляр MSAL4J используется для формирования URL-адреса запроса на авторизацию, а приложение перенаправляет браузер на этот URL-адрес, как показано в следующем примере:
final ConfidentialClientApplication client = getConfidentialClientInstance(policy); final AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters .builder(REDIRECT_URI, Collections.singleton(SCOPES)).responseMode(ResponseMode.QUERY) .prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String redirectUrl = client.getAuthorizationRequestUrl(parameters).toString(); Config.logger.log(Level.INFO, "Redirecting user to {0}", redirectUrl); resp.setStatus(302); resp.sendRedirect(redirectUrl);В следующем списке описываются функции этого кода:
: параметры, которые необходимо задать для формирования AuthorizationRequestUrl.
: куда Azure AD B2C перенаправляет браузер вместе с кодом авторизации после получения учетных данных пользователя.
: Области действия — это разрешения, запрашиваемые приложением.
Как правило, для получения ответа с токеном идентификации достаточно трёх областей действия . Однако MSAL4J требует, чтобы все ответы от Azure AD B2C также содержали маркер доступа.
Чтобы Azure AD B2C мог выдавать токен доступа, а также токен идентификации, запрос должен включать дополнительную область ресурса. Поскольку этому приложению фактически не требуется внешняя область ресурса, оно добавляет собственный идентификатор клиента в качестве четвертой области, чтобы получить маркер доступа.
Полный список областей, запрашиваемых приложением, можно найти в файле authentication.properties .
: Azure AD B2C может возвращать ответ в виде параметров формы в HTTP-запросе методом POST или в виде параметров строки запроса в HTTP-запросе методом GET.
: Azure AD B2C должен предложить пользователю выбрать учетную запись, с помощью которой он хочет пройти проверку подлинности.
: уникальная переменная, которую приложение устанавливает в сеансе при каждом запросе токена и удаляет после получения соответствующего обратного вызова перенаправления Azure AD B2C. Переменная состояния гарантирует, что запросы Azure AD B2C к действительно являются запросами на авторизацию Azure AD B2C, исходящими из этого приложения и этого сеанса, тем самым предотвращая атаки CSRF. Это выполняется в файле AADRedirectServlet.java.
: уникальная переменная, которая устанавливается приложением в сессию при каждом запросе токена и удаляется после получения соответствующего токена. Этот nonce включается в результирующие токены, выдаваемые Azure AD B2C, тем самым гарантируя отсутствие атаки повторного использования токена.
Пользователю отображается запрос на вход от Azure Active Directory B2C. Если попытка входа выполнена успешно, браузер пользователя перенаправляется в конечную точку перенаправления приложения. Допустимый запрос к этой конечной точке содержит код авторизации.
Затем экземпляр обменивает этот код авторизации на ID-токен и токен доступа от Azure Active Directory B2C, как показано в следующем примере:
final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(REDIRECT_URI)) .scopes(Collections.singleton(SCOPES)).build(); final ConfidentialClientApplication client = AuthHelper .getConfidentialClientInstance(policy); final Future<IAuthenticationResult> future = client.acquireToken(authParams); final IAuthenticationResult result = future.get();В следующем списке описываются функции этого кода:
- : Параметры, которые необходимо задать, чтобы обменять код авторизации на ID и/или маркер доступа.
- : код авторизации, который был получен в конечной точке перенаправления.
- : URI перенаправления, который использовался на предыдущем шаге, необходимо снова передать.
- : Области действия, использованные на предыдущем шаге, необходимо снова передать.
Если выполняется успешно, из маркера извлекаются утверждения, а утверждение nonce проверяется по значению nonce, хранящемуся в сеансе, как показано в следующем примере:
parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache); validateNonce(msalAuth) processSuccessfulAuthentication(msalAuth);Если значение nonce успешно проверено, статус аутентификации сохраняется в сеансе на стороне сервера с использованием методов, предоставляемых классом , как показано в следующем примере:
msalAuth.setAuthenticated(true); msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
Дополнительные сведения
- Что такое Azure Active Directory B2C?
- Типы приложений, которые можно использовать в Active Directory B2C
- Рекомендации и лучшие методики для Azure Active Directory B2C
- Сеанс Azure AD B2C
- Библиотека аутентификации Microsoft (MSAL) для Java
Дополнительные сведения о том, как работают протоколы OAuth 2.0 в этом и других сценариях, см. в Сценарии проверки подлинности для Microsoft Entra ID.
Следующий шаг
Развертывание Java-приложений WebSphere в Traditional WebSphere на виртуальных машинах Azure