階段 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