Share via


教學課程:在 Azure Spring Apps 上使用 Spring Cloud Gateway 驗證用戶端

注意

前 50 個 vCPU 小時和 100 GB 的記憶體是每月可用。 如需詳細資訊,請參閱 Azure Spring Apps 在 Azure 部落格上的應用程式上執行更多成本、成本降低。

注意

Azure Spring Apps 是 Azure Spring Cloud 服務的新名稱。 雖然服務有新的名稱,但在我們努力更新資產,例如螢幕快照、影片和圖表時,您會在某些地方看到舊名稱一段時間。

本文適用於: ✔️標準取用和專用 (預覽)

本快速入門說明如何保護用戶端應用程式與裝載於 Azure Spring Apps 上的微服務應用程式之間的通訊,並受到 Spring Cloud Gateway 應用程式的防護。 用戶端應用程式會驗證為安全性主體,以使用以 Spring Cloud Gateway 建置的應用程式,起始與 Azure Spring Apps 上部署之微服務的連絡。 此方法會採用 Spring Cloud Gateway 的令牌轉送和 Spring Security 的資源伺服器功能,以執行 OAuth 2.0 用戶端認證流程來實現 驗證和授權程式

下列清單顯示範例項目的組成:

  • 書籍 SPA:裝載在本機的這個單頁應用程式 (SPA),會與 Books 微服務互動,以新增或搜尋書籍。
  • 書籍微服務:
    • 裝載在 Azure Spring Apps 中的 Spring Cloud Gateway 應用程式。 此應用程式會作為書籍 RESTful API 的閘道運作。
    • 裝載於 Azure Spring Apps 中的 Spring Boot RESTful API 應用程式。 此應用程式會將書籍資訊儲存在 H2 資料庫中。 Books 服務會公開兩個 REST 端點來撰寫和讀取書籍。

1.Prerequisites

2. 準備 Spring 專案

使用下列步驟在本機複製並執行應用程式:

  1. 使用下列命令從 GitHub 複製範例專案:

    git clone https://github.com/Azure-Samples/azure-spring-apps-sso-client-credential.git -b consumption-plan
    
  2. 使用下列命令來建置 Books 後端服務:

    cd azure-spring-apps-sso-client-credential
    ./mvnw clean package
    
  3. 輸入 SPA 項目目錄,並使用下列命令來安裝相依性:

    npm install @azure/msal-node
    

3.準備雲端環境

執行此範例所需的主要資源是 Azure Spring Apps 實例和 適用於 PostgreSQL 的 Azure 資料庫 實例。 本節提供建立這些資源的步驟。

3.1. 登入 Azure 入口網站

開啟網頁瀏覽器並移至 Azure 入口網站。 輸入您的認證以登入 Azure 入口網站。 默認檢視是您的服務儀錶板。

3.2. 建立 Azure Spring Apps 執行個體

使用下列步驟來建立服務實例:

  1. Azure 入口網站 的角落選取 [建立資源]。

  2. 選取 [計算>Azure Spring Apps]。

    Screenshot of the Azure portal that shows the Create a resource page with Azure Spring Apps highlighted.

  3. 填寫 [基本] 窗體,其中包含下列資訊:

    設定 建議的值 描述
    訂用帳戶 您的訂用帳戶名稱 您想要用於伺服器的 Azure 訂用帳戶。 如果您有多個訂用帳戶,請選擇您想要針對資源計費的訂用帳戶。
    資源群組 myresourcegroup 新的資源組名或您訂用帳戶的現有資源組名。
    名稱 myasa 識別 Azure Spring Apps 服務的唯一名稱。 名稱長度必須介於 4 到 32 個字元之間,而且只能包含小寫字母、數位和連字元。 服務名稱的第一個字元必須是字母,最後一個字元必須是字母或數位。
    計畫 標準耗用量和專用 (預覽) 定價方案會決定與您的實例相關聯的資源和成本。
    區域 最接近用戶的區域 最接近使用者的位置。
    Container Apps 環境 myacaenv 選取要與其他服務和資源分享相同虛擬網路的 Container Apps 環境實例。

    Screenshot of the Azure portal that shows the Create Azure Spring Apps consumption plan page.

    使用下表作為建立 Container Apps 環境的指南:

    設定 建議的值 描述
    環境名稱 myacaenv 識別 Azure Container Apps 環境服務的唯一名稱。
    計畫 耗用 定價方案會決定與您的實例相關聯的資源和成本。
    區域備援 停用 是否要在 Azure 可用性區域中建立您的 Container Apps 環境服務。

    Screenshot of the Azure portal that shows the Create Azure Container Apps page.

    重要

    取用工作負載配置檔具有隨用隨付計費模型,不需要開始成本。 系統會根據布建的資源,向您收取專用工作負載配置文件的費用。 如需詳細資訊,請參閱 Azure Container Apps 中取用 + 專用方案結構環境中的工作負載配置檔(預覽版)Azure Spring Apps 定價

  4. 選取 [ 檢閱] 和 [建立] 以檢閱您的選取專案。 選取 [建立] 以布建 Azure Spring Apps 實例。

  5. 在工具列上,選取 [通知 ] 圖示(鈴鐺),以監視部署程式。 部署完成後,您可以選取 [釘選到儀錶板],這會在 Azure 入口網站 儀錶板上建立此服務的圖格,做為服務的 [概觀] 頁面的快捷方式。 選取 [移至資源 ] 以開啟服務的 [概 ] 頁面。

    Screenshot of the Azure portal that shows the Overview page with the Notifications pane open.

  6. 使用下列命令來啟用 Eureka 伺服器。 請務必將佔位元取代為您在上一個步驟中建立的您自己的值。

    az spring eureka-server enable \
        --resource-group <resource-group-name> \
        --name <Azure-Spring-Apps-instance-name>
    

3.3. 註冊書籍應用程式

本節提供註冊應用程式以在 Microsoft Entra ID 中新增應用程式角色的步驟,此標識碼用於保護 Azure Spring Apps 中的 RESTful API。

  1. 移至 Azure 入口網站 首頁。

  2. 如果您有多個租使用者的存取權,請使用 [目錄 + 訂 用帳戶篩選條件] 來 選取您要在其中註冊應用程式的租使用者。

  3. 搜尋並選取 [Microsoft Entra ID]

  4. 在 [管理] 底下,選取 [應用程式註冊]> [新增註冊]

  5. [名稱 ] 欄位中輸入應用程式的名稱,例如 Books。 您的應用程式使用者可能會看到此名稱,而且您稍後可以加以變更。

  6. 針對 [支持的帳戶類型],選取 [僅限此組織目錄中的帳戶]。

  7. 選取 [暫存器] 以建立應用程式。

  8. 在應用程式 [概觀] 頁面上,尋找 [應用程式] [用戶端] 識別符 值,然後記錄它以供稍後使用。 您需要此項目設定 YAML 組態檔。

  9. 在 [管理] 底下,選取 [公開 API],在頁面開頭尋找 [應用程式標識符 URI],然後選取 [新增]。

  10. 在 [ 編輯應用程式識別碼 URI ] 頁面上,接受建議的應用程式識別碼 URI (api://{client ID}) 或使用有意義的名稱,而不是用戶端識別符,例如 api://books,然後選取 [ 儲存]。

  11. 在 [管理] 底下,選取 [應用程式角色>建立應用程式角色],然後輸入下列資訊:

    • 針對 [ 顯示名稱],輸入 [ 寫入]。
    • 針對 [ 允許的成員類型],選取 [ 應用程式]。
    • 針對 [ ],輸入 Books.Write
    • 針對 [ 描述],輸入 [新增書籍]。
  12. 重複上一個步驟以新增另一個應用程式角色: Books.Read

    Screenshot of the Books app registration page that shows the App roles.

3.4. 註冊 SPA 應用程式

Books RESTful API 應用程式會作為資源伺服器,受到 Microsoft Entra 識別碼的保護。 取得存取令牌之前,您必須在 Microsoft Entra ID 中註冊另一個應用程式,並將許可權授與名為 SPA的用戶端應用程式。

  1. 回到 Microsoft Entra 識別碼中的租使用者。

  2. 在 [管理] 底下,選取 [應用程式註冊]> [新增註冊]

  3. [名稱 ] 欄位中輸入應用程式的名稱,例如 SPA

  4. 針對支援的帳戶類型,請僅使用此組織目錄中的默認帳戶。

  5. 選取 [暫存器] 以建立應用程式。

  6. 在應用程式 [概觀] 頁面上,尋找 [應用程式] [用戶端] 識別符 值,然後記錄它以供稍後使用。 您需要它才能取得存取令牌。

  7. 選取 [API 許可權>][新增組織使用的許可權>API]。 Books選取您稍早註冊的應用程式,選取 Books.ReadBooks.Write 許可權,然後選取 [新增許可權]。

  8. 針對您新增的許可權,選取 [授與管理員同意] 以 <授與您的租用戶名稱> 許可權。

    Screenshot of the SPA API permissions page that shows the API permissions of a web application.

  9. 流覽至 [ 憑證和秘密 ],然後選取 [ 新增客戶端密碼]。

  10. 在 [ 新增客戶端密碼 ] 頁面上,輸入秘密的描述、選取到期日,然後選取 [ 新增]。

  11. 尋找秘密的值,然後記錄它以供稍後使用。 您需要它才能取得存取令牌。

3.5. 更新 Books Service 應用程式的設定

找出 應用程式的 books-service/src/main/resources/application.yml 檔案 books-service 。 更新 區段中的 spring.cloud.azure.active-directory 組態,以符合下列範例。 請務必將佔位元取代為您先前建立的值。

spring:
  cloud:
    azure:
      active-directory:
        credential:
          client-id: <your-application-ID-of-Books>
        app-id-uri: <your-application-ID-URI-of-Books>

使用下列命令重建範例專案:

./mvnw clean package

4.將應用程式部署至 Azure Spring Apps

下列步驟說明如何將應用程式部署至 Azure。

4.1. 將微服務應用程式部署至 Azure Spring Apps

使用下列步驟,使用適用於 Azure Spring Apps 的 Maven 外掛程式,將應用程式部署至 Azure Spring Apps

  1. 瀏覽至範例項目目錄,然後使用下列命令在 Azure Spring Apps 中設定應用程式:

    ./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.18.0:config
    

    下列清單描述命令互動:

    • 選取要設定的子模組(輸入編號以逗號分隔,例如:[1-2,4,6],ENTER 以選取 ALL):按 Enter 鍵以選取全部。
    • OAuth2 登入:根據 OAuth2 通訊協定授權登入 Azure。
    • 選取訂用帳戶:選取您所建立之 Azure Spring Apps 實例的訂用帳戶清單編號,預設為清單中的第一個訂用帳戶。 如果您使用預設號碼,請直接按 Enter
    • 選取 [Azure Spring Apps 以進行部署:選取您所建立之 Azure Spring Apps 實例的清單編號。 如果您使用預設號碼,請直接按 Enter
    • 選取要公開公用存取的應用程式:(輸入編號以逗號分隔,例如:[1-2,4,6],ENTER 以選取 [NONE]:輸入 1 for gateway-service
    • 確認儲存上述所有組態 (Y/n):輸入 y。 如果您輸入 n,則組態不會儲存在 POM 檔案中。
  2. 使用下列命令來部署應用程式:

    ./mvnw azure-spring-apps:deploy
    

    下列清單描述命令互動:

    • OAuth2 登入:您必須根據 OAuth2 通訊協定授權登入 Azure。

    執行命令之後,您可以看到下列記錄訊息,指出部署成功。

    [INFO] Getting public url of app(gateway-service)...
    [INFO] Application url: https://gateway-service.xxxxxxxxxxxxxx-xxxxxxxx.eastasia.azurecontainerapps.io
    
    ...
    
    [INFO] Artifact(books-service-0.0.1-SNAPSHOT.jar) is uploaded and deployment(default) is successfully updated.
    
    ...
    

    輸出 應用程式 URL 是存取 ToDo RESTful API 應用程式的基底端點。

4.2. 在本機執行 SPA 應用程式

更新應用程式腳本檔案 spa/server.js中的SPA組態,以符合下列範例。 請務必將佔位元取代為您在上一個步驟中建立的您自己的值。

const SpringCloudGatewayURL = "<URL exposed by app gateway-service>"

const msalConfig = {
    auth: {
        clientId: "< SPA App Registration ClientId>",
        authority: "https://login.microsoftonline.com/< TenantId >/",
        clientSecret: "<SPA App Registration ClientSecret>",
    },
};

const tokenRequest = {
    scopes: ["<Application ID URI of Books>/.default"]
};

在 SPA 項目目錄中,使用下列命令在本機執行:

node server.js

注意

SPA 應用程式是靜態 Web 應用程式,可部署到任何 Web 伺服器。

5.驗證應用程式

您可以透過應用程式存取與 Books RESTful API 通訊的 gateway-service Books SPA 應用程式。

  1. 在瀏覽器中移至 http://localhost:3000 以存取應用程式。

  2. 輸入 Author 和 Title 的值,然後選取 [新增書籍]。 您會看到類似下列範例的回應:

    Book added successfully: {"id":1,"author":"Jeff Black","title":"Spring In Action"}
    

6.清除資源

您可以刪除 Azure 資源群組,其中包含資源群組中的所有資源。 使用下列步驟來刪除整個資源群組,包括新建立的服務:

  1. 在 Azure 入口網站 中找出您的資源群組。

  2. 選取 [資源群組],然後選取資源群組的名稱, 例如 myresourcegroup

  3. 在您的資源群組頁面上,選取 [ 刪除]。 在文字框中輸入資源群組的名稱,以確認刪除。

  4. 選取刪除

7. 後續步驟

如需詳細資訊,請參閱下列文章: