將 Java JBoss EAP 應用程式部署至 Azure App Service
本文說明如何將 JBoss EAP 應用程式使用 Microsoft Entra 帳戶登入,部署至 Azure App Service。
本文假設您只使用 在本機 索引卷標上執行下列其中一篇文章,而您現在想要部署至 Azure。 這些指示與下列文章中的[部署至 Azure]標籤中的內容相同:
- 使用 Microsoft Entra ID 啟用 Java JBoss EAP 應用程式的登入功能
- 使用 MSAL4J 搭配 Azure Active Directory B2C 啟用 Java JBoss EAP 應用程式的登入
- 啟用 Java JBoss EAP 應用程式讓使用者登入並存取 Microsoft Graph
- 使用角色和角色宣告來保護 Java JBoss EAP 應用程式
- 使用群組和群組宣告來保護 Java JBoss EAP 應用程式
先決條件
適用於 Azure App Service 應用程式的 Maven 外掛程式
如果 Maven 不是您慣用的開發工具,請參閱下列使用其他工具的類似教學課程:
設定 Maven 外掛程式
Azure App Service 的部署程式會自動從 Azure CLI 使用您的 Azure 認證。 如果未在本機安裝 Azure CLI,Maven 外掛程式會向 OAuth 或裝置登入進行驗證。 如需詳細資訊,請參閱 Maven 外掛程式的 驗證。
使用下列步驟來設定外掛程式:
執行顯示在旁的 Maven 命令來配置部署。 此命令可協助您設定 App Service 作業系統、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。
針對 定義定價層級的值,請按 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 App Service 中執行。
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 |
假 | 組態架構的版本。 支援的值為 v1 和 v2 。 |
1.5.2 |
subscriptionId |
假 | 訂用帳戶標識碼。 | 0.1.0+ |
resourceGroup |
真 | 應用程式的 Azure 資源群組。 | 0.1.0+ |
appName |
真 | 應用程式的名稱。 | 0.1.0+ |
region |
假 | 裝載您應用程式的區域。 預設值為 centralus 。 如需有效的區域,請參閱 支援的區域。 |
0.1.0+ |
pricingTier |
假 | 應用程式的定價層。 生產工作負載的預設值是 P1v2。 Java 開發和測試的建議最小值是 B2 。 如需詳細資訊,請參閱 App Service 定價 |
0.1.0+ |
runtime |
假 | 執行階段環境設定。 如需詳細資訊,請參閱 組態詳細資料。 | 0.1.0+ |
deployment |
假 | 部署組態。 如需詳細資訊,請參閱 組態詳細資料。 | 0.1.0+ |
如需組態的完整清單,請參閱外掛程式參考檔。 所有 Azure Maven 外掛程式都會共用一組常見的組態。 如需這些組態,請參閱 一般組態。 如需 Azure App Service 的特定組態,請參閱 Azure 應用程式:設定詳細資料。
請務必將 appName
和 resourceGroup
值儲存在一起,以供日後使用。
準備應用程式以進行部署
當您將應用程式部署至 App Service 時,重新導向 URL 會變更為已部署應用程式實例的重新導向 URL。 使用下列步驟來變更屬性檔案中的這些設定:
流覽至應用程式的 authentication.properties 檔案,並將
app.homePage
的值變更為已部署應用程式的功能變數名稱,如下列範例所示。 例如,如果您在上一個步驟中為應用程式名稱選擇example-domain
,您現在必須針對app.homePage
值使用https://example-domain.azurewebsites.net
。 請確定您也已將通訊協定從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 App Service,因此您也需要在 Microsoft Entra ID 應用程式註冊中變更重定向 URI。 使用下列步驟進行這項變更:
瀏覽至 Microsoft 身分識別平台開發人員 應用程式註冊 頁面。
使用搜尋方塊來搜尋您的應用程式註冊 ,例如,
java-servlet-webapp-authentication
。選取應用程式名稱以開啟您的應用程式註冊。
從功能表中選取 [驗證]。
在 [Web - 重新導向 URI] 區段中,選取 [新增 URI]。
填寫應用程式的 URI,並附加
/auth/redirect
,例如,https://<your-app-name>.azurewebsites.net/auth/redirect
。選取 [儲存]。
部署應用程式
您現在已準備好將應用程式部署至 Azure App Service。 使用下列命令,確定您已登入 Azure 環境以執行部署:
az login
在 pom.xml 檔案中備妥所有組態後,您現在可以使用下列命令將 Java 應用程式部署至 Azure:
mvn package azure-webapp:deploy
部署完成之後,您的應用程式就會在 http://<your-app-name>.azurewebsites.net/
就緒。 使用本機網頁瀏覽器開啟 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)'
使用下列程式代碼從環境變數載入此值。 在第 41 行的 \src\main\java\com\microsoft\azuresamples\msal4j\helpers\Config.java 檔案中,將目前的語句變更為下列這一行:
public static final String SECRET = System.getenv("AADSECRET");
您現在可以從 authentication.properties 檔案中刪除
aad.secret
密鑰和值。使用下列命令重建程式碼:
mvn clean package
使用下列命令重新部署應用程式:
mvn package azure-webapp:deploy
您的部署現已完成。