B10 · 認證與授權 詳細 ROADMAP
計畫文件,不會被 Quartz 渲染。
回主 roadmap → backend/ROADMAP.md
章節目標
認證(Authentication)跟授權(Authorization)是後端最容易出安全事故的領域。本章涵蓋 Session / JWT / OAuth / OIDC / SSO,以及權限模型(RBAC / ABAC / ReBAC)、密碼雜湊、token 生命週期管理。Proto 有完整 JWT RS256 實作 + 事件驅動 token 撤銷系統,本章會大量引用。
🌱 基本介紹
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 01 | 認證 vs 授權的差別 | 01-authn-vs-authz | 🌱 | 「你是誰」vs「你能做什麼」;AuthN / AuthZ 分工 |
❓ 為什麼需要
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 02 | 為什麼 Session / JWT / Cookie 搞混會出事 | 02-why-auth-confusion-causes-issues | 🌱 | Session store 跨 instance 遺失、JWT 不能撤銷的坑、Cookie 屬性錯誤(SameSite / Secure) |
| 03 | 為什麼自己寫 auth 是地雷 | 03-why-not-roll-your-own-auth | 🌱 | 密碼存 MD5、timing attack、JWT 演算法 header 信任(alg: none)、token 撤銷失敗 |
| 04 | 為什麼 RBAC 不夠用常要 ABAC / ReBAC | 04-why-rbac-not-enough | 🌱 | 資源層級權限、「只能看自己的訂單」RBAC 搞不定;Google Zanzibar(ReBAC) |
🕰️ 演進
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 05 | 認證機制演進 | 05-auth-evolution | 🌱 | Basic Auth → Session Cookie → OAuth 1.0 → OAuth 2.0 → OIDC → Passkey(WebAuthn) |
| 06 | 權限模型演進 | 06-authz-model-evolution | 🌱 | ACL → RBAC(2000s)→ ABAC(2010s)→ ReBAC(Zanzibar 2019+) |
🧠 知識型
F10-A 認證機制
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 07 | Session vs JWT vs Cookie | 07-session-jwt-cookie | 🌱 | 三種機制的定位、各自適用場景、混用模式 |
| 08 | JWT 深入 | 08-jwt-deep | 🌱 | JWS / JWE / JWK、header / payload / signature、常見坑(none algorithm、audience 沒驗) |
| 09 | JWT 非對稱簽名(RS256 / ES256) | 09-jwt-asymmetric | 🌱 | Public / Private key 分工、微服務場景、proto 實作 ⛔️ 見 B07 #11 |
| 10 | OAuth 2.0 / OIDC | ⛔️ fundamentals/oauth-guide | 🌿 | 跨系列 |
| 11 | Passkey / WebAuthn | 11-passkey-webauthn | 🌱 | 無密碼登入、後端驗證流程、前後端分工 |
| 12 | SSO 整合 | 12-sso-integration | 🌱 | SAML vs OIDC;企業常見選擇;IdP 整合(Okta / Auth0 / Keycloak) |
F10-B 密碼與機密
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 13 | bcrypt 瓶頸 | ⛔️ micro-service/06-bcrypt-bottleneck | 🌿 | 跨系列 |
| 14 | bcrypt 各語言實作 | ⛔️ micro-service/07-bcrypt-implementations | 🌿 | 跨系列 |
| 15 | bcrypt vs argon2 | ⛔️ micro-service/08-bcrypt-vs-argon2 | 🌿 | 跨系列 |
| 16 | 密碼儲存最佳實踐 | 16-password-storage-best-practice | 🌱 | cost factor 怎麼調、pepper、migration 升級策略(多 hash 共存) |
F10-C 授權模型
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 17 | RBAC 深入 | 17-rbac-deep | 🌱 | Role / Permission / User 資料模型、hierarchy、用 proto 實作(見 B07) |
| 18 | ABAC 深入 | 18-abac-deep | 🌱 | Attribute-based、Policy engine(OPA)、靈活但難 debug |
| 19 | ReBAC / Zanzibar | 19-rebac-zanzibar | 🌱 | Relation-based;Google Drive / GitHub 權限模型;SpiceDB / Warrant OSS 實作 |
| 20 | Policy as Code(OPA) | 20-opa | 🌱 | Open Policy Agent、Rego language、跟 K8s / API Gateway 整合 |
F10-D Token 生命週期
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 21 | Access Token / Refresh Token | 21-access-refresh-token | 🌱 | 短期 access(15 分鐘)+ 長期 refresh(7 天)、rotation、family tracking |
| 22 | Token 撤銷 / Blacklist | 22-token-revocation | 🌱 | JWT 不能撤銷的迷思、短期 + blacklist / introspection / revocation list;proto 實作事件驅動撤銷 |
| 23 | Token 儲存位置的 trade-off | 23-token-storage | 🌱 | localStorage / sessionStorage / cookie / memory;XSS / CSRF / refresh 的三方拉扯 |
F10-E 微服務認證架構
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 23-2 | Service-to-Service Auth 選型 | 23-2-service-to-service-auth | 🌱 | mTLS(最安全但複雜)vs Internal JWT(簡單但要 key 管理)vs API Key(legacy 相容);三選一決策 |
| 23-3 | User Context Propagation | 23-3-user-context-propagation | 🌱 | 使用者身份如何沿 service chain 傳遞;跟 trace context 分工;中間 service 如何重新驗證 |
| 23-4 | Zero-Trust Network 原則 | 23-4-zero-trust | 🌱 | 不信任 network boundary;每個 request 都要驗證;實務上怎麼漸進採用 |
| 23-5 | Token Exchange / Downscoping | 23-5-token-exchange | 🌱 | RFC 8693;external token → internal scoped token;敏感 operation 降權限;STS 模式 |
| 23-6 | Gateway → Internal Token 轉換 | 23-6-gateway-internal-token | 🌱 | Kong / Envoy / APISIX 驗 user token → 轉 internal short-lived token;簡化 internal service auth |
🔧 小實作注意事項
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 24 | 從零實作 JWT auth(proto 對照) | 24-jwt-auth-from-scratch | 🌱 | FastAPI + RS256、issuer / audience 驗證、token blacklist 整合 |
| 25 | RBAC 實作(proto 對照) | 25-rbac-impl | 🌱 | Role / Permission model、middleware、decorator 保護 endpoint |
| 26 | Event-driven Token 撤銷 | 26-event-driven-token-revocation | 🌱 | user.deleted event → auth-service 撤銷所有 token;proto 案例 |
💣 Anti-pattern
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 27 | 認證授權 Anti-patterns | 27-auth-antipatterns | 🌱 | 密碼存 MD5 / SHA1、JWT 塞敏感資料(沒加密)、JWT expiration 設 30 天、忘了 audience / issuer 驗證、把 role 檢查寫在 Controller(應該在 decorator / middleware)、權限表用 CSV、admin 權限一鍵全通 |
🧰 對應檢查工具
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 28 | Auth 相關工具 | 28-auth-tooling | 🌱 | jwt.io、Keycloak / Auth0 / Ory Hydra(IdP)、SpiceDB / OpenFGA(ReBAC)、OPA(policy) |
📎 補充
| # | 主題 | Slug | Stage | 大綱 |
|---|
| S01 | 多租戶(Multi-tenant)Auth 設計 | s01-multi-tenant-auth | 🌱 | tenant isolation、權限繼承、跨租戶存取 |
| S02 | MFA / TOTP / WebAuthn 整合 | s02-mfa-integration | 🌱 | backup codes、SMS vs authenticator、硬體 key |
章節進度統計
- 知識主題:28 + 2 補充 = 30 項
- 🌿 growing:4(跨系列)
- 🌱 seed:26
跨系列連結
- →
fundamentals/oauth-guide
- →
micro-service/06–08(bcrypt 系列)
- →
backend/conventions/ B07 #11 #17–19 #25(proto auth / middleware)
- →
backend/security/ B16(注入攻擊跟 auth 的關係)
- →
security/03-web-security