前言
在當今數字化的時代,我們每天都在與眾多的網路應用和服務打交道。
無論是工作中的企業級應用,還是生活中的各類社交、娛樂平臺,使用者體驗和安全性都是至關重要的考量因素。而 SSO(Single Sign-On,單點登入)與 OAuth(Open Authorization,開放授權)就是在這個領域中發揮著關鍵作用的兩項重要技術。
OAuth 不是 SSO**,**儘管開發人員經常將兩者混淆。
大多數混淆源於這樣一個事實:像 Google 這樣的 OAuth 提供商允許使用者使用他們的帳戶登入多個應用程式—— 因為 SSO 也這樣做
這些提供商使用 OAuth 作為身份驗證過程的_一部分_,因此當開發人員在身份驗證過程中看到 OAuth 流程時,他們會假定整個過程都在使用 OAuth。
在本文中,我們將闡明 OAuth 和 SSO 之間的區別,並幫助您確定應該使用哪一個。
一、概念介紹
1.1 SSO:單點登入
SSO(Single Sign-On,單點登入)
是一種身份驗證方法,允許使用者透過身份提供商(IdP)進行一次身份驗證即可訪問多個應用程式,它的核心目標是減少使用者在不同系統之間重複輸入使用者名稱和密碼的繁瑣操作,提高使用者體驗和工作效率
如圖,SSO 是抽出登入的模組,App1,App2 只負責應用模組,SSO只負責登入模組。App1,App2 需要登入時,將跳到 SSO 系統,SSO 系統完成登入,其他的應用系統也就隨之登入了。
舉例:想象一下,在一個大型企業中,員工可能需要使用多個內部系統,如郵件系統、辦公自動化系統、財務系統等。如果沒有 SSO,員工每次訪問不同的系統都需要分別輸入使用者名稱和密碼進行登入,這不僅浪費時間,還容易因為記憶多個密碼而出現混淆或遺忘。而有了 SSO,員工只需在一個統一的身份驗證平臺上登入一次,就可以無縫地訪問所有這些相關的系統。
1.2 OAuth:開放授權
OAuth(Open Authorization,開放授權)
是一種授權協議,它允許使用者授權第三方應用訪問他們在某一服務提供商處的某些特定資源,而無需將自己的使用者名稱和密碼提供給第三方應用
舉例:比如你想使用一個第三方的圖片編輯應用來處理你在某雲端儲存服務上的照片。透過 OAuth,你可以在不向圖片編輯應用透露你的雲端儲存服務密碼的情況下,授權它訪問你指定的照片資源。這樣既保證了資源的安全性,又方便了第三方應用的使用。
二、SSO 技術原理
2.1 SSO 核心構成
中心認證伺服器
SSO 系統通常包含一箇中心認證伺服器,它負責對使用者的身份進行驗證。當用戶首次訪問某個應用系統時,該應用系統會將使用者重定向到中心認證伺服器進行登入
票據(Ticket)機制
使用者在中心認證伺服器成功登入後,伺服器會生成一個包含使用者身份資訊的票據(通常是一個加密的字串),並將該票據返回給使用者的瀏覽器。使用者的瀏覽器會將這個票據儲存在 Cookie 中或者作為 URL 引數傳遞給後續訪問的其他應用系統。
應用系統驗證
當用戶訪問其他應用系統時,這些應用系統會從使用者的請求中獲取票據,並將其傳送回中心認證伺服器進行驗證。如果票據驗證透過,應用系統就會認為使用者已經透過身份驗證,允許使用者訪問相應的資源。
2.2 實現原理
SSO的實現原理如下圖所示:
使用者首次訪問一個需要身份驗證的應用程式或系統。
應用程式或系統將使用者重定向到IdP,使用者在IdP上進行身份驗證,通常是輸入使用者名稱和密碼。
IdP向用戶頒發令牌Token,該令牌包含有關使用者身份驗證的資訊。
使用者被重定向回原始的應用程式或系統,並將令牌傳遞給該應用程式或系統,應用程式或系統使用令牌來驗證使用者身份,並授予使用者訪問許可權。
如果使用者訪問其他需要身份驗證的應用程式或系統,該應用程式或系統將使用相同的令牌到IdP進行使用者身份驗證。
2.3 SSO 的應用場景
企業內部應用整合
對於大型企業來說,擁有眾多的內部應用系統,如 ERP、CRM、HR 等。透過實施 SSO,可以大大提高員工的工作效率,減少因密碼管理問題帶來的工作中斷
跨域聯合登入
在一些跨組織或跨域的場景中,SSO 也可以發揮重要作用。例如,多個企業之間進行合作,需要共享某些應用資源,透過建立聯合 SSO 系統,可以實現使用者在不同企業域之間的無縫登入
雲服務整合
隨著雲端計算的發展,許多企業將應用部署在雲平臺上。雲服務提供商可以提供 SSO 解決方案,使得企業使用者可以方便地訪問多個雲服務應用。
三、OAuth 技術原理
3.1 OAuth 授權流程
**角色劃分:**OAuth 涉及三個主要角色,分別是資源所有者(通常是使用者)、資源伺服器(儲存使用者資源的伺服器)和客戶端應用(想要訪問使用者資源的第三方應用)。
授權流程:
使用者首先訪問客戶端應用,客戶端應用向用戶請求授權訪問其在資源伺服器上的某些資源;
使用者同意授權後,客戶端應用會將使用者重定向到資源伺服器的授權頁面;
使用者在授權頁面上確認授權,資源伺服器會生成一個授權碼(Authorization Code)並返回給客戶端應用;
客戶端應用使用授權碼向資源伺服器換取訪問令牌(Access Token);
客戶端應用使用訪問令牌向資源伺服器請求訪問使用者的資源。
3.2 OAuth 2.0
目前最新的版本為 OAuth 2.0 版,主要有四個主體:
授權伺服器,負責頒發訪問令牌(Access Token),Authing 是授權伺服器。
資源所有者,應用的使用者是資源的所有者,授權其他人訪問其資源。
呼叫方,呼叫方請求獲取訪問令牌(Access Token),經過使用者授權後,Authing 為其頒發訪問令牌(Access Token)。呼叫方可以攜帶訪問令牌(Access Token)到資源伺服器訪問使用者的資源。
資源伺服器,接受訪問令牌(Access Token),然後驗證它的被賦予的許可權專案,最後返回資源。
3.3 OAuth 2.0 授權模式
OAuth 2.0 有四種授權模式:
授權碼(Authorization-code):指的是第三方應用先申請一個授權碼,然後再用該碼獲取令牌。該方式是最常用的流程,安全性也最高,它適用於那些有後端的 Web 應用。
隱藏式(Implicit):該模式面向純前端應用,App 認證伺服器只返還一次授權碼。
密碼式(Password):允許客戶端或者第三方應用,直接使用使用者的賬號密碼進行令牌的獲取。該方式在使用者端應用廣泛。
憑證式(Client credentials):適用於沒有前端的命令列應用,即在命令列下請求令牌。該方式操作簡單,只需要傳送客戶請求,即可獲得訪問令牌(Access Token),但這種方式非常不安全,需要對客戶端完全信任,且客戶端本身需要具備安全性。
3.4 OAuth 的應用場景
第三方應用授權
如前面提到的圖片編輯應用訪問雲端儲存照片的例子,OAuth 為各種第三方應用提供了一種安全、便捷的授權方式,讓使用者可以自由選擇授權哪些應用訪問自己的資源
社交網路平臺開放 API
社交網路平臺通常透過 OAuth 允許第三方開發者基於其平臺開發應用。這些應用可以在使用者授權的情況下獲取使用者在社交網路上的部分資訊,如釋出動態、獲取好友列表等,從而豐富了社交網路平臺的生態
移動應用授權
在移動應用領域,OAuth 也被廣泛應用。例如,一些移動支付應用需要訪問使用者的銀行賬戶資訊,透過 OAuth 可以在保證安全的前提下獲取使用者的授權。
四、優勢與挑戰
4.1 SSO 的優勢與挑戰
SSO 的優勢
提高使用者體驗:使用者只需記住一個使用者名稱和密碼,就可以訪問多個應用系統,減少了記憶多個密碼的負擔和登入操作的繁瑣。
增強安全性:集中的身份驗證和授權管理可以更好地保證使用者身份的安全性。中心認證伺服器可以採用更嚴格的安全策略,如多因素認證、密碼策略強化等。
簡化管理:對於企業的 IT 管理員來說,SSO 可以簡化使用者賬戶的管理工作。只需在中心認證伺服器上進行一次使用者賬戶的建立、修改或刪除操作,就可以同步到所有關聯的應用系統中。
然而,SSO 也面臨一些挑戰:
單點故障風險:如果中心認證伺服器出現故障,將導致所有依賴它的應用系統都無法進行身份驗證,影響麵較大。
相容性問題:不同的應用系統可能採用不同的技術架構和協議,實現 SSO 時需要解決這些系統之間的相容性問題。
安全風險集中:由於中心認證伺服器儲存了大量使用者的身份資訊,一旦被攻擊,可能導致大規模的資訊洩露。
4.2 OAuth 的優勢與挑戰
OAuth 的優勢:
資源安全性高:使用者無需將自己的密碼提供給第三方應用,降低了密碼洩露的風險。即使第三方應用被攻擊,也不會影響到使用者在資源伺服器上的密碼安全
靈活的授權控制:使用者可以根據自己的需求,選擇授權給第三方應用訪問哪些資源以及訪問的許可權級別,具有很高的靈活性
促進應用生態發展:OAuth 為第三方應用的開發提供了便利,推動了各種創新應用的涌現,豐富了網際網路的應用生態。
OAuth 也存在一些挑戰:
使用者理解和操作複雜度:對於普通使用者來說,OAuth 的授權流程可能相對複雜,需要一定的理解和操作能力。一些使用者可能因為不理解授權的含義而隨意授權,導致潛在的安全風險。
授權濫用風險:雖然使用者可以控制授權範圍,但一些不良的第三方應用可能會透過欺騙或誘導使用者進行過度授權,從而獲取更多的使用者資訊。
技術實現複雜性:對於開發者來說,實現 OAuth 授權流程需要處理多個步驟和互動,涉及到加密、令牌管理等複雜的技術操作,增加了開發的難度和成本。
五、未來發展趨勢
5.1 SSO 的發展趨勢
與多因素認證結合:隨著安全需求的不斷提高,SSO 系統將越來越多地與多因素認證技術相結合,如指紋識別、面部識別、動態口令等,進一步增強使用者身份驗證的安全性。
適應移動化和雲化趨勢:隨著移動辦公和雲端計算的普及,SSO 技術需要更好地適應移動裝置和雲環境的特點,提供更加便捷、安全的身份驗證和授權服務。
跨組織和跨平臺 SSO:未來,不同組織之間、不同平臺之間的 SSO 將會得到更廣泛的應用,促進資訊的共享和業務的協同。
5.2 OAuth 的發展趨勢
更加細化的授權粒度:爲了更好地保護使用者資源,OAuth 將會朝著更加細化的授權粒度發展,允許使用者對資源的訪問進行更精確的控制,例如可以按時間、次數、操作型別等進行授權。
與區塊鏈技術結合:區塊鏈的去中心化和不可篡改特性可以為 OAuth 提供更安全、可靠的授權和身份驗證機制,有望在未來出現更多基於區塊鏈的 OAuth 應用。
人工智慧在授權決策中的應用:利用人工智慧技術,可以根據使用者的行為模式和歷史資料,自動為使用者生成更合理的授權建議,提高授權的準確性和安全性。
總結
總之,SSO 和 OAuth 作為重要的身份驗證和授權技術,在提升使用者體驗、保障資訊保安、促進應用生態發展等方面發揮著不可替代的作用。隨著技術的不斷進步和應用場景的不斷拓展,它們也將不斷髮展和完善,為我們的數字化生活帶來更多的便利和安全保障。無論是企業的資訊化建設,還是網際網路應用的開發,都需要深入理解和合理應用這兩項技術,以適應日益複雜的網路環境和使用者需求。