共用方式為


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

本文說明如何將具有 Microsoft Entra 帳戶登入的 Tomcat 應用程式部署至 Azure App 服務。

本文假設您只使用 [ 在本機 執行] 索引標籤完成下列其中一篇文章,而您現在想要部署至 Azure。 這些指示與下列文章中的 [部署至 Azure] 索引標籤中的指示相同:

必要條件

設定 Maven 外掛程式

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

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

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

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
    
  2. 針對 [ 建立新的執行組態],按 Y,然後按 Enter

  3. 針對 [定義 OS 的值],針對 Windows 按 1,或針對 Linux 按 2,然後按 Enter

  4. 針對 [ 定義 javaVersion 的值],按 2 for Java 11,然後按 Enter

  5. 針對 [ 定義 webContainer 的值],按 4 for Tomcat 9.0,然後按 Enter

  6. 針對 [ 定義 pricingTier 的值],按 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 服務 中執行。

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 應用程式:組態詳細數據

請務必保留 appNameresourceGroup 值,以供日後使用。

準備應用程式以進行部署

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

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

    mvn clean package
    

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

由於將 URI 重新導向至已部署的應用程式變更為 Azure App 服務,因此您也需要變更 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 服務。 使用下列命令,確定您已登入 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移至 金鑰保存庫,並在您的程式代碼中使用:

  1. 使用下列命令來建立 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
    
  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. 使用下列命令,為 金鑰保存庫 中的秘密提供此身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
    
  5. 使用下列命令在應用程式中建立應用程式設定,以使用金鑰保存庫中秘密的金鑰保存庫參考。 此設定可讓應用程式使用秘密的值做為環境變數。

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

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

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

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

    mvn package azure-webapp:deploy
    

您的部署現已完成。

其他相關資訊