共用方式為


將 Java Tomcat 應用程式部署至 Azure App Service

本文說明如何將具備 Microsoft Entra 帳戶登入功能的 Tomcat 應用程式部署至 Azure App Service。

本文假定您僅使用 在本機執行 標籤完成下列其中一篇文章,現在希望部署至 Azure。 這些指示與這些文章中 [部署至 Azure] 標籤上的指示相同:

先決條件

設定 Maven 外掛程式

當您部署至 Azure App Service 時,部署會自動使用 Azure CLI 中的 Azure 認證。 如果未在本機安裝 Azure CLI,Maven 外掛程式會向 OAuth 或裝置登入進行驗證。 如需詳細資訊,請參閱使用 Maven 外掛程式驗證。

使用下列步驟來設定外掛程式:

  1. 執行下列命令來設定部署。 此命令可協助您設定 Azure App Service 作業系統、Java 版本和 Tomcat 版本。

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
    
  2. 針對 建立新的運行配置,然後按 Y,再按 Enter

  3. 針對 定義 OS的值;按 1 選擇 Windows,或按 2 選擇 Linux,然後按 Enter

  4. 針對 定義 javaVersion的值,請按 2 來選擇 Java 11,然後按 Enter

  5. 針對 定義 webContainer的值,請按 4 以選擇 Tomcat 9.0,然後按 Enter

  6. 針對 定義價格層級的值,請按 Enter 以選取預設的 P1v2 層。

  7. 針對 確認,請按 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 應用程式:設定詳細資料

請務必將 appNameresourceGroup 值儲存在一起,以供日後使用。

準備應用程式以進行部署

當您將應用程式部署至 App Service 時,重新導向 URL 會變更為已部署應用程式實例的重新導向 URL。 使用下列步驟來變更屬性檔案中的這些設定:

  1. 流覽至應用程式的 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
    
  2. 儲存此檔案之後,請使用下列命令重建您的應用程式:

    mvn clean package
    

更新您的 Microsoft Entra ID 應用程式註冊

由於將已部署的應用程式改為 Azure App Service 時需要更新重新導向 URI,因此您也需要在 Microsoft Entra ID 應用程式註冊中更改重新導向 URI。 使用下列步驟進行這項變更:

  1. 導覽至開發人員的 Microsoft 身分識別平臺 應用程式註冊 頁面。

  2. 使用搜尋方塊來搜尋您的應用程式註冊 ,例如,java-servlet-webapp-authentication

  3. 選取應用程式名稱以開啟您的應用程式註冊。

  4. 從選單中選取 [認證]。

  5. 在 [Web - 重新導向 URI] 區段中,選取 [新增 URI]。

  6. 填寫應用程式的 URI,並附加 /auth/redirect ,例如,https://<your-app-name>.azurewebsites.net/auth/redirect

  7. 選取 儲存

部署應用程式

您現在已準備好將應用程式部署至 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,並在您的程式代碼中使用:

  1. 使用下列命令來建立 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
    
  2. 使用下列命令,將 aad.secret 的秘密值新增至金鑰保存庫作為新的秘密:

    az keyvault secret set \
        --vault-name $KEY_VAULT \
        --name "AADSECRET" \
        --value "<the-value-of-your-client-secret>"
    
  3. 您現在需要為應用程式提供金鑰保存庫的存取權。 若要執行這項工作,請先使用下列命令為您的應用程式建立新的身分識別:

    export WEB_APP_NAME=<your-web-app-name>
    az webapp identity assign \
        --resource-group $RESOURCE_GROUP \
        --name $WEB_APP_NAME
    
  4. 使用以下命令,將密鑰保存庫中的秘密存取權限賦予此身分識別 getlist

    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
    
  5. 使用下列命令在您的應用程式中建立一個應用程式設定,該設定使用金鑰保存庫中的秘密的引用。 此設定可讓應用程式使用秘密的值做為環境變數。

    az webapp config appsettings set \
        --resource-group $RESOURCE_GROUP \
        --name $WEB_APP_NAME \
        --settings AADSECRET='@Microsoft.KeyVault(VaultName=$KEY_VAULT;SecretName=AADSECRET)'
    
  6. 使用下列程式代碼從環境變數載入此值。 在第 41 行的 \src\main\java\com\microsoft\azuresamples\msal4j\helpers\Config.java 檔案中,將目前的語句變更為下列這一行:

    public static final String SECRET = System.getenv("AADSECRET");
    
  7. 您現在可以從 authentication.properties 檔案中刪除 aad.secret 密鑰和值。

  8. 使用下列命令重建程式碼:

    mvn clean package
    
  9. 使用下列命令重新部署應用程式:

    mvn package azure-webapp:deploy
    

您的部署現已完成。

詳細資訊