將 Java Tomcat 應用程式部署至 Azure App 服務
本文說明如何將具有 Microsoft Entra 帳戶登入的 Tomcat 應用程式部署至 Azure App 服務。
本文假設您只使用 [ 在本機 執行] 索引標籤完成下列其中一篇文章,而您現在想要部署至 Azure。 這些指示與下列文章中的 [部署至 Azure] 索引標籤中的指示相同:
- 使用 Microsoft Entra ID 啟用 Java Tomcat 應用程式的登入
- 使用 MSAL4J 搭配 Azure Active Directory B2C 啟用 Java Tomcat 應用程式的登入
- 啟用 Java Tomcat 應用程式來登入使用者並存取 Microsoft Graph
- 使用角色和角色宣告保護 Java Tomcat 應用程式
- 使用群組和群組宣告保護 Java Tomcat 應用程式
必要條件
適用於 Azure App 服務 應用程式的 Maven 外掛程式
如果 Maven 不是您慣用的開發工具,請參閱下列使用其他工具的類似教學課程:
設定 Maven 外掛程式
當您部署至 Azure App 服務 時,部署會自動使用 Azure CLI 中的 Azure 認證。 如果未在本機安裝 Azure CLI,Maven 外掛程式會向 OAuth 或裝置登入進行驗證。 如需詳細資訊,請參閱 使用 Maven 外掛程式進行驗證。
使用下列步驟來設定外掛程式:
執行下列命令來設定部署。 此命令可協助您設定 Azure App 服務 操作系統、Java 版本和 Tomcat 版本。
mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
針對 [ 建立新的執行組態],按 Y,然後按 Enter。
針對 [定義 OS 的值],針對 Windows 按 1,或針對 Linux 按 2,然後按 Enter。
針對 [ 定義 javaVersion 的值],按 2 for Java 11,然後按 Enter。
針對 [ 定義 webContainer 的值],按 4 for Tomcat 9.0,然後按 Enter。
針對 [ 定義 pricingTier 的值],按 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 服務 中執行。
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 |
false | 訂用帳戶標識碼。 |
resourceGroup |
true | 應用程式的 Azure 資源群組。 |
appName |
true | 應用程式的名稱。 |
region |
false | 裝載您應用程式的區域。 預設值是 centralus 。 如需有效的區域,請參閱 支援的區域。 |
pricingTier |
false | 應用程式的定價層。 預設值是 P1v2 生產工作負載。 Java 開發和測試的建議最小值為 B2 。 如需詳細資訊,請參閱 App Service定價。 |
runtime |
false | 運行時間環境組態。 如需詳細資訊,請參閱 設定詳細數據。 |
deployment |
false | 部署組態。 如需詳細資訊,請參閱 設定詳細數據。 |
如需設定的完整清單,請參閱外掛程式參考文件。 所有 Azure Maven 外掛程式都會共用一組常見的組態。 如需這些組態,請參閱 一般組態。 如需 Azure App 服務 特定的設定,請參閱 Azure 應用程式:組態詳細數據。
請務必保留 appName
和 resourceGroup
值,以供日後使用。
準備應用程式以進行部署
當您將應用程式部署至 App Service 時,重新導向 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 App 服務,因此您也需要變更 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 服務。 使用下列命令,確定您已登入 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 金鑰保存庫 中,並使用 金鑰保存庫 參考,在應用程式中提供此值。
使用下列步驟將 的值aad.secret
移至 金鑰保存庫,並在您的程式代碼中使用:
使用下列命令來建立 Azure 金鑰保存庫 實例:
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
您的部署現已完成。