指南

什麼是 OAuth?「使用 Google 登入」與委派存取白話解說

OAuth 是一項開放標準,讓使用者能夠在不交出密碼的情況下,給予某個應用程式在另一項服務上有限的帳號存取權限。當你點擊「連結 Google 行事曆」,然後看到一個詢問「允許此應用程式查看你的活動嗎?」的畫面時,就是 OAuth 在運作。應用程式取得的權杖只涵蓋你核准的範圍,而且你隨時可以撤銷。同樣的機制,再加上一層稱為 OpenID Connect 的協定,就是「使用 Google 登入」及類似按鈕背後的技術。

用 AI 製作 App 時為什麼 OAuth 很重要

製作 App 時,OAuth 通常會在兩種情況下出現:

  1. 社群登入。 你希望使用者可以用「使用 Google 登入」(或 Apple、Microsoft、GitHub)來代替另外建立一組密碼。請參閱如何為你的 App 加入登入功能。
  2. 連接使用者在其他服務上的帳號。 你的 App 需要讀取使用者的行事曆、代替他們發文到社群帳號、從雲端硬碟抓取檔案,或同步他們的會計資料。

在這兩種情況下,AI 製作工具都能寫出程式碼,但有些步驟只有你本人能做:在服務提供者那裡建立開發者應用程式、取得客戶端 ID 與客戶端密鑰、登記回呼網址,以及對於某些權限,還需要通過提供者的審核。了解 OAuth 的運作方式,會讓這些步驟及它們產生的錯誤不再那麼神秘。若想了解登入的整體概念,請參閱什麼是驗證。

日常比喻

想像一張飯店的房卡。辦理入住時,櫃檯會確認你的身分,然後給你一張房卡,可以開你的房間與健身房,但不能開其他房間或員工區域,而且退房後就失效。房卡上不包含你的護照資料。如果遺失了,櫃檯會註銷它並發出新卡。

  • 櫃檯就是授權伺服器(Google 的登入頁面)。
  • 你的身分查驗就是你在 Google 登入。
  • 房卡就是存取權杖。
  • **「只限房間與健身房」**就是你核准的權限範圍(scope)。
  • 退房就是權杖過期,或你撤銷存取權限。

你正在使用的 App 從來不會看到你的 Google 密碼,只看到那張房卡。

OAuth 運作流程,一步一步來

Web 應用程式最常見的流程是授權碼流程(authorization code flow)。以下是使用者把 Google 行事曆連接到一個排程 App 時發生的事情:

  1. 點擊。 使用者點擊「連結 Google 行事曆」。
  2. 重新導向到提供者。 App 把瀏覽器導向 Google,並附上它的客戶端 ID、想要的權限範圍(讀取行事曆活動),以及 Google 完成後應該把使用者送回的重新導向 URI。
  3. 登入並同意。 使用者登入 Google(如果尚未登入),並看到一個列出 App 所要求權限的同意畫面。使用者按下允許。
  4. 帶著代碼回來。 Google 把瀏覽器重新導向到 App 的重新導向 URI,並附上一個短效、只能使用一次的授權碼。
  5. 在伺服器上交換。 App 的伺服器把該授權碼與它的客戶端密鑰直接送給 Google,並收到一個存取權杖(通常也會收到一個重新整理權杖)。
  6. 使用 API。 伺服器帶著存取權杖呼叫 Google 行事曆 API,取得使用者的活動。

第 4 步中的回呼大致會像這樣:

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

而第 5 步中的權杖回應是 JSON 格式,像這樣:

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

重要的設計重點是:權杖的交換發生在伺服器之間,因此客戶端密鑰與權杖永遠不需要經過瀏覽器。

OAuth vs OpenID Connect vs 你自己的登入

它回答的問題範例
OAuth 2.0「這個應用程式可以代表使用者做什麼?」(授權)讀取使用者的行事曆
OpenID Connect(OIDC)「這位使用者是誰?」(驗證),建立在 OAuth 之上「使用 Google 登入」回傳一個已驗證的電子郵件
你自己的登入「這是此帳號正確的密碼嗎?」在你的資料庫中儲存(雜湊過的)電子郵件與密碼

許多應用程式會結合這些方式:電子郵件加密碼登入,加上透過 OIDC 的「使用 Google 登入」,再加上與其他服務分開的 OAuth 連接。

關鍵術語

術語意義
提供者/授權伺服器(Provider / authorization server)使用者登入並在其上授予存取權限的服務,例如 Google、Microsoft、GitHub。
客戶端(Client)你的應用程式,在提供者那裡登記的身分。
客戶端 ID(Client ID)你的應用程式在提供者那裡的公開識別碼。
客戶端密鑰(Client secret)你的應用程式在提供者那裡的私密密碼。只能放在伺服器端。
權限範圍(Scope)一項特定的權限,例如「讀取行事曆」或「查看電子郵件地址」。
同意畫面(Consent screen)使用者查看並核准所要求權限範圍的頁面。
重新導向 URI/回呼網址(Redirect URI / callback URL)提供者把使用者送回的位置。必須事先登記,且必須完全相符。
存取權杖(Access token)用來呼叫 API 的短效憑證。
重新整理權杖(Refresh token)用來取得新存取權杖的較長效憑證。請像保管密碼一樣保管它。
ID 權杖(ID token)在 OIDC 中,描述使用者身分的簽署權杖。
PKCE額外的檢查(「證明金鑰」),防止被攔截的代碼遭到冒用。建議所有客戶端都使用。
state一個隨機值,用來保護流程免於偽造的請求。

常見迷思

  • 「OAuth 是登入系統。」 單純的 OAuth 只負責授予存取權限;身分驗證由 OpenID Connect 處理。把單獨的存取權杖當成某人身分的證明,已經造成過真實的安全漏洞。
  • 「應用程式會拿到我的密碼。」 它永遠不會。這正是設計的重點。
  • 「多要求一些權限範圍沒有關係。」 使用者對過於寬泛的要求會更加謹慎,而 Google 等提供者對敏感或受限的權限範圍可能要求應用程式審核。只要求你需要的權限。
  • 「客戶端密鑰可以放在前端。」 任何放在瀏覽器程式碼中的東西都是公開的。請把它保存在伺服器端的機密中。
  • 「測試時能運作,正式上線就會運作。」 提供者通常會限制未經驗證的應用程式,例如只允許列出的測試使用者,而正式網域的重新導向 URI 必須另外登記。
  • 「權杖會永遠有效。」 存取權杖很快就會過期,使用者也可以撤銷存取權限。你的應用程式必須優雅地處理這兩種情況。

可以向 AI 製作工具提出的要求

  • 「使用 OpenID Connect 加入「使用 Google 登入」,並採用維護良好的驗證函式庫,不要自己手刻 OAuth 流程。」
  • 「使用搭配 PKCE 的授權碼流程,並檢查 state 參數。」
  • 「從伺服器端的環境變數讀取客戶端 ID 與客戶端密鑰。」
  • 「只要求我們需要的權限範圍:唯讀的行事曆存取。」
  • 「告訴我需要在提供者的主控台中登記哪些重新導向網址,包括預覽、已發佈網址與我的自訂網域。」
  • 「把重新整理權杖加密後存進資料庫,並在權杖過期或被撤銷時,請使用者重新連接。」
  • 「讓使用者能在設定頁面中中斷與此整合的連線。」

OAuth 與 Mythex

Mythex 沒有為你製作的 App 內建終端使用者登入功能;它的文件描述的是「自備方案」的做法:你選擇一個驗證函式庫或託管的提供者,把它的金鑰存為專案機密,再由 Agent 撰寫程式碼。新增驗證食譜中附有可以直接使用的起始提示詞。你也會在 Mythex 本身遇到 OAuth:你可以用 Google 註冊,連接 GitHub 來同步儲存庫時會使用 GitHub 的 OAuth,而透過 MCP 連線到 Mythex 的 AI 用戶端,則會經過一個 OAuth 同意頁面。更多資訊請參閱什麼是驗證與什麼是雙因素驗證。

常見問題

用簡單的話來說,什麼是 OAuth?

OAuth 是一種標準方式,讓使用者允許某個應用程式存取他們在另一項服務上的帳號,例如讓排程應用程式讀取他們的 Google 行事曆,而無需把密碼交給該應用程式。使用者核准特定的權限,應用程式則收到一組只能用於這些權限的權杖。

OAuth 和「使用 Google 登入」是同一樣東西嗎?

「使用 Google 登入」是建立在 OAuth 2.0 與 OpenID Connect 之上的。OpenID Connect 是疊加在 OAuth 上的一層,提供了一套標準方式來告訴應用程式使用者是誰,使它成為登入功能。OAuth 本身關注的是授予存取權,OpenID Connect 則讓它變成登入。

什麼是 OAuth 存取權杖?

存取權杖是應用程式傳送給服務 API 的一組憑證,用來證明它已獲得存取授權。它通常有效期很短,並且只限於使用者核准的權限範圍(scope)。如果有核發重新整理權杖(refresh token),應用程式就能在不再次詢問使用者的情況下取得新的存取權杖。

redirect_uri_mismatch 是什麼意思?

這表示你的應用程式在登入時送出的回呼網址,與服務提供者開發者主控台中登記的網址不完全相符。請為應用程式運行的每一個位址,新增完全相同的網址,包括 https、網域、路徑以及結尾的斜線。

OAuth 安全嗎?

只要正確實作,OAuth 2.0 是廣泛使用且安全的:使用搭配 PKCE 的授權碼流程、精確的重新導向網址、state 參數,並把客戶端密鑰與權杖保存在伺服器端。大多數問題都來自實作時的捷徑,因此建議使用維護良好的函式庫。

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 简体中文 繁體中文(香港)