指南

什麼係 OAuth?「用 Google 登入」同委派存取解說

OAuth 係一個開放標準,等用戶俾一個 app 喺另一個服務上嘅帳戶有限度嘅存取權,而唔使俾出密碼。當你撳「連接 Google 行事曆」,然後見到一個問「允許呢個 app 睇你嘅活動嗎?」嘅畫面,嗰個就係 OAuth。App 只會攞到一個 token,權限只限於你批准嘅嘢,而你隨時可以撤銷。加上一層叫 OpenID Connect 嘅機制之後,同一套機制亦都係「用 Google 登入」同類按鈕背後嘅核心。

用 AI 建 app 時點解 OAuth 重要

建 app 嘅時候,OAuth 通常會喺兩種情況出現:

  1. 社交登入。 你想俾用戶用「Google 登入」(或者 Apple、Microsoft、GitHub)代替再開一個新密碼。睇吓點樣為你 app 加入登入。
  2. 連接用戶喺其他服務上嘅帳戶。 你個 app 需要讀取用戶嘅行事曆、代表佢喺社交帳戶發佈嘢、由雲端硬碟攞檔案,或者同步佢哋嘅會計資料。

喺兩種情況下,你嘅 AI builder 都可以寫程式碼,但有啲步驟只可以由你自己做:喺服務商度建立開發者 app、攞到 client ID 同 client secret、登記回調網址,而某啲權限仲要通過服務商嘅審核。明白 OAuth 點運作,會令呢啲步驟——以及佢哋產生嘅錯誤——唔再咁神秘。想睇登入嘅整體圖景,可以睇什麼係身份驗證。

日常比喻

諗吓酒店嘅房卡。入住時,前檯確認你係邊個,然後俾你一張卡,可以開你嘅房同健身室——唔可以開其他房,亦唔可以入員工區——而且退房之後就失效。張卡唔載有你嘅護照。如果你遺失咗佢,前檯會取消佢,再發一張新嘅。

  • 前檯就係授權伺服器(Google 嘅登入頁面)。
  • 你嘅身份核對就係你喺 Google 登入。
  • 房卡就係 access token。
  • **「只限房間同健身室」**就係你批准嘅 scope。
  • 退房就係 token 過期,或者你撤銷存取權。

你正在用嘅 app 永遠唔會見到你嘅 Google 密碼,佢只會見到張房卡。

OAuth 點運作,逐步睇

網頁 app 最常見嘅流程係 authorization code flow(授權碼流程)。以下係用戶將 Google 行事曆連接到一個排程 app 時發生嘅事:

  1. 撳一下。 用戶撳「連接 Google 行事曆」。
  2. 重新導向去服務商。 App 將瀏覽器送去 Google,附上佢嘅 client ID、想要嘅 scope(讀取行事曆活動),以及 Google 完成後應該將用戶送返去嘅 redirect URI。
  3. 登入同同意。 用戶登入 Google(如果未登入),並且見到一個同意畫面,列出 app 要求咩。佢哋撳 Allow。
  4. 帶住 code 返回。 Google 將瀏覽器重新導向去 app 嘅 redirect URI,附上一個短時效、一次性嘅 authorization code。
  5. 喺伺服器交換。 App 嘅伺服器將嗰個 code 連同 client secret 直接送去 Google,然後收到一個 access token(通常亦有 refresh token)。
  6. 使用 API。 伺服器用 access token 調用 Google 行事曆 API,攞到用戶嘅活動。

第 4 步嘅回調大概係咁樣:

https://yourapp.com/auth/google/callback?code=4/0Adeu5B...&state=x7Kq9

第 5 步嘅 token 回應係 JSON,大概係咁:

{
  "access_token": "ya29.a0Af...",
  "expires_in": 3599,
  "refresh_token": "1//0gL...",
  "scope": "https://www.googleapis.com/auth/calendar.readonly",
  "token_type": "Bearer"
}

設計上嘅重點:token 交換係伺服器對伺服器進行,所以 client secret 同 token 永遠唔使經過瀏覽器。

OAuth vs OpenID Connect vs 你自己嘅登入

回答咩問題例子
OAuth 2.0「呢個 app 可以代表用戶做咩?」(授權)讀取用戶嘅行事曆
OpenID Connect(OIDC)「呢個用戶係邊個?」(身份驗證),建基於 OAuth 之上「用 Google 登入」返回一個已驗證嘅電郵
你自己嘅登入「呢個密碼係咪呢個帳戶嘅正確密碼?」喺你嘅資料庫入面儲存(已雜湊)嘅電郵同密碼

好多 app 會將佢哋結合:電郵加密碼登入,加上透過 OIDC 嘅「用 Google 登入」,再加上獨立嘅 OAuth 連接去其他服務。

主要術語

術語意思
服務商/授權伺服器(Provider / authorization server)用戶登入同批准存取嘅服務,例如 Google、Microsoft、GitHub。
客戶端(Client)你嘅 app,向服務商登記嘅身份。
Client ID你 app 喺服務商嗰度嘅公開識別碼。
Client secret你 app 喺服務商嗰度嘅私人密碼。只限伺服器。
Scope(權限範圍)一項具體權限,例如「讀取行事曆」或者「查看電郵地址」。
同意畫面(Consent screen)用戶睇到同批准所要求 scope 嘅頁面。
Redirect URI/回調網址服務商將用戶送返去嘅地方。必須事先登記,並且完全一致。
Access token用嚟調用 API 嘅短時效憑證。
Refresh token用嚟攞新 access token 嘅較長效憑證。要當作密碼一樣保管。
ID tokenOIDC 入面,一個描述用戶身份嘅已簽署 token。
PKCE一項額外檢查(「proof key」),防止被截取嘅 code 被人使用。建議所有客戶端都用。
state一個隨機值,保護整個流程免受偽造請求。

常見誤解

  • 「OAuth 係一個登入系統。」 純 OAuth 只係授予存取;身份由 OpenID Connect 處理。將一個 access token 當成某人身份嘅證明,曾經造成真正嘅安全漏洞。
  • 「個 app 會攞到我嘅密碼。」 佢永遠唔會。呢個就係設計重點。
  • 「多要求 scope 無傷。」 用戶對過於廣泛嘅要求會更加提防,而 Google 等服務商可能要求敏感或者受限 scope 嘅 app 要通過審核。只要求你真正需要嘅嘢。
  • 「Client secret 可以放喺前端。」 任何放喺瀏覽器程式碼入面嘅嘢都係公開嘅。要放喺伺服器端秘密資料入面。
  • 「測試時行得通,所以上線都會行得通。」 服務商通常會限制未經審核嘅 app,例如只限列明嘅測試用戶;而你正式網域嘅重新導向網址需要另外登記。
  • 「Token 會永遠有效。」 Access token 好快就過期,而用戶亦可以撤銷存取權。你嘅 app 要能夠妥善處理兩種情況。

你可以叫 AI builder 做咩

  • 「用「Google 登入」,採用 OpenID Connect,並使用一個維護良好嘅身份驗證函式庫——唔好自己手寫 OAuth 流程。」
  • 「使用 PKCE 嘅 authorization code flow,並檢查 state 參數。」
  • 「client ID 同 client secret 要喺伺服器上由環境變數讀取。」
  • 「只要求我哋需要嘅 scope:唯讀行事曆存取。」
  • 「列出我需要喺服務商控制台登記嘅每一個重新導向網址,包括預覽、已發佈網址同我嘅自訂網域。」
  • 「將 refresh token 加密後儲存喺資料庫,並且遇到過期或者被撤銷嘅 token 時,請用戶重新連接。」
  • 「俾用戶喺設定頁面中斷連接呢個整合。」

OAuth 同 Mythex

Mythex 冇內建俾終端用戶登入你建嘅 app;佢嘅文件描述嘅係「自帶身份驗證」(bring-your-own)方式:你揀一個身份驗證函式庫或者託管服務商,將佢哋嘅 key 儲存為項目秘密資料,然後 agent 負責寫程式碼。加入身份驗證食譜有一個起始提示可以用。你亦會喺 Mythex 本身遇到 OAuth:你可以用 Google 註冊,連接 GitHub 做倉庫同步就用到 GitHub OAuth,而透過 MCP 連接去 Mythex 嘅 AI 客戶端,都會經過一個 OAuth 同意頁面。想了解多啲,可以睇什麼係身份驗證同什麼係兩步驟驗證。

常見問題

簡單嚟講,什麼係 OAuth?

OAuth 係一種標準方式,等用戶可以俾一個 app 存取佢喺另一個服務上嘅帳戶——例如俾一個排程 app 讀取佢嘅 Google 行事曆——而唔需要俾出密碼。用戶批准具體嘅權限,app 就會收到一個 token,只可以用嚟做嗰啲批准嘅事。

OAuth 同「用 Google 登入」係一樣嘢嗎?

「用 Google 登入」建基於 OAuth 2.0 同 OpenID Connect 之上。OpenID Connect 係 OAuth 上面嘅一層,加入一個標準方式,話俾 app 知用戶係邊個。OAuth 本身係關於授予存取;OpenID Connect 就係將佢變成登入功能嘅部分。

什麼係 OAuth access token?

Access token 係 app 送去服務嘅 API 嘅一個憑證,用嚟證明佢已經獲授予存取權。佢通常有效期短,並且只限於用戶批准嘅權限範圍(scope)。如果有發出 refresh token,app 就可以攞新嘅 access token,而唔使再問用戶。

redirect_uri_mismatch 係咩意思?

即係登入時 app 送出嘅回調網址,同喺服務商開發者控制台登記嘅網址唔完全一致。請為 app 運行嘅每個地址都加入確切嘅網址——包括 https、網域、路徑同任何結尾嘅斜線。

OAuth 安全嗎?

OAuth 2.0 被廣泛使用,如果正確實施就係安全嘅:使用 PKCE 嘅 authorization code flow、確切嘅重新導向網址、state 參數,並且將 client secret 同 token 留喺伺服器。大部分問題都係因為實施時走捷徑,所以建議使用一個維護良好嘅函式庫。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)