將 Java Tomcat 應用程式部署至 Azure App Service
本文說明如何將具備 Microsoft Entra 帳戶登入功能的 Tomcat 應用程式部署至 Azure App Service。
本文假定您僅使用 在本機執行 標籤完成下列其中一篇文章,現在希望部署至 Azure。 這些指示與這些文章中 [部署至 Azure] 標籤上的指示相同:
- 使用 Microsoft Entra ID 啟用 Java Tomcat 應用程式的登入
- 使用 MSAL4J 搭配 Azure Active Directory B2C 啟用 Java Tomcat 應用程式的登入
- 啟用 Java Tomcat 應用程式以登入使用者及存取 Microsoft Graph
- 使用角色和角色宣告來保護 Java Tomcat 應用程式
- 使用群組和群組宣告來保護 Java Tomcat 應用程式
先決條件
適用於 Azure App Service 應用程式的 Maven 外掛程式
如果 Maven 不是您慣用的開發工具,請參閱下列使用其他工具的類似教學課程:
設定 Maven 外掛程式
當您部署至 Azure App Service 時,部署會自動使用 Azure CLI 中的 Azure 認證。 如果未在本機安裝 Azure CLI,Maven 外掛程式會向 OAuth 或裝置登入進行驗證。 如需詳細資訊,請參閱使用 Maven 外掛程式
使用下列步驟來設定外掛程式:
執行下列命令來設定部署。 此命令可協助您設定 Azure App Service 作業系統、Java 版本和 Tomcat 版本。
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
針對 建立新的運行配置,然後按 Y,再按 Enter。
針對 定義 OS的值;按 1 選擇 Windows,或按 2 選擇 Linux,然後按 Enter。
針對 定義 javaVersion的值,請按 2 來選擇 Java 11,然後按 Enter。
針對 定義 webContainer的值,請按 4 以選擇 Tomcat 9.0,然後按 Enter。
針對 定義價格層級的值,請按 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 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 的組態。 下表列出一些常見的組態:
財產 | 必填 | 描述 |
---|---|---|
subscriptionId |
假 | 訂用帳戶標識碼。 |
resourceGroup |
真 | 應用程式的 Azure 資源群組。 |
appName |
真 | 應用程式的名稱。 |
region |
假 | 裝載您應用程式的區域。 預設值為 centralus 。 如需有效的區域,請參閱 支援的區域。 |
pricingTier |
假 | 應用程式的定價層。 生產工作負載的預設值為 P1v2 。 Java 開發和測試的建議最小值是 B2 。 如需詳細資訊,請參閱 App Service 定價。 |
runtime |
假 | 執行時環境設定。 如需詳細資訊,請參閱 組態詳細資料。 |
deployment |
假 | 部署組態。 如需詳細資訊,請參閱 組態詳細資料。 |
如需組態的完整清單,請參閱外掛程式參考檔。 所有 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 應用程式註冊
由於將已部署的應用程式改為 Azure App Service 時需要更新重新導向 URI,因此您也需要在 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
您的部署現已完成。
詳細資訊
- 適用於 Java 的
Microsoft 驗證連結庫 (MSAL) - Microsoft身分識別平臺 (適用於開發人員的Microsoft項目識別碼)
- 快速入門:向Microsoft身分識別平臺註冊應用程式
- 瞭解Microsoft Entra ID 應用程式同意體驗
- 瞭解使用者和管理員同意
- MSAL 程式代碼範例