階段 5 · 帳號、權限與收錢

OAuth

讓使用者用 Google、GitHub、LINE 等帳號授權登入或授權存取資料的標準。

先用一句話理解

讓使用者用 Google、GitHub、LINE 等帳號授權登入或授權存取資料的標準。

打個比方

像用 Google 帳號當通行證,不用在每個網站重設密碼。

什麼時候會遇到

想支援第三方登入或串接第三方帳號資料時。

再往深一點看

OAuth 是一套「授權委託」標準,解決的問題是:你的應用程式要如何代表使用者存取另一個服務的資料,卻不需要使用者把密碼交給你。流程是:使用者點「用 Google 登入」,跳到 Google 的授權頁面,使用者同意後 Google 發一個授權碼回你的應用,你的後端再換成 Access Token。OAuth 本身是授權協議,不是身份驗證協議;「用 Google 登入」實際上是在它上面多加了一層 OpenID Connect(OIDC)才讓你拿到使用者的身份資訊。實作 OAuth 流程有不少細節容易出錯(state 參數防 CSRF、token 安全存放等),所以多數專案會直接用 Clerk 或 Auth.js 這類已整合好的方案。

舉個例子

你用 Auth.js 幫 Next.js 專案加 GitHub 登入:在設定檔加上 GitHub provider 並填入 Client ID / Secret,Auth.js 幫你處理整段 OAuth 跳轉、code 換 token、取得使用者 email 的流程;使用者按一個按鈕就能登入,你不需要自己實作任何 OAuth 細節。

常見誤解

  • - 以為 OAuth 登入就等於完整的 Authorization 系統——OAuth 只確認使用者透過 Google 登入了,不代表他有權限看你應用裡的所有資料,你還是要自己做 role 和資源的權限控管。
  • - 在 OAuth callback 沒有驗證 state 參數,讓應用程式暴露在 CSRF 攻擊下,攻擊者可以讓受害者把自己的帳號綁到攻擊者的 Google 帳號。
  • - 把 OAuth App 的 Client Secret 寫在前端程式碼或 git 倉庫,洩漏後攻擊者可以偽造 OAuth 流程冒充你的應用。

相關名詞

相關服務

ClerkAuth.jsAuth0

相關工具