練習 - 在 Azure APIM 中建立訂用帳戶
您可以使用 Azure 入口網站中的 Azure API 管理使用者介面,來建立訂用帳戶並取得用於用戶端應用程式的訂用帳戶金鑰。
假設您的氣象公司已決定向訂閱並支付此服務費用的用戶端提供其氣象資料。 關鍵要求是僅允許存取配置金鑰的用戶端。 作為首席開發人員,您需要建立一個 API 閘道。 您將使用閘道來發佈公開 OpenAPI 端點的 RESTful 氣象 API。 接下來,您可以保護端點並配置用戶端金鑰。
在本單元中,您將會:
- 發佈 RESTful 氣象 API
- 部署 APIM 網路閘道
- 透過網路閘道端點公開氣象 API
- 根據訂用帳戶金鑰限制存取
重要
您必須有自己的 Azure 訂用帳戶才能執行本練習,且可能會產生費用。 如果您還沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
部署氣象 Web API
您已開發一個可傳回天氣資訊的 .NET Core 應用程式。 此應用程式包含 Swashbuckle 以產生 OpenAPI 文件。
為了節省時間,讓我們從執行指令碼,在 Azure 中裝載 API 開始。 該指令碼會執行下列步驟:
- 在免費層中建立 Azure App Service 方案
- 在 Azure App Service 內建立 Web API,專為來自本地存放庫的 Git 部署所設定
- 針對我們的應用程式設定帳戶層級部署認證
- 在本機設定 Git
- 將 Web API 部署到 App Service 執行個體
登入 Azure 入口網站。
在 Azure 工作列中,選取 Cloud Shell 圖示以開啟 Azure Cloud Shell。
在 Azure Cloud Shell 中執行下列 git clone 命令來複製存放庫,其中包含應用程式來源,以及來自 GitHub 的安裝指令碼。
git clone https://github.com/MicrosoftDocs/mslearn-control-authentication-with-apim.git
執行下列 cd 命令,移至本機的存放庫資料夾目錄。
cd mslearn-control-authentication-with-apim
一如其名所示,
setup.sh
正是我們建立測試 API 所要執行的指令碼。 它將會產生公用 Web 應用程式來公開 OpenAPI 介面。bash setup.sh
指令碼有七個部分,大約需要一分鐘的執行時間。 請注意,在部署期間,執行應用程式所需的所有相依性都會自動安裝於遠端 App Service 上。
當指令碼完成時,其會輸出兩個 URLS,即 Swagger URL 和範例 URL。 您可以使用這些 URL 來測試應用程式部署。
若要測試應用程式是否已正確部署,請從 Azure Cloud Shell 輸出中複製第一個 URL,並將其貼入您慣用的瀏覽器中。 瀏覽器應該會顯示應用程式的 Swagger UI,並宣告下列 RESTful 端點:
- api/weather/{latitude}/{longitude},這會鑒於指定的緯度和經度 (雙精度浮點數值) 傳回當天的氣象資料。
- api/weather/{date}/{latitude}/{longitude},這會傳回指定日期 (日期值) 之指定緯度和經度 (雙精度浮點數值) 的氣象資料。
最後,從 Azure Cloud Shell 輸出中複製並儲存範例 URL。 此位置是 Swagger JSON URL。 您稍後在練習中會需要用到。
部署 API 閘道
此練習中的下一個步驟是在 Azure 入口網站中建立 API 閘道。 在下個練習中,您將使用此閘道來發佈 API。
登入 Azure 入口網站。
在 Azure 資源功能表上或從 [首頁],於 [Azure 服務] 下選取 [建立資源]。 [建立資源] 窗格隨即會顯示。
在資源功能表中,選取 [整合],然後在結果中選取 [API 管理]。 [安裝 API 管理閘道] 窗格隨即出現。
在 [基本] 索引標籤上,為每個設定輸入下列值。
設定 值 專案詳細資料 訂用帳戶 選取您的訂用帳戶。 資源群組 選取新的或現有的資源群組。 資源群組是保留 Azure 解決方案相關資源的邏輯容器。 [執行個體詳細資料] 區域 選取可用的區域。 資源名稱 輸入 apim-WeatherData<random number>
;之所以使用隨機數字是為了確保此名稱為全域唯一。 記下此資源名稱;其將會是您稍後在本練習中所需的 API 閘道名稱。工作區名稱 輸入 Weather-Company
。管理員電子郵件 用來接收所有系統通知的電子郵件地址。 定價層 定價層 從下拉式清單中,選取 Consumption
。選取 [檢閱 + 建立],並在驗證通過後選取 [建立]。
注意
使用量層提供用於測試的快速部署,並具有使用付費價格模式。 整體 API 管理體驗非常類似於其他價格層。
您可以檢視部署的進度,以及正在建立的資源。
匯入 API
部署完成後,請使用下列程序將天氣 API 匯入至 API 管理閘道。
選取 [前往資源] 。 針對您的資源,APIM 服務的 [概觀] 窗格隨即出現。
在左側功能表窗格的 [API] 下方,選取 [API]。 APIM 服務的 [API] 窗格隨即出現,可在其中選取範本來建立/顯示 API。
在 [從定義建立] 底下,選取 [OpenAPI]。 [從 OpenAPI 規格建立] 對話方塊隨即出現。
在 [OpenAPI 規格] 欄位中,貼上您稍早在練習中儲存的 Swagger JSON URL。 當按 Enter 鍵或選取對話方塊的不同區域時,將會為您填入其他欄位。 此資料是從 Swagger 建立的 OpenAPI 規格匯入的。
接受所有其他設定的預設值,然後選取 [建立]。
天氣資料 API 的 [設計] 索引標籤會顯示所有作業,其中包含兩個 GET 作業。
新增訂用帳戶金鑰,以存取氣象 API
最後一個步驟是為天氣資料 API 新增訂用帳戶金鑰。
在左側功能表窗格的 [API] 下方,選取 [訂用帳戶]。 API 管理服務的 [訂用帳戶] 窗格隨即出現。
在頂端功能表列中,選取 [新增訂閱]。 [新增訂用帳戶] 窗格隨即出現。
針對每個設定輸入下列值。
設定 值 名稱 weather-data-subscription
顯示名稱 Weather Data Subscription
允許追蹤 沒有核取記號 範圍 從下拉式清單中,選取 [API]。 API 從下拉式清單中,選取 [天氣資料]。 選取 建立。 [訂用帳戶] 窗格會列出兩個訂用帳戶,即內建所有存取訂用帳戶和天氣資料訂用帳戶。
在天氣資料訂用帳戶資料列的結尾,選取省略符號,然後在捷徑功能表中選取 [顯示/隱藏金鑰]。 隨即顯示主要和次要金鑰值。
將 [天氣資料訂用帳戶] 的主要金鑰複製到剪貼簿,並將其儲存在類似記事本的內容中。 您在下一個步驟將會需要此金鑰。
測試訂用帳戶金鑰
會使用金鑰來保護 API。 現在,我們將在沒有和具有金鑰的情況下測試 API,以示範安全存取。
提出要求而不傳遞訂用帳戶金鑰。 在 Azure Cloud Shell 中執行下列 cURL 命令。 將 [閘道名稱] 預留位置取代為您在前一個工作中所建立 API 閘道 (apim-WeatherDataNNNN) 的資源名稱。
curl -X GET https://[Name Of Gateway].azure-api.net/api/Weather/53/-1
此命令沒有訂用帳戶金鑰,而且應會傳回 401 拒絕存取錯誤,類似下面的錯誤。
{ "statusCode": 401, "message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }
現在執行下列命令。 將 [閘道名稱] 預留位置取代為 API 閘道 (apim-WeatherDataNNNN) 的資源名稱。 另外,將 [主要金鑰] 預留位置取代為您從顯示/隱藏步驟中複製的主要金鑰。
curl -X GET https://[Name Of Gateway].azure-api.net/api/Weather/53/-1 \ -H 'Ocp-Apim-Subscription-Key: [Primary Key]'
如果您已包含右引號,此命令應該會產生類似下列程式碼的成功回應。
{"mainOutlook":{"temperature":32,"humidity":34},"wind":{"speed":11,"direction":239.0},"date":"2019-05-16T00:00:00+00:00","latitude":53.0,"longitude":-1.0}