将 Java JBoss EAP 应用部署到 Azure 应用服务
本文介绍如何通过 Microsoft Entra 帐户将具有登录的 JBoss EAP 应用部署到 Azure 应用服务。
本文假定只使用“本地运行”选项卡完成了以下文章之一,并且现在想要部署到 Azure。 这些说明与以下文章中的“部署到 Azure”选项卡中的说明相同:
- 为 Java JBoss EAP 应用启用使用 Microsoft Entra ID 的登录功能
- 使用 MSAL4J 在 Azure Active Directory B2C 中为 Java JBoss EAP 应用启用登录功能
- 启用 Java JBoss EAP 应用以登录用户并访问 Microsoft Graph
- 使用角色和角色声明保护 Java JBoss EAP 应用
- 使用组和组声明保护 Java JBoss EAP 应用
先决条件
适用于 Azure 应用服务应用的 Maven 插件
如果 Maven 不是首选开发工具,请参阅以下使用其他工具的类似教程:
配置 Maven 插件
Azure 应用服务的部署过程会自动使用 Azure CLI 中的 Azure 凭据。 如果未在本地安装 Azure CLI,则 Maven 插件使用 OAuth 或设备登录进行身份验证。 有关详细信息,请参阅 Maven 插件的身份验证。
使用以下步骤配置插件:
运行以下 Maven 命令来配置部署。 此命令可帮助你设置应用服务操作系统、Java 版本和 Tomcat 版本。
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
在“创建新的运行配置”中,按“Y”,然后按 Enter。
在“定义 OS 的值”中,按“2”表示 Linux,然后按 Enter。
在“定义 javaVersion 的值”中,按“2”表示 Java 11,然后按 Enter。
在“定义 webContainer 的值”中,按“1”表示 JBosseap7,然后按 Enter。
在“定义 pricingTier 的值”中,按 Enter 选择默认的 P1v3 层。
在“确认”中,请按“Y”,然后按 Enter。
以下示例显示了部署过程的输出:
Please confirm webapp properties
AppName : msal4j-servlet-auth-1707220080695
ResourceGroup : msal4j-servlet-auth-1707220080695-rg
Region : centralus
PricingTier : P1v3
OS : Linux
Java Version: Java 11
Web server stack: JBosseap 7
Deploy to slot : false
Confirm (Y/N) [Y]:
[INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 26.196 s
[INFO] Finished at: 2024-02-06T11:48:16Z
[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>
您可以直接在 pom.xml中修改 App Service 的配置。 下表列出了一些常见配置:
财产 | 必须 | 描述 | 版本 |
---|---|---|---|
schemaVersion |
false | 配置架构的版本。 支持的值是 v1 和 v2 。 |
1.5.2 |
subscriptionId |
false | 订阅的 ID。 | 0.1.0+ |
resourceGroup |
true | 适用于应用的 Azure 资源组。 | 0.1.0+ |
appName |
true | 应用的名称。 | 0.1.0+ |
region |
false | 托管应用的区域。 默认值为 centralus 。 有关有效区域,请参阅支持的区域。 |
0.1.0+ |
pricingTier |
false | 应用的定价层。 对于生产工作负荷,默认值为 P1v2。 建议的 Java 开发和测试最小值是 B2 。 有关详细信息,请参阅 应用服务定价 |
0.1.0+ |
runtime |
false | 运行时环境配置。 有关详细信息,请参阅 配置详细信息。 | 0.1.0+ |
deployment |
false | 部署配置。 有关详细信息,请参阅 配置详细信息。 | 0.1.0+ |
有关配置的完整列表,请参阅插件参考文档。 所有 Azure Maven 插件共享一组常见的配置。 有关这些配置,请参阅 常见配置。 有关特定于 Azure 应用服务的配置,请参阅 Azure 应用:配置详细信息。
请务必将 appName
和 resourceGroup
值保存到以后使用。
准备应用进行部署
将应用程序部署到应用服务时,重定向 URL 将更改为已部署的应用实例的重定向 URL。 使用以下步骤更改属性文件中的这些设置:
导航到应用的 authentication.properties 文件,并将
app.homePage
的值更改为已部署应用的域名,如以下示例所示。 例如,如果在上一步中选择example-domain
作为应用名称,那么现在必须使用https://example-domain.azurewebsites.net
作为app.homePage
值。 请确保已将协议从http
更改为https
。# 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
更新 Microsoft Entra ID 应用注册
由于重定向 URI 会更改为在 Azure 应用程序服务上部署的应用,因此还需要更改 Microsoft Entra ID 应用注册中的重定向 URI。 使用以下步骤进行此更改:
导航到面向开发人员的 Microsoft 标识平台应用注册页。
使用搜索框搜索应用注册,例如
java-servlet-webapp-authentication
。通过选择应用名称打开应用注册。
从菜单中选择“身份验证”。
在“Web - 重定向 URI”部分中,选择“添加 URI”。
填写应用的 URI,追加
/auth/redirect
,例如https://<your-app-name>.azurewebsites.net/auth/redirect
。选择 保存。
部署应用
现在可以将应用部署到 Azure 应用服务。 使用以下命令确保登录到 Azure 环境以执行部署:
az login
在 pom.xml 文件中准备好所有配置后,现在可以使用以下命令将 Java 应用部署到 Azure:
mvn package azure-webapp:deploy
部署完成后,应用程序在 http://<your-app-name>.azurewebsites.net/
准备就绪。 使用本地 Web 浏览器打开 URL,此时应会看到 msal4j-servlet-auth
应用程序的起始页。
删除机密值
应用程序的 authentication.properties 文件当前在 aad.secret
参数中保存客户端机密的值。 不建议将此值保存在此文件中。 如果将其提交到 Git 存储库,则也可能面临风险。
作为安全额外步骤,可以将此值存储在 azure Key Vault 中,并使用 Key Vault 引用 使其在应用程序中可用。
使用以下步骤将 aad.secret
的值移动到 Key Vault 并在代码中使用:
使用以下命令创建 Azure Key Vault 实例:
export RESOURCE_GROUP=<your-resource-group-name> export KEY_VAULT=<your-key-vault-name> az keyvault create \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT
使用以下命令将
aad.secret
机密值作为新机密添加到密钥保管库:az keyvault secret set \ --vault-name $KEY_VAULT \ --name "AADSECRET" \ --value "<the-value-of-your-client-secret>"
现在,需要授予应用对密钥保管库的访问权限。 若要执行此任务,请先使用以下命令为应用创建新的标识:
export WEB_APP_NAME=<your-web-app-name> az webapp identity assign \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME
使用以下命令为此标识提供对密钥保管库中的机密的
get
和list
权限:export IDENTITY=$(az webapp identity show \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME \ --query principalId \ --output tsv) az keyvault set-policy \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT \ --secret-permissions get list \ --object-id $IDENTITY
使用以下命令在应用中创建应用程序设置,该设置使用对密钥保管库中的机密的密钥保管库引用。 此设置将机密的值作为环境变量提供给应用。
az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ --name $WEB_APP_NAME \ --settings AADSECRET='@Microsoft.KeyVault(VaultName=$KEY_VAULT;SecretName=AADSECRET)'
使用以下代码从环境变量加载此值。 在 \src\main\java\com\microsoft\azuresamples\msal4j\helpers\Config.java 文件中,第 41 行将当前语句更改为以下行:
public static final String SECRET = System.getenv("AADSECRET");
现在可以从 authentication.properties 文件中删除
aad.secret
密钥和值。使用以下命令重新生成代码:
mvn clean package
使用以下命令重新部署应用程序:
mvn package azure-webapp:deploy
部署现已完成。
详细信息
- 适用于 Java 的
Microsoft 身份验证库 (MSAL) - Microsoft 标识平台
- 快速入门:将应用程序注册到Microsoft标识平台
- 了解 Microsoft Entra ID 应用程序同意体验
- 了解用户和管理员同意
- MSAL 代码示例