API Token 與加固 (Tokens & Hardening)

★★★★★Draft

FromDesigning Web APIs

📚 From the Books

API Token 與加固 (Tokens & Hardening)ConceptSecurity Basics

發了 token 不是結束,是風險的開始。短命 access token + refresh token + 可撤銷是把「洩漏」的傷害縮到最小的標準組合;再加一串 OAuth 伺服器加固,才擋得住 CSRF、釣魚與點擊劫持。

🧠 Core Ideas

TIP

核心直覺:假設 token 遲早會外洩,所以讓它短命 + 可換 + 可撤。短命 access token 洩漏只在過期前有效;refresh token 沒有 client secret 也用不了。

⚖️ Tradeoffs

為什麼短命 token 更安全
  • access token 洩漏 → 僅過期前有效。
  • refresh token 洩漏但沒 client secret → 用不了;兩者都洩 → 因 refresh 常為一次性,可偵測異常。
  • 教訓:Slack 早期長命 token 被開發者硬編碼、甚至誤傳到 GitHub → Slack 寫爬蟲掃 GitHub 上的 token 自動撤銷,並改用短命 token。
OAuth 伺服器加固清單
  • state 參數防 CSRF;authorization code 短命且一次性
  • 強制 HTTPS 防中間人;驗證 redirect URL 必須與註冊值相符。
  • 禁止 iframe 渲染授權畫面X-Frame-Options)防點擊劫持。
  • client secret 可重設(洩漏能輪換);敏感資料用專用 scope;新授權通知使用者禁誤導性 app 名稱防釣魚(曾有假「Google Docs」釣走百萬帳號)。
Token 缺 scope 時的回應
  • 驗證失敗時回詳細錯誤:附上「已提供的 scope」與「所需的 scope」,大幅省下開發者除錯時間(Slack 就這麼做)。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading