公開客戶端與機密客戶端有什麼區別?
本文揭示了在 OAuth 中公開客戶端和機密客戶端的區別,以 Logto 應用程序為例。
當使用 Logto 創建一個應用程序時,你會注意到有幾種不同的應用程序類型可以選擇,包括單頁應用程序 (SPA)、原生應用程序和傳統 Web 應用程序。直觀地理解,從名字就可以看出,原生應用程序運行在常見的操作系統上,比如手機設備。但是,什麼是 SPA 和傳統 Web 應用程序呢?為什麼我們需要區分這些不同類型的應用程序?這篇文章將揭示這些問題的答案。
開始之前,我們需要對一些概念進行簡單的介紹。
什麼是 OAuth?
OAuth 是一個開放標準的授權代理,通常用作互聯網用戶授權網站或應用程序訪問其在其他網站上的信息,而不需要提供密碼的一種方式。
在最近十年中,它逐漸成為標準授權過程並被谷歌、Meta、微軟等大多數公司廣泛接受。目前使用的版本是 OAuth 2.0。
在 OAuth 的背景下,我們之前提到的應用程序被稱為客戶端。只要獲得資源所有者(通常是最終用戶)的授權,它們可以請求受保護的資源。
公開客戶端和機密客戶端
OAuth 根據客戶端保持客戶端憑據機密性的能力,定義了兩種類型的客戶端。
機密客戶端
能夠保持其憑據機密性的客戶端(例如,實施在具有受限客戶端憑據訪問權限的安全服務器上的客戶端)或者能夠通過其他方式進行安全客戶端身份驗證的客戶端。
公開客戶端
無法保持其憑據機密性的客戶端(例如,運行在資源所有者設備上的客戶端,如原生應用程序或基於 Web 的應用程序),並且也無法通過其他方式安全地進行客戶端身份驗證。
SPA、原生應用程序和傳統 Web 應用程序
有了上述基礎知識,我們來看看在 Logto 的上下文中,SPA、原生應用程序和傳統 Web 應用程序意味著什麼,以及它們是否被認為是公開客戶端或機密客戶端。
SPA
SPA 的客戶端代碼從 Web 服務器下載並在資源所有者設備上的用戶代理(如 Web 瀏覽器)中執行。協議數據和憑據對資源所有者而言是容易獲得的(通常也是可見的)。
原生應用程序
原生應用程序被安裝並在資源所有者的設備上執行。協議數據和憑據對資源所有者是可獲得的。通常假定應用程序中包含的任何客戶端身份驗證憑據都可以被提取。
傳統 Web 應用程序
傳統 Web 應用程序是一種運行在 Web 服務器上的客戶端。資源所有者通過 HTML 用戶界面在其設備上的用戶代理中訪問客戶端。客戶端憑據以及發放給客戶端的任何訪問令牌都存儲在 Web 服務器上,資源所有者無法查看或訪問。
所以,我們可以清楚地看到 SPA 和原生應用程序是公開客戶端,而傳統 Web 應用程序是機密客戶端。
你可能會發現,在 Logto 中創建 SPA 或原生應用程序時沒有應用程序密鑰,而傳統 Web 應用程序同時有應用程序 ID 和應用程序密鑰。這是因為公開客戶端的密鑰無法保證安全。