iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0

完整程式碼可在 GitHub 專案中找到:Finetune-30-days-demo / day-16


在前幾天,我們已經能完成模型的 訓練、部署與查詢
但問題也隨之浮現:

  • 誰可以提交訓練?
  • 誰能看到全部實驗結果?
  • 普通使用者能不能查別人的任務?

如果沒有權限管理,系統就會變成「誰都能亂操作」的狀態。今天的任務,就是透過 JWT 認證RBAC(基於角色的存取控制),為平台加上「安全性」與「多角色管理」的基礎


為什麼需要認證與 RBAC?

  1. 多使用者環境

    • Admin:需要觀察整體效能、管理任務與審計紀錄
    • User:僅能看到自己提交的任務與結果
  2. 資源隔離

    • 訓練任務會消耗 GPU/CPU,必須避免濫用
    • 確保不同使用者之間的實驗互不干擾
  3. 安全與可追溯

    • 未登入的請求 → 直接攔截
    • 非授權存取 → 明確回傳 403 Forbidden

JWT 認證流程

整個平台採用 JWT (JSON Web Token) 作為核心認證機制。
使用者登入後,會獲得一張帶有角色資訊的「通行證」,後續請求都必須帶上這個 Token。

流程大致如下:

  1. 使用者登入,伺服器驗證帳號密碼。

  2. 伺服器簽發一個 JWT,內含:

    {
      "user_id": "u123",
      "role": "user",
      "exp": 1735640400
    }
    
  3. 後續 API 請求需在 Header 加上:

    Authorization: Bearer <token>
    
  4. 系統驗證 token → 合法則放行,否則回傳 401 Unauthorized

這種設計的好處是 無狀態(Stateless),後端不用保存 session,容易擴展。


RBAC 權限控制設計

我把權限分成三層:

  1. 基本認證

    • 驗證 token 是否有效、未過期
    • 無效 → 401 Unauthorized
  2. 角色限制

    • Admin 可以查詢所有實驗與統計資訊
    • User 僅能查詢自己的任務
    • 非授權 → 403 Forbidden
  3. 資源所有權

    • 查詢任務狀態時,比對 task_id 是否屬於該使用者
    • 避免「竊看」他人實驗結果

API 權限規劃

端點 方法 權限要求 說明
/login POST 登入,回傳 JWT token
/train POST 已認證用戶 提交訓練任務
/task/{task_id} GET 任務所有者 查詢任務狀態
/experiments GET 管理員 列出所有實驗記錄
/experiments/stats GET 管理員 查詢實驗統計資訊
/experiments/{id} GET 任務所有者 查詢單一實驗紀錄

Day 16 的核心收穫,是讓平台正式邁向 多人共用 的環境。
使用者能安全地提交與查詢自己的任務,管理員則具備全面監控的能力。
這不僅避免了資源濫用,也讓 API 的錯誤回應更加一致、可預測。

如果說前幾天的重點是「系統能跑起來」,那麼今天的重點就是「系統能安全地讓多人一起使用」。接下來的 Day 17(審計日誌 Audit Log),會在這套機制上再進一步,確保每一個操作都有跡可循。


📎 AI 協作記錄:今日開發指令

1. 新增 JWT 工具模組
 功能:
 - create_token(user_id, role)
 - decode_token(token)
 - get_current_user
 - check_admin
 - check_task_owner


2. 在 FastAPI 主程式新增登入 API
 修改內容:
 - 新增 /login API,接收 username/password
 - 判斷角色(admin or user)
 - 使用 jwt_utils 建立並回傳 JWT Token


3. 保護既有任務 API
 修改內容:
 - 在 /train 與 /task/{id} 前加上依賴:
   - get_current_user
   - check_admin(只有 admin 能查詢全部)
   - check_task_owner(user 僅能查詢自己的任務)


上一篇
[Day 15] 系統韌性設計:錯誤回復與 Checkpoint 管理
下一篇
[Day 17] 系統可追溯性初探:Audit Log 最小實作
系列文
打造 AI 微調平台:從系統設計到 AI 協作的 30 天實戰筆記21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言