跳至主要内容

架構設計 Architecture

系統應該採用分層式安全與身分架構,將不同性質的問題放在特定的小範圍內解決。連線安全、身分建立、請求驗證與業務決策,這些問題的變動速度、失效風險與效能要求並不相同。

除此之外,猶如網路的 4 層或 7 層理論,系統可以維持一致的安全模型,獨立修改各個組件。身份系統、閘道與業務服務可以分別調整實作與部署方式,而不破壞整體行為的可預期性。

連線安全層 (Transport Layer)​

基於憑證與 TLS:

所有能直接對系統發起連線的伺服器,無論是內部團隊、子系統或商業夥伴,都必須持有特定的憑證。此層的責任僅限於確認「連線端點是否為受信任的設備或服務實體」,不涉及使用者或業務語意。憑證的 Subject、SAN 或 Extension 可用於識別組織、系統類型或環境,但不直接映射為應用層權限。

此層級是第一道防線,直接用於隔離不信任的實體。

識別層 (Identity Layer)​

完成連線的實體,必須出示特定的憑證、Client Secret 等資訊,讓伺服器可以證明其身分,並發放對應的 Token。簽發 Token 時,會根據其身分,注入角色、授權範圍以及其他的必要資訊。

此層級負責處理 Principal、Token 管理策略、RBAC 的語義映射。

閘道邏輯層(Gateway Logical Layer)​

備註

該層不一定是個實體的服務,也可以整合到共用的 Middleware Library,如果公司原本有授權的系統,可以移到此處進行整合。

所有的 API 請求(包含交易系統、主控台 API)都經過統一的 Gateway。它負責檢查 Token 的合法性,並利用 JWK 進行簽章驗證,擋掉無效請求。這裡不處理角色判斷、授權範圍、資料庫等議題。

此層級負責處理「結構化」的邏輯:

  1. Token 過期了沒?
  2. Token 的簽章合法嗎?
  3. Token 有特定的欄位嗎?

與具體的服務沒有關係,類似「轉換層」的概念,確保所有的路由、後端服務看到統一的 Token 資訊。

服務層 (Service Layer)​

業務執行層包含交易系統與各類後端服務。這些服務假設所有進來的請求,已完成連線驗證與身分驗證。服務本身不處理 Token 的合法性驗證,也不管理金鑰。僅從 Token 的 Claims 中提取必要資訊,例如:

  • client_id
  • roles
  • aud 與 issuer

此層級負責處理業務語意,授權判斷與資料隔離邏輯必須在此層完成:資料庫查詢條件自動注入 WHERE 子句、操作前檢查角色是否允許、禁止 A 用戶存取 B 用戶的資料。

注意

服務層又稱商業邏輯層,是唯一一個只能由負責專案的開發人員自行處理的,因為我無法確定你的商業邏輯到底包含了那些規則。


分層本身不會是效能瓶頸,比方說特定的 Critical Path Ex. 交易系統,只要確認好邊界、快取等機制,還是可以維持住高效能的模式,未來的伺服器開發者指導會進一步討論。