附註
基本、標準和企業方案於 2025 年 3 月 17 日進入淘汰期。 如需詳細資訊,請參閱 Azure Spring 應用程式淘汰公告。
本文說明如何將受 Microsoft Entra ID 保護的 RESTful API 應用程式部署至 Azure Spring 應用程式。 範例專案是以 Simple Todo Web 應用程式為基礎的簡化版本,它只提供後端服務,並使用 Microsoft Entra ID 來保護 RESTful API。
這些 RESTful API 受到套用角色型存取控制 (RBAC) 的保護。 匿名使用者無法存取任何資料,且不允許控制不同使用者的存取權。 匿名使用者只有下列三種權限:
- 讀取:使用此權限,使用者可以讀取待辦事項資料。
- 寫入:使用此權限,使用者可以新增或更新待辦事項資料。
- 刪除:使用此權限,使用者可以刪除待辦事項資料。
部署成功之後,您可以透過 Swagger UI 檢視及測試 API。
下圖顯示系統的結構:
本文說明建立資源並將其部署至 Azure Spring 應用程式的下列選項:
- Azure 入口 [網站 + Maven 外掛程式] 選項提供更傳統的方法來建立資源,並逐步部署應用程式。 此選項適用於第一次使用 Azure 雲端服務的 Spring 開發人員。
- [Azure CLI] 選項會使用功能強大的命令列工具來管理 Azure 資源。 此選項適用於熟悉 Azure 雲端服務的 Spring 開發人員。
1.先決條件
Azure 訂用帳戶。 如果您沒有 Azure 訂閱,請在開始之前先建立 Azure 免費帳戶。
下列其中一個角色:
- 全域管理員或特殊權限角色管理員,用於為要求任何 API 任何權限的應用程式授與同意。
- 「雲端應用程式管理員」或「應用程式管理員」,用於為要求任何 API 的任何權限的應用程式授與同意,但 Microsoft Graph 應用程式角色 (應用程式權限) 除外。
- 自訂目錄角色,其包含的權限可針對應用程式所需的權限授與應用程式權限。
如需詳細資訊,請參閱對應用程式授與全租用戶的管理員同意。
Git。
JAVA 開發套件 (JDK) 第 17 版。
Microsoft Entra 租用戶。 如需建立租用戶的指示,請參閱快速入門:在 Microsoft Entra ID 中建立新的租用戶。
2.準備 Spring 專案
若要部署 RESTful API 應用程式,第一個步驟是準備 Spring 專案以在本機執行。
使用下列步驟在本機複製並執行應用程式:
使用下列命令從 GitHub 複製範例專案:
git clone https://github.com/Azure-Samples/ASA-Samples-Restful-Application.git如果您想要在本機執行應用程式,請先完成公開 RESTful API 和更新應用程式組態小節中的步驟,然後使用下列命令搭配 Maven 執行應用程式範例:
cd ASA-Samples-Restful-Application ./mvnw spring-boot:run
3.準備雲端環境
執行此範例應用程式所需的主要資源是 Azure Spring 應用程式執行個體和適用於 PostgreSQL 的 Azure 資料庫執行個體。 下列各節說明如何建立這些資源。
3.1. 登入 Azure 入口網站
移至 Azure 入口網站,然後輸入您的認證以登入入口網站。 預設檢視是您的服務儀表板。
3.2. 建立 Azure Spring 應用程式執行個體
使用下列步驟來建立 Azure Spring 應用程式服務執行個體:
在 Azure 入口網站中,選取角落的 [建立資源]。
選取 [計算]>[Azure Spring 應用程式]。
在 [基本資料] 表單中填寫下列資訊:
設定 建議的值 描述 訂用帳戶 您的訂用帳戶名稱。 您要用於伺服器的 Azure 訂用帳戶。 如果您有多個訂用帳戶,請選擇資源計費的訂用帳戶。 資源群組 myresourcegroup 新的資源群組名稱,或您訂用帳戶中現有的資源群組名稱。 名稱 myasa 識別 Azure Spring 應用程式服務的唯一名稱。 名稱長度必須為 4 到 32 個字元,且只能包含小寫字母、數字及連字號。 服務名稱的第一個字元必須是字母,且最後一個字元必須是字母或數字。 規劃 Enterprise 決定與您的執行個體相關聯的資源和成本的定價方案。 區域 最接近使用者的區域。 最靠近您使用者的位置。 區域備援 未選取 在 Azure 可用性區域中建立 Azure Spring 應用程式服務的選項。 所有區域目前不支援此功能。 軟體 IP 方案 隨用隨付 可讓您隨用隨付 Azure Spring 應用程式的定價方案。 字詞 已選取 與 Marketplace 供應項目相關聯的合約核取方塊。 您必須選取此核取方塊。 部署範例專案 未選取 使用內建應用程式範例的選項。 選取 [檢閱並建立] 以檢閱您的選取項目。 然後,選取 [建立] 以佈建 Azure Spring 應用程式執行個體。
在工具列上,選取 [通知] 圖示 (鈴鐺) 以監視部署程序。 完成部署之後,您可以選取 [釘選到儀表板],在 Azure 入口網站儀表板上建立此服務的圖格,以作為服務 [概觀] 頁面的捷徑。
選取 [移至資源] 以移至 [Azure Spring 應用程式概觀] 頁面。
3.3. 準備 PostgreSQL 執行個體
使用下列步驟建立適用於 PostgreSQL 的 Azure 資料庫伺服器:
移至 Azure 入口網站,並選取 [建立資源]。
選取 [資料庫]>[適用於 PostgreSQL 的 Azure 資料庫]。
選取 [彈性伺服器] 部署選項。
在 [基本] 索引標籤中填寫下列資訊:
- 伺服器名稱:my-demo-pgsql
- 區域:美國東部
- PostgreSQL 版本:14
- 工作負載類型:開發
- 啟用高可用性:未選取
- 驗證方法:僅 PostgreSQL 驗證
- 管理員使用者名稱:myadmin
- 密碼和確認密碼:請輸入密碼。
使用下列資訊來設定 [網路] 索引標籤:
- 線上方法:公用存取 (允許的IP 位址)
- 允許來自 Azure 內的任何 Azure 服務可公用存取此伺服器:已選取
選取 [檢閱 + 建立] 以檢閱您的選取項目,然後選取 [建立] 以佈建伺服器。 完成此作業可能需要幾分鐘的時間。
在 Azure 入口網站中移至您的 PostgreSQL 伺服器。 在 [概觀] 頁面上,尋找伺服器名稱值,然後記錄它以供日後使用。 您需要它來設定 Azure Spring 應用程式中應用程式的環境變數。
從導覽功能表中選取 [資料庫] 以建立資料庫,例如 [待辦事項]。
3.4. 將應用程式執行個體連線至 PostgreSQL 執行個體
使用下列步驟來連線服務執行個體:
在 Azure 入口網站中,移至您的 Azure Spring 應用程式執行個體。
從導覽功能表中,開啟 [應用程式],然後選取 [建立應用程式]。
在 [建立應用程式] 頁面上,填入應用程式名稱 simple-todo-api,然後選取 [JAVA 成品] 作為部署類型。
選取 [建立] 以完成應用程式建立,然後選取應用程式以檢視詳細資料。
移至您在 Azure 入口網站中建立的應用程式。 在 [概觀] 頁面上,選取 [指派端點] 以公開應用程式的公用端點。 儲存 URL 以在部署後存取應用程式。
從瀏覽窗格中選取 [服務連接器],然後選取 [建立] 以建立新的服務連線。
在 [基本] 索引標籤中填寫下列資訊:
- 服務類型:適用於 PostgreSQL 的 DB 彈性伺服器
- 線上名稱:系統會填入自動產生的名稱,也可以加以修改。
- 訂用帳戶︰選取您的訂用帳戶。
- PostgreSQL 彈性伺服器:my-demo-pgsql
- PostgreSQL 資料庫:選取您建立的資料庫。
- 用戶端類型:SpringBoot
使用下列資訊設定 [下一步:驗證] 索引標籤:
附註
Microsoft 建議使用最安全的可用驗證流程。 此程序中所述的驗證流程,例如資料庫、快取、傳訊或 AI 服務,在應用程式中需要高度的信任,而且不會在其他流程中帶來風險。 只有在無法實施更安全的選項 (例如,適用於無密碼或無金鑰連線的受控識別) 時,才使用此流程。 針對本機電腦作業,偏好使用無密碼或無金鑰連線的使用者身分識別。
- 選取您想要在計算服務和目標服務之間使用的驗證類型。:選取 [連接字串]。
- 繼續進行...:選取 [資料庫認證]
- 使用者名稱:myadmin
- 密碼:請輸入您的密碼。
選取 [下一步: 網路功能]。 使用預設選項 [設定防火牆規則以啟用目標服務的存取權]。
選取 [下一步:檢閱及建立] 以檢閱您的選取項目,然後選取 [建立] 以建立連線。
3.5. 公開 RESTful API
使用下列步驟,在 Microsoft Entra ID 中公開 RESTful API:
登入 Azure 入口網站。
如果您有多個租用戶的存取權,請使用 [目錄 + 訂用帳戶] 篩選條件 (
) 來選取您要在其中註冊應用程式的租用戶。搜尋並選取 [Microsoft Entra ID]。
在 [管理] 底下,選取 [應用程式註冊]>[新增註冊]。
在 [名稱] 欄位中輸入應用程式的名稱,例如待辦事項。 您的應用程式使用者可能會看到此名稱,您可以稍後再變更。
針對 [支援的帳戶類型],選取 [任何組織目錄中的帳戶 (任何 Microsoft Entra 目錄 - 多租用戶) 和個人 Microsoft 帳戶]。
選取 [註冊] 以建立應用程式。
在應用程式 [概觀] 頁面上,尋找 [應用程式 (用戶端) 識別碼] 值,然後將其記下以供稍後使用。 您需要該值才能設定此專案的 YAML 組態檔。
在 [管理] 底下,選取 [公開 API],在頁面開頭尋找 [應用程式識別碼 URI],然後選取 [新增]。
在 [編輯應用程式識別碼 URI] 頁面上,接受建議的應用程式識別碼 URI (
api://{client ID}) 或使用有意義的名稱,而不是用戶端識別碼,例如api://simple-todo,然後選取 [儲存]。在 [管理] 底下,選取 [公開 API]>[新增範圍],然後輸入下列資訊:
- 針對 [範圍名稱],輸入 ToDo.Read。
- 針對 [有權同意者],選取 [僅限系統管理員]。
- 針對 [管理員同意顯示名稱],輸入「讀取待辦事項資料」。
- 針對 [管理員同意描述],輸入「允許已驗證的使用者讀取待辦事項資料」。
- 針對 [狀態],請保持啟用它。
- 選取 [新增範圍]。
重複上述步驟以新增其他兩個範圍:ToDo.Write 和 ToDo.Delete。
3.6. 更新應用程式組態
使用下列步驟來更新 YAML 檔案,以使用您的 Microsoft Entra 已註冊的應用程式資訊,建立與 RESTful API 應用程式的關聯性:
找出 應用程式的
simple-todo-api檔案。 更新spring.cloud.azure.active-directory區段中的組態,以符合下列範例。 請務必將預留位置取代為您先前建立的值。spring: cloud: azure: active-directory: profile: tenant-id: <tenant> credential: client-id: <your-application-ID-of-ToDo> app-id-uri: <your-application-ID-URI-of-ToDo>附註
在 v1.0 權杖中,設定需要 API 的用戶端識別碼,而在 v2.0 權杖中,您可以在要求中使用用戶端識別碼或應用程式識別碼 URI。 您可以一併設定這兩者,以正確完成對象驗證。
針對
tenant-id允許的值包括:common、organizations、consumers,或租用戶識別碼。 如需這些值的詳細資訊,請參閱錯誤 AADSTS50020 - 租用戶中不存在來自識別提供者的使用者帳戶的使用錯誤的端點 (個人和組織帳戶) 一節。 如需轉換單一租用戶應用程式的資訊,請參閱將單一租用戶應用程式轉換成 Microsoft Entra ID 上的多租用戶。使用下列命令重建範例專案:
./mvnw clean package
4.將應用程式部署至 Azure Spring 應用程式
您現在可以將應用程式部署至 Azure Spring 應用程式。
使用下列步驟以使用適用於 Azure Spring 應用程式的 Maven 外掛程式來部署:
瀏覽至完整的目錄,然後執行下列命令以在 Azure Spring 應用程式中設定應用程式:
./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.19.0:config下列清單描述命令互動:
- OAuth2 登入:您必須根據 OAuth2 通訊協定授權登入 Azure。
- 選取訂用帳戶:選取您所建立 Azure Spring 應用程式執行個體的訂用帳戶清單編號,預設為清單中的第一個訂用帳戶。 如果您使用預設號碼,請直接按 Enter。
- 使用 Azure 中現有的 AzureSpring 應用程式:按 y 以使用現有的 Azure Spring 應用程式執行個體。
- 選取 Azure Spring 應用程式以進行部署:選取您所建立 Azure Spring 應用程式執行個體的數目。 如果您使用預設號碼,請直接按 Enter。
- 在 Azure Spring 應用程式 <您的執行個體名稱> 中使用現有的應用程式:按 y 以使用所建立的應用程式。
- 確認以儲存上述所有組態:按 y。 如果您按 n,則組態不會儲存在 POM 檔案中。
使用下列命令來部署應用程式:
./mvnw azure-spring-apps:deploy下列清單描述命令互動:
- OAuth2 登入:您必須根據 OAuth2 通訊協定授權登入 Azure。
執行命令之後,您可以從下列記錄訊息中看到部署成功:
[INFO] Deployment Status: Running
[INFO] InstanceName:simple-todo-api-default-15-xxxxxxxxx-xxxxx Status:Running Reason:null DiscoverStatus:N/A
[INFO] Getting public url of app(simple-todo-api)...
[INFO] Application url: https://<your-Azure-Spring-Apps-instance-name>-simple-todo-api.azuremicroservices.io
5.驗證應用程式
您現在可以存取 RESTful API,以查看其是否正常運作。
5.1. 要求存取權杖
RESTful API 會作為受到 Microsoft Entra ID 保護的資源伺服器。 取得存取權杖之前,您必須在 Microsoft Entra ID 中註冊另一個應用程式,並將權限授與名為 ToDoWeb 的用戶端應用程式。
註冊用戶端應用程式
使用下列步驟在 Microsoft Entra ID 中註冊應用程式,用來新增 ToDo 應用程式的權限:
登入 Azure 入口網站。
如果您有多個租用戶的存取權,請使用 [目錄 + 訂用帳戶] 篩選條件 (
) 來選取您要在其中註冊應用程式的租用戶。搜尋並選取 [Microsoft Entra ID]。
在 [管理] 底下,選取 [應用程式註冊]>[新增註冊]。
在 [名稱] 欄位中輸入應用程式的名稱,例如 ToDoWeb。 您的應用程式使用者可能會看到此名稱,您可以稍後再變更。
針對支援的帳戶類型,使用預設值 [僅此組織目錄中的帳戶]。
選取 [註冊] 以建立應用程式。
在應用程式 [概觀] 頁面上,尋找 [應用程式 (用戶端) 識別碼] 值,然後將其記下以供稍後使用。 您需要它才能取得存取權杖。
選取 [API 權限]>[新增權限]>[我的 API]。 選取您稍早註冊的
ToDo應用程式,然後選取 ToDo.Read、ToDo.Write 和 ToDo.Delete 權限。 選取 [新增權限]。選取 [授與 <您的租用戶名稱> 的管理員同意] 以針對您新增的權限授與管理員同意。
新增使用者以存取 RESTful API
使用下列步驟,在您的 Microsoft Entra 租用戶中建立成員使用者。 然後,使用者可以透過 RESTful API 管理 ToDo 應用程式的資料。
在 [管理] 底下,選取 [使用者]>[新增使用者]>[建立新的使用者]。
在 [建立新的使用者] 頁面上,輸入下列資訊:
- 使用者主體名稱:輸入使用者的名稱。
- 顯示名稱:輸入使用者的顯示名稱。
- 密碼:複製 [密碼] 方塊中所提供自動產生的密碼。
附註
新使用者必須完成第一次登入驗證並更新其密碼,否則當您取得存取權杖時會收到
AADSTS50055: The password is expired錯誤。當新的使用者登入時,他們會收到 [需要動作] 提示。 他們可以選擇 [稍後詢問] 以略過驗證。
選取 [檢閱 + 建立] 以檢閱您的選項。 選取 [建立] 以建立使用者。
更新 Swagger UI 授權的 OAuth2 組態
使用下列步驟來更新 Swagger UI 授權的 OAuth2 組態。 然後,您可以授權使用者透過 ToDoWeb 應用程式取得存取權杖。
取得存取權杖
使用下列步驟以使用 OAuth 2.0 授權碼流程方法來取得具有 Microsoft Entra ID 的存取權杖,然後存取 ToDo 應用程式的 RESTful API:
開啟應用程式公開的 URL,然後選取 [授權] 以準備 OAuth2 驗證。
在 [可用的授權] 視窗中,在 [client_id]
ToDoWeb欄位中輸入 應用程式的用戶端識別碼、選取 [範圍] 欄位的所有範圍、略過 [client_secret] 欄位,然後選取 [授權] 以重新導向至 Microsoft Entra 登入頁面。
使用上一個使用者完成登入之後,您就會回到 [可用的授權] 視窗。
5.2. 存取 RESTful API
使用下列步驟來存取 Swagger UI 中 ToDo 應用程式的 RESTful API:
選取 API POST /api/simple-todo/lists,然後選取 [試用]。輸入下列要求本文,然後選取 [執行] 以建立待辦事項清單。
{ "name": "My List" }執行完成之後,您會看到下列回應主體:
{ "id": "<ID-of-the-ToDo-list>", "name": "My List", "description": null }選取 API POST /api/simple-todo/lists/{listId}/items,然後選取 [試用]。針對 listId,輸入您先前建立的待辦事項清單識別碼,接著輸入下列要求本文,然後選取 [執行] 以建立待辦事項項目。
{ "name": "My first ToDo item", "listId": "<ID-of-the-ToDo-list>", "state": "todo" }此動作會傳回下列待辦事項項目:
{ "id": "<ID-of-the-ToDo-item>", "listId": "<ID-of-the-ToDo-list>", "name": "My first ToDo item", "description": null, "state": "todo", "dueDate": "2023-07-11T13:59:24.9033069+08:00", "completedDate": null }選取 API GET /api/simple-todo/lists,然後選取 [執行] 以查詢待辦事項清單。 此動作會傳回下列待辦事項清單:
[ { "id": "<ID-of-the-ToDo-list>", "name": "My List", "description": null } ]選取 API GET /api/simple-todo/lists/{listId}/items,然後選取 [試用]。針對 listId,輸入您先前建立的待辦事項清單識別碼,然後選取 [執行] 以查詢待辦事項項目。 此動作會傳回下列待辦事項項目:
[ { "id": "<ID-of-the-ToDo-item>", "listId": "<ID-of-the-ToDo-list>", "name": "My first ToDo item", "description": null, "state": "todo", "dueDate": "2023-07-11T13:59:24.903307+08:00", "completedDate": null } ]選取 API PUT /api/simple-todo/lists/{listId}/items/{itemId},然後選取 [試用]。針對 listId,輸入待辦事項清單識別碼。 針對 itemId,輸入待辦事項項目識別碼,接著輸入下列要求本文,然後選取 [執行] 以更新待辦事項項目。
{ "id": "<ID-of-the-ToDo-item>", "listId": "<ID-of-the-ToDo-list>", "name": "My first ToDo item", "description": "Updated description.", "dueDate": "2023-07-11T13:59:24.903307+08:00", "state": "inprogress" }此動作會傳回下列更新後的待辦事項項目:
{ "id": "<ID-of-the-ToDo-item>", "listId": "<ID-of-the-ToDo-list>", "name": "My first ToDo item", "description": "Updated description.", "state": "inprogress", "dueDate": "2023-07-11T05:59:24.903307Z", "completedDate": null }選取 API DELETE /api/simple-todo/lists/{listId}/items/{itemId},然後選取 [試用]。針對 listId,輸入待辦事項清單識別碼。 針對 itemId,輸入待辦事項項目識別碼,然後選取 [執行] 以刪除待辦事項項目。 您應該會看到伺服器回應碼為
204。
6.清除資源
您可以刪除 Azure 資源群組,其中包括資源群組中的所有資源。
使用下列步驟來刪除整個資源群組 (包括新建立的服務):
在 Azure 入口網站中找出您的資源群組。
在導覽功能表上,選取 [資源群組]。 然後選取您的資源群組名稱 (例如 myresourcegroup)。
在資源群組頁面上,選取 [刪除]。 在文字方塊中輸入您的資源群組名稱 (例如 myresourcegroup),以確認刪除。 然後,選取 [刪除]。
7.後續步驟
如需詳細資訊,請參閱下列文章: