隱式流程與授權碼流程:為什麼隱式流程已死?
為什麼在 OAuth 2.0 中有 "授權碼流程" ,而我們已經有了 "隱式流程"?讓我們深入了解這兩種授權類型的詳細信息,並找出為什麼你應該避免使用隱式流程。
為什麼在 OAuth 2.0 中有 "授權碼流程" ,而我們已經有了 "隱式流程"?讓我們深入了解這兩種授權類型的詳細信息,並找出為什麼你應該避免使用隱式流程。
授權碼流程 和 隱式流程 是 OAuth 2.0 中最常用的兩種授權類型,使 web 應用程式能夠實現安全高效的用戶授權。兩種流程都實現了一個授權過程,允許用戶授予應用程式訪問權限而不直接暴露其憑證。隱式流程最初是為了解決瀏覽器限制而開發的,但隨著現代 web 技術的出現,許多開發者更傾向於使用授權碼流程,因為它具有更強的安全功能。
在本文中,我們將探討這兩種授權類型之間的差異,並解釋為什麼應該避免使用隱式流程,而選擇授權碼流程。
在我們深入了解這兩種授權類型之前,讓我們首先了解 OAuth 2.0 是什麼,以及為什麼它對現代 web 應用程式至關重要。
當人們談論 OAuth 時,我們通常指的是 OAuth 2.0,被稱為 "開放授權",是一個被建立的協議,使網站或應用程式能夠代表用戶使用其他 web 服務的資源。它在 2012 年取代了 OAuth 1.0,並從此成為數位授權的廣泛接受標準。OAuth 2.0 的設計目的是提供對用戶的控制訪問權限,允許客戶端應用程式在不披露用戶的登錄詳細資訊的情況下,與代表用戶的資源進行特定權限的互動。
雖然主要在 web 環境中使用,但 OAuth 2.0 的框架也延伸到各種客戶端形式。這包括基於瀏覽器的應用程式、伺服器端的 web 應用程式、原生或行動應用程式,甚至是互聯設備,詳細說明了在這些平台上管理委派訪問的方法。它引入了 "授權類型" 的概念,以定義客戶端應用程式、用戶和授權伺服器之間的授權過程。這些授權類型用於確定客戶端應用程式如何獲得訪問用戶資源的訪問令牌。在 OAuth 2.0 中最常見的授權類型有:
隱式流程是一種簡化的 OAuth 2.0 流程,其中訪問令牌直接返回給客戶端在重定向 URI 中,而不需要進行額外的步驟來交換授權碼獲取令牌。它最初是為了針對無法通過瀏覽器限制向令牌端點發出伺服器端請求的 web 應用程式而設計的。
隱式流程存在若干安全漏洞:
由於這些安全問題,現代 web 應用程式中不再推薦使用隱式流程。相反,使用帶有 PKCE (驗證碼交換校驗)的授權碼流程是實現安全用戶授權的首選方案。
授權碼流程,另一方面,是一種更安全的 OAuth 2.0 流程,其將授權過程分為兩個步驟:客戶端應用程式首先從授權伺服器獲取一個授權碼,然後用這個碼交換來獲取訪問令牌。此流程最初是為伺服器端的 web 應用程式設計的,可以安全存儲客戶端憑證並管理訪問令牌。隨著 PKCE 擴展的引入,授權碼流程現在也可以用於基於瀏覽器的應用程式。
了解更多有關 PKCE 流程的資訊。
| 方面 | 授權碼流程 | 隱式流程 |
|---|---|---|
| 令牌交付 | 訪問令牌是通過安全請求交付給客戶端 | 訪問令牌直接在 URL 碎片中交付給客戶端 |
| 安全等級 | 高(令牌不在瀏覽器中暴露) | 低(令牌暴露在瀏覽器中) |
| 使用案例 | 伺服器端和帶有 PKCE 的基於瀏覽器的應用程式 | 僅限基於瀏覽器的應用程式 |
| 現代使用 | 推薦用於所有型態的應用程式 | 不推薦並且應該避免 |
回答是:能。
授權碼流程引入了一個附加步驟來交換授權碼以獲得訪問令牌,這顯著降低了令牌曝露的風險。
如果你在業務中現在使用隱式流程,切換到帶有 PKCE 的授權碼流程可以為你和你的用戶提供更好的安全性。我們理解進行身份系統遷移和管理可能是繁瑣且昂貴的,但增強的安全性和合規性的好處完全值得這樣的努力。