Engineering

為什麼用 Google OAuth 而不是 Email + 密碼

2026 年 5 月 5 日約 9 分鐘閱讀作者:Hao0321 Studio

遊戲大廳的登入只支援 Google Sign-In。沒有「註冊新帳號」、沒有「忘記密碼」按鈕。這個選擇看起來限縮,實際大幅簡化整個系統。這篇講這個決策背後的計算。

自管密碼的隱藏成本

很多獨立開發者直覺寫 Email + 密碼登入:

POST /register  → 收 email + password
POST /login     → 驗證
POST /forgot    → 發重設信
POST /reset     → 改密碼
POST /verify    → email 驗證
POST /change-pw → 變更密碼

這 6 個端點各自帶複雜邏輯:

端點隱藏複雜度
註冊密碼強度檢查、avatar 預設、防 spam
登入brute force 防護、bcrypt cost 設定
忘記密碼email 寄送、token 過期、防止 enumeration attack
email 驗證SMTP 設定、bounce handling、垃圾信過濾
變更密碼舊密碼確認、所有 session 失效

實作每個都不難,但加起來:1–2 週工作量 + 永久維護。

Google OAuth 的成本

對比:

// 前端
<script src="https://accounts.google.com/gsi/client" async defer></script>
<div id="gSignIn"></div>
<script>
  google.accounts.id.initialize({
    client_id: 'xxx.apps.googleusercontent.com',
    callback: handleSignIn,
  });
  google.accounts.id.renderButton(
    document.getElementById('gSignIn'),
    { theme: 'outline', size: 'large' }
  );
</script>

// 後端
const gRes = await fetch(
  'https://oauth2.googleapis.com/tokeninfo?id_token=' + token
);
const gData = await gRes.json();
if (gData.aud !== env.GOOGLE_CLIENT_ID) return err('bad audience', 401);
// 寫入 D1,回 session JWT

1 天搞定,沒有後續維護。

安全性對比

面向Email/密碼Google OAuth
密碼洩漏風險你 DB 存密碼 hash,洩漏 = 災難沒有密碼 = 不可能洩漏
2FA要自己實作Google 已經做了
Phishing 防護Google 帳號異常會通知使用者
Credential stuffing常見攻擊無攻擊面
密碼輪替合規要自己管Google 處理

使用者轉換率

反直覺的事實:Google Sign-In 的轉換率比 Email 註冊高。原因:

本站實測:放上 Google Sign-In 後新使用者完成登入率從 22% 升到 71%。

失去什麼

誠實地講:

進階:跟自家 session JWT 整合

Google ID token 1 小時就過期,不適合當 session。流程:

  1. 前端拿到 Google ID token
  2. 送到後端 /auth/google
  3. 後端驗證 ID token(aud, exp, sub, email_verified)
  4. 後端在 D1 找 / 建 user
  5. 後端用自己的 JWT_SECRET 簽 30 天 session JWT
  6. 前端把 session JWT 存 localStorage
  7. 後續 API 用 session JWT 認證(不再碰 Google)

添加其他 OAuth provider

需求增加可以加 Apple Sign-In、GitHub Sign-In,但都用同一個 session JWT,前端只是多一個按鈕:

// 統一 endpoint
POST /auth/{provider}
  - provider: google | apple | github
  - token: provider 的 ID token

// 後端 dispatch 到不同 verifier,最後都產 session JWT

結語

「自管密碼」是寫程式書教的標準做法,但 2026 年對獨立工作室不再合理。OAuth 是業界共識,避開了 90% 的安全坑。把省下的 1–2 週時間放在做產品差異化更划算。