一對多信任邊界
一對多信任邊界
定義
當一個服務方(中繼站、Gateway、清算中心)持有等級最高的憑證,並代理 N 個彼此不該互相看見的租戶對外通訊時,決定「哪一份秘密放在哪一層、誰拿得到、誰永遠拿不到」的切法。
與一對一的 [[請求簽章]] 或 [[三層 API 驗證]] 不同,一對多的核心問題不是「怎麼證明是你」,而是「怎麼讓 N 個租戶各自可驗證,卻無法互相冒充,也無法上溯到那把最高權限的鑰匙」。
三層憑證分配
| 層級 | 例子(LINE 中繼站) | 存放位置 | 誰能取得 |
|---|---|---|---|
| 平台主憑證 | Channel Secret、Channel access token | 只在環境變數,連加密存都不存 | 只有中繼站本身 |
| 租戶衍生憑證 | 每站專屬 relay_secret | D1,AES-GCM 加密存 | 該租戶,經 server-to-server 兌換一次 |
| 租戶識別憑證 | site_key | D1,AES-GCM 加密存 | 該租戶,登記時只回傳一次 |
判準:租戶只該拿到「驗證自己這條線」所需的最小憑證,永遠不該持有能代表整個平台的那一份。
關鍵數據點(附來源)
- Channel Secret 連加密存都不存,只放 Workers 環境變數,D1 整個被撈走也換不到任何 token。(line-login-relay-cloudflare-workers)
- 金鑰儲存判準:只需要驗證就存 Hash,需要拿原文出來重簽就 AES-GCM 加密存。
relay_secret要對轉發出去的 Webhook 重新簽章,Hash 單向簽不回來。(line-login-relay-cloudflare-workers) - 解密鑰匙
RELAY_ENC_KEY只在 Workers 環境變數,不進資料庫,與被加密的資料分離存放。(line-login-relay-cloudflare-workers) - 事件路由:所有租戶共用一個對外 Webhook URL,中繼站以
line_user_id → site_id對照表判斷該轉給誰,並以該站的relay_secret重簽。(line-login-relay-cloudflare-workers) - 熱路徑快取
resolve:{line_user_id}設 1800 秒,解決高併發下每則事件都查一次 D1 造成的排隊。(line-login-relay-cloudflare-workers)
集中化的代價
信任邊界往中間收攏會同時買到便利與風險,三項代價是結構性的,不是實作沒做好:
- 獨立失敗變成共同失敗。 原本每個租戶自己的憑證掛掉只影響自己,集中後中繼站掛掉全部租戶同時失效。
- 配額共用產生互相排擠。 平台配額(如 LINE 推播額度)算在主憑證上,尖峰時租戶彼此爭搶,這條通常先於技術瓶頸爆掉。
- 責任轉移不等於成本消失。 「租戶零設定」是對租戶零,設定、合規與配額管理的責任被收到營運方身上。
前提與局限性
- 最強前提:租戶接受身分掛在營運方的平台帳號底下。 只要租戶要求品牌帳號必須是自己的,這套架構直接不適用,沒有折衷版本。這與 [[內容自主權 vs 託管便利]] 是同一條軸線的相反端點。
- 有規模甜蜜區。 租戶 3 家時是過度工程,直接教設定更快;租戶 300 家時配額與單點問題會先爆。適用範圍是一段區間,不是一個方向。
- 合規風險可能大於技術風險。 若第三方平台的服務條款禁止一組憑證服務多個獨立商家,架構再嚴謹也不合法。這一層必須先確認。
- 不含權限分級。 一組租戶識別憑證等於該租戶的全部能力,沒有 RBAC,與 [[三層 API 驗證]] 的同一條限制。
- 憑證只回傳一次擋不住人為外洩。 它降低的是後台反覆曝光的面積,與 [[API 金鑰管理]] 「Key 管理靠人」的局限一致。
衝突標記
- 與 [[API 金鑰管理]] 的「只存 Hash 不存明文」原則表面矛盾。實際上兩者適用條件不同:只需驗證存 Hash,需要拿原文出來重簽就必須可逆加密。該條目已補上此判準。
跨域同構
- 銀行聯行代收與清算中心:清算中心持有最高等級憑證、對每家成員銀行發一組識別碼。金融業的成熟答案是「清算中心必須有最高等級的可用性保證」,對應到中繼站就是:可靠性投資的優先序高於再加一道簽章。
- 電力變電所降壓:高壓集中在變電所,配到每戶的是低壓。用戶端不接觸高壓不是功能缺陷而是設計目標,代價同樣是變電所故障全區停電。
- 旅行社簽證代辦:把一次性的學習成本攤提到上千件,代價是掛在代辦方的配額與信譽底下。
關聯概念
- [[Gateway 架構]]
- [[請求簽章]]
- [[API 金鑰管理]]
- [[HMAC 驗證]]
- [[重送攻擊防禦]]
- [[第三方服務依賴風險]]
- [[內容自主權 vs 託管便利]]