iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Modern Web

API 101:從基礎認識到應用的全方位指南-Swagger/Postman系列 第 10

DAY10. 如何在 Swagger 中進行 API 的安全測試

  • 分享至 

  • xImage
  •  

在 API 開發中,安全性是無法忽視的一個環節,無論你是開發者還是測試人員,確保 API 的安全性至關重要。而 Swagger 不僅能讓我們撰寫 API 文檔和測試 API 功能,還可以輕鬆整合 身份驗證與授權機制,讓你能進行全面的 API 安全測試。今天,我們就來聊聊如何在 Swagger 中進行 API 的安全性測試,以及如何添加身份驗證與授權機制。

在 Swagger 中測試 API 的安全性
使用 Swagger UI 自動生成的界面來檢查 API 的安全性漏洞、權限問題等。

執行 API 測試
當你打開 Swagger UI 時,右側的每個 API 都有一個可用的 "Try it out" 按鈕,這樣你可以直接在瀏覽器中測試 API 的功能。

不過,這只是功能測試,要測試 API 的安全性,我們需要進一步添加一些測試步驟,例如:

  • 測試未授權的請求:
    不添加任何身份驗證資訊,嘗試調用 API,看看會返回什麼。理想情況下應該返回 401 Unauthorized。
  • 測試有效的授權請求:
    使用有效的 token 認證請求,檢查是否成功訪問 API。
  • 測試無效的授權:
    使用過期或無效的 token 嘗試訪問 API,應返回 401 或 403 錯誤。

添加身份驗證與授權機制
現在我們來聊聊如何在 Swagger 中整合身份驗證(Authentication) 與授權(Authorization)機制。這些機制保護 API,防止未經授權的訪問。

  1. 使用 OpenAPI 規範定義安全方案
    Swagger 支援多種身份驗證方式,最常見的有:
  • Basic Authentication(基礎身份驗證)
  • Bearer Token(JWT 令牌)
  • API Key(API 金鑰)
  • OAuth2(開放授權協議)
    在 Swagger 文件中,我們可以通過 OpenAPI 規範來定義安全方案,並在 API 路徑中應用。

範例:Bearer Token 身份驗證
以下是一個使用 Bearer Token 身份驗證的 OpenAPI 文件範例,讓我們看看如何配置它:

openapi: 3.0.0
info:
  title: Secure API
  version: 1.0.0
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
security:
  - bearerAuth: []
paths:
  /users:
    get:
      summary: Get all users
      security:
        - bearerAuth: []  # 此 API 路徑需要身份驗證
      responses:
        '200':
          description: OK
        '401':
          description: Unauthorized
  1. 在 Swagger UI 中測試身份驗證
    當我們在 Swagger UI 中配置好身份驗證後,你會看到右上角多了一個**「Authorize」**按鈕,點擊後可以輸入 API token 或其他授權方式的憑證。這樣,你就可以模擬真實的身份驗證場景來測試 API。

  2. 常見的身份驗證和授權方式

  • JWT 身份驗證:
    通常用於保護後端 API,JWT token 是根據用戶的身份信息生成,並且每次請求都需要攜帶這個 token。

你可以在 Swagger 中設置 JWT token 並在測試 API 時附帶它,測試是否授權成功。

  • OAuth 2.0:
    如果你的 API 使用 OAuth 2.0 來管理授權,那麼你可以在 Swagger 中設置這個機制。OAuth 2.0 常用於第三方應用程式需要訪問你的 API,例如登錄 Google、Facebook 等。

你只需要在 Swagger 文件中添加 OAuth 2.0 流程的配置,然後讓 Swagger UI 引導用戶進行 OAuth 驗證流程。

範例:OAuth 2.0

components:
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://example.com/oauth/authorize
          tokenUrl: https://example.com/oauth/token
          scopes:
            read: Grants read access
            write: Grants write access
security:
  - oauth2:
      - read
      - write

如何通過 Swagger 測試 API 的安全性?

  1. 測試授權機制是否正確運行:
    可以使用不同的身份驗證令牌,測試用戶是否能夠成功地訪問不同級別的 API。例如,一個普通用戶應無法訪問只有管理員才能使用的 API。

  2. 測試 Token 的有效性:
    測試過期、篡改、無效的 Token 是否會被拒絕。

  3. 模擬攻擊測試:
    嘗試 SQL 注入、跨站點請求偽造(CSRF)等常見的 API 攻擊,看看 API 是否有防護措施。Swagger 本身不進行防護,但你可以通過它模擬這些攻擊來測試 API 的反應。


上一篇
DAY9. 如何使用 Swagger 編寫 API 文檔
下一篇
DAY11. 如何整合 Swagger 與 CI/CD 工具
系列文
API 101:從基礎認識到應用的全方位指南-Swagger/Postman30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言