OAuth 2.0 總覽
OAuth 2.0 是目前最廣泛使用的授權框架,由 RFC 6749 定義。它讓第三方應用程式能夠以安全、標準化的方式存取使用者資源,而不需要讓使用者交出帳號密碼。
在 OAuth 2.0 之前,如果你想讓某個應用程式(例如印表服務)存取你的 Google 相片,唯一的方式是把你的 Google 帳號密碼直接給它。這帶來幾個問題:
- 應用程式可以用你的身分做任何事,不只是讀相片
- 你無法單獨撤銷這個應用程式的存取權,只能改密碼
- 若應用程式遭到入侵,你的密碼就洩漏了
OAuth 2.0 的核心概念是委派授權(Delegated Authorization):使用者授權第三方應用程式在有限範圍內存取資源,不需要共享密碼。
四個核心角色
Section titled “四個核心角色”| 角色 | 說明 | 範例 |
|---|---|---|
| Resource Owner | 資源擁有者,通常是使用者 | 你 |
| Resource Server | 存放資源的伺服器 | Google Photos API |
| Client | 想要存取資源的應用程式 | 印表服務 App |
| Authorization Server | 核發 Token 的伺服器 | Google 登入系統 |
Access Token
Section titled “Access Token”Access Token 是授權的憑證,Client 持有 Token 就能存取 Resource Server 上的特定資源。Token 通常是短效的(數分鐘到數小時),失效後需要重新取得或用 Refresh Token 更新。
Scope 定義了這次授權的範圍,例如 read:photos 只允許讀取相片,無法刪除或上傳。使用者在授權頁面看到的「此應用程式將能夠…」就是 scope 的描述。
授權流程(Grant Types)
Section titled “授權流程(Grant Types)”OAuth 2.0 定義了多種授權流程,適用不同的應用情境:
- Authorization Code:最常見,適合有後端的 Web 應用
- Authorization Code + PKCE:適合行動 App 與 SPA
- Client Credentials:適合機器對機器(M2M)
- Device Code:適合無瀏覽器的裝置(如 Smart TV)
- Refresh Token:用來更新即將過期的 Access Token
與 OAuth 2.1 的關係
Section titled “與 OAuth 2.1 的關係”OAuth 2.1 並非新版本,而是 OAuth 2.0 的安全性整合——它把過去十年的最佳實踐與安全修補整合進一份文件,同時移除了不安全的流程(如 Implicit Flow、Resource Owner Password Credentials)。