身份驗證與登入系統設計
身份驗證不是只有「登入頁」而已。真正完整的登入系統,會牽涉到使用者如何證明自己、系統如何保存登入狀態、第三方登入如何綁定帳號、高風險操作何時需要重新驗證,以及後續如何做稽核、風控與權限控管。
本專題會從基礎帳號密碼開始,一路整理到 OAuth / OIDC、SSO、MFA、Passkey、健保卡、自然人憑證、TW FidO 與身份系統設計題。
核心心智模型
先分清楚三件事:
| 概念 | 解決的問題 | 例子 |
|---|---|---|
| 身份識別 Identity Proofing | 你是不是你宣稱的那個人 | 信箱驗證、手機驗證、健保卡、自然人憑證 |
| 身份驗證 Authentication | 這次登入是不是本人操作 | 帳號密碼、TOTP、Passkey、第三方登入 |
| 授權 Authorization | 登入後你能做什麼 | RBAC、權限碼、API scope、資料權限 |
這三件事常被混在一起,但系統設計時必須拆開看。
學習路徑圖
章節清單
以下是預計目錄。為了避免產生大量空文章,會等每篇寫完後再把項目改成連結。
第一階段:基本身份與帳號 (Fundamentals)
建立身份系統的共同語言,先把帳號、密碼、信箱驗證與忘記密碼講清楚。
- 身份驗證、授權與身份識別的差異 - Authentication、Authorization、Identity Proofing 的邊界。
- 帳號密碼登入流程 - 從輸入帳密、驗證、建立登入狀態到回應前端。
- 密碼如何安全儲存 - hash、salt、pepper、bcrypt / Argon2、密碼外洩風險。
- 信箱驗證與手機驗證 - verification token、OTP、重寄、過期、重試限制。
- 忘記密碼流程設計 - reset token、單次使用、過期時間、風險提示。
- 防暴力破解與帳號保護 - rate limit、lockout、captcha、credential stuffing。
第二階段:Session、Cookie、JWT 與 Token (Session / Token)
登入後系統如何記住使用者,是身份驗證實戰中最容易踩坑的一段。
- Session 與 Cookie 登入機制 - stateful session、session id、server-side session store。
- JWT 是什麼 - header、payload、signature、適用場景與常見誤用。
- Access Token 與 Refresh Token - 短效 token、刷新流程、旋轉與撤銷。
- Cookie 安全設計 - HttpOnly、Secure、SameSite、CSRF、XSS。
- 登出與 Session 管理 - 單裝置登出、全裝置登出、踢下線、remember me。
- 前端登入狀態設計 - localStorage、memory、cookie、SSR 與 hydration 風險。
第三階段:OAuth、OIDC 與 SSO (OAuth / SSO)
理解第三方登入與企業 SSO,不只會串 Google Login,而是知道背後協議在保護什麼。
- OAuth 2.0 解決什麼問題 - resource owner、client、authorization server、resource server。
- OpenID Connect 與 OAuth 的差異 - id token、claims、userinfo、身份層。
- 第三方登入流程 - Google、LINE、GitHub 等登入流程與前後端分工。
- Authorization Code Flow 與 PKCE - 為什麼前端應該使用 PKCE。
- 第三方登入後的帳號綁定 - email 衝突、多登入方式、解除綁定。
- SSO、SAML 與 OIDC - 企業登入、IdP、SP、tenant 與組織帳號。
第四階段:MFA、2FA 與高強度登入 (MFA)
多因素驗證的核心不是「再輸入一組碼」,而是如何提高帳號被盜後的防線,同時不要把體驗做壞。
- MFA 與 2FA 總覽 - 知識、持有、生物特徵三種因素。
- SMS OTP 與 Email OTP - 優缺點、重試限制、攔截與社交工程風險。
- TOTP 實作原理 - Google Authenticator 類型、secret、時間窗口、備援。
- Backup Codes 備用碼 - 產生、保存、使用後失效、恢復流程。
- Passkey、WebAuthn 與 FIDO2 - 公私鑰、平台驗證器、跨裝置體驗。
- Risk-based Authentication - 新裝置、新地點、高風險操作時才提高驗證強度。
第五階段:政府與高信任身份 (Government ID)
台灣常見的高信任身份場景,適合獨立整理。這部分正式撰寫時會查官方文件,避免用過期整合方式。
- 健保卡登入 - 適用場景、讀卡、身份確認與醫療場域常見流程。
- 自然人憑證登入 - 憑證、PIN、讀卡機、簽章與身份驗證差異。
- 行動自然人憑證 - 行動載具、行動身份驗證與使用者體驗。
- TW FidO - 行動自然人憑證相關的無密碼登入與高信任驗證。
- 身份驗證與數位簽章 - 「確認本人」和「對文件簽章」不是同一件事。
- 高風險操作重新驗證 - 修改個資、金流、醫療資料、政府服務申辦。
第六階段:身份系統設計 (System Design)
把前面的知識點串成面試與真實產品都能用的系統設計能力。
- 如何設計一個登入系統 - 註冊、登入、登出、session、風控、稽核。
- 會員註冊流程設計 - 信箱驗證、手機驗證、第三方登入與帳號合併。
- 後台管理員登入安全 - MFA、IP allowlist、裝置信任、操作稽核。
- 金融級或醫療級登入設計 - 高風險操作、重新驗證、法規與紀錄保存。
- Auth Audit Log 設計 - 登入、登出、失敗、MFA、權限變更、敏感操作。
- 身份驗證安全檢查清單 - 上線前應檢查的 cookie、token、rate limit、日誌、告警。
建議寫作順序
我會建議先照這個順序寫:
- 身份驗證、授權與身份識別的差異。
- 帳號密碼登入流程。
- 密碼如何安全儲存。
- 信箱驗證與忘記密碼。
- Session、Cookie、JWT 與 Token。
- OAuth 2.0、OIDC 與第三方登入。
- MFA、TOTP、Passkey。
- 健保卡、自然人憑證、TW FidO。
- 登入系統設計題與安全檢查清單。
這樣讀者會先有穩固心智模型,再逐步進入協議、安全與系統設計。