iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Software Development

使用 C# 從零開始玩轉 Web API,從基礎到微服務與雲端部署的全面探索系列 第 21

Day 21: 實際開發 API 權限保護(下) Postman 測試

  • 分享至 

  • xImage
  •  

今天我們將使用昨天修改好的 API,透過 Postman 來進行測試,包括 Token、API Key、角色、IP 白名單等多種保護機制的驗證,看看這些設定的效果如何。那就不多說了,讓我們開始吧!

首先,我們在本機執行 API,並使用 Swagger 打開其 OpenAPI 文件,然後將其匯入到 Postman。這部分在 Day 16 我們已經介紹過如何操作,因此這裡不再詳細說明。


環境變數設定

匯入 OpenAPI 文件後,記得進入 Postman 的 Variables 頁面進行環境變數設定。這次,我們會新增兩個變數:

  1. accessToken
  2. apiKey

apiKey 可以先寫死為 "my-secure-api-key",這個值是固定的。而 accessToken 則需要透過呼叫 Token 的 API 來取得,這個部分稍後我們會介紹如何自動將 Token 帶入環境變數,讓測試更加順暢。
https://ithelp.ithome.com.tw/upload/images/20241005/20132971V9G7KWc1ql.jpg


取得Token

接著,我們找到 GenerateToken 這個 API,並設定好參數 usernamerole。這裡先使用 Employee 作為角色。當然,在真實系統中,角色通常不是由使用者自行輸入,而是經由登入系統判斷的。這裡我們只是簡化流程,方便測試。


API Key 設定

在執行之前,先進入 header 頁面,新增 X-API-Key,並填入我們預設的 "my-secure-api-key"

接著,我們會進入 script 頁面,選擇 Post-Response,並輸入以下程式碼:

    var jsonData = pm.response.json();
    pm.environment.set("accessToken", jsonData.Token);

這段腳本會自動將回應中的 Token 設定為環境變數 accessToken,這樣我們就不需要每次手動複製粘貼 Token。


簡單介紹 Postman Script

Postman 提供了腳本功能來增強 API 測試的自動化。主要分為兩種腳本類型:

  1. Pre-request Script:在 API 發送之前執行,通常用來動態生成請求參數或進行授權邏輯。
  2. Tests (Post-Response Script):在 API 回應之後執行,用來驗證回應數據、提取變數或進行後續操作。

這些腳本非常靈活,可以自動處理回應資料並設定變數,用於後續請求,提升測試效率。


完成上述設定後,我們可以執行 GenerateToken 這支 API 來獲取 Employee 角色的 Token。

測試 Product API

接下來,我們來測試 GetProduct 這支 API。先不做任何設定,直接執行,看看回應結果。

如預期,回傳 HTTP 401 Unauthorized,表示我們沒有權限。這時,我們需要到 Authorization 頁面,選擇 Bearer Token,並將 {{accessToken}} 填入 Token 欄位。

設定好後再執行一次看看!

還是顯示 401 Unauthorized,提示我們 API Key 無效。這表示我們忘了設定 X-API-Key。回到 header 頁面,補上這個欄位並再次執行。

執行之後又顯示 401 Unauthorized,原來是 IP 白名單的問題。由於我們使用的是本機 API,Postman 測試時預設 IP 是 0.0.0.1,而不是實際的外部 IP。我們可以暫時將 0.0.0.1 加入白名單來進行測試。

private static readonly List<string> WhiteListIPs = new List<string> { "127.0.0.1", "192.168.1.1", "72.14.201.13", "0.0.0.1" }; // 白名單 IP

再次執行後,這次成功了!


測試角色權限

接下來,我們來測試角色權限,使用 DeleteProduct 這支 API,而我們在先前取得Token的時候使用的角色是Employee,這個角色沒有刪除的權限。

如預期,回傳 HTTP 403 Forbidden,這表示身份驗證成功,但授權失敗,因為 Employee 角色無法執行刪除操作。這是正常的,因為刪除功能只允許 Admin 角色使用。

接著,我們更改角色為 Admin 來取得新的 Token,再執行一次刪除操作。

使用新的 Token 成功執行,回應 204 No Content,說明商品已經被刪除。

最後,再執行 GetProduct,確認商品是否已被刪除。果然,商品已經消失了!


每日小結

今天我們通過 Postman 成功測試了各種 API 保護機制,包括 Token 驗證、API Key、角色權限和 IP 白名單等功能。我們還了解了如何利用 Postman 的腳本功能自動化測試流程,提升測試效率。


上一篇
Day 20: 實際開發 API 權限保護(上) 程式實作
下一篇
Day 22: 什麼是微服務?(上)
系列文
使用 C# 從零開始玩轉 Web API,從基礎到微服務與雲端部署的全面探索22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言