安全的兩塊基石常被混談:認證(AuthN)=你是誰、授權(AuthZ)=你能做什麼。API 對外開放時,用密碼直傳(Basic Auth)幾乎全錯,正解是 OAuth:不共享密碼、可選範圍、可撤銷。
🧠 Core Ideas
TIP
一句話分野:認證驗身分、授權驗權限。登入證明「你是 Alice」;授權決定「Alice 能不能編輯這頁」。兩件事,別混。
- Basic Authentication 的三宗罪:憑證得以可解密方式存放、無法撤銷單一 app(只能改密碼撤全部)、app 拿到帳號完整權限(Twitter 2010 已停用)。
- OAuth 2.0(業界標準)三大好處:不共享密碼、選擇性授權、可撤銷。
- 使用者被導到 API 提供者授權,app 拿到的是代表使用者的 access token,不是密碼。
⚖️ Tradeoffs
OAuth 授權流程(授權碼換 token)
- 前置:app 註冊拿 client ID(可公開)+ client secret(保密)+ redirect URL。
- 三步:①app 導使用者到提供者(帶 client ID、scope、state)→ ②使用者同意、帶 authorization code 導回 → ③app 用 code + client secret 換 access token。
- API 伺服器每次驗兩件事:token 有效 + token 具備所需 scope。
Scopes — 權限範圍怎麼切
- scope 限制 app 能碰什麼,授權時明列給使用者看(如 Twitter 唯讀/讀寫/含私訊三層)。
- 開頭就要想 scope 策略:太粗 → app 權限過大;太細 → 使用者/開發者困惑。
- Slack 2015 從一個大
read拆成 27 個細粒度 scope → app 只拿必要權限、使用者更願授權,安裝轉換率反而提升。
🔑 Takeaways
- AuthN 驗身分、AuthZ 驗權限——先分清這兩件事再談機制。
- 對外 API 別用 Basic Auth;用 OAuth:不共享密碼、scope 選擇性授權、可撤銷。
- scope 策略要一開始就定,粒度要剛好——細到夠隔離敏感資料、又不讓人困惑。
No notes yet — jot your takeaways or Q&A here.