身份認證系統(二)多WEB應用的單點登錄
隨著互聯網的發展,web應用的複雜度也一直在提升,慢慢的單一的web應用已經不能滿足複雜的業務需求。如同萬方知識服務平台被分為了萬方智搜、萬方檢測、萬方學術圈、萬方書案等等。當用戶使用這些平台的時候,我們當然不希望用戶在每一個平台都有一個單獨的賬號,不然的話用戶和開發者可能都會有想哭的衝動。所以我們就需要一種用戶登錄一次就可以訪問所有相互信任的應用的系統,這種系統我們就管它叫單點登錄(SSO,Single Sign On)系統。
簡單實現
1、我們不一定能夠保障我們所有的子系統都在同一個頂級域名下。
2、各個站點要分別實現一套登錄認證功能。
鑒權與授權
在討論如何解決僅僅基於cookie實現的單點登錄系統的缺點之前,我們要先討論另一個話題,就是鑒權與授權的分離。
我們一般說的登錄系統指的是:識別用戶身份,然後允許用戶訪問符合其身份許可權的資源。這裡邊其實有兩件事,識別用戶身份這一步我們稱之為鑒權,允許用戶訪問符合其身份許可權的資源這一步我們稱之為授權。在傳統的單站點應用中,我們很少會將鑒權與授權分開來討論,因為當時的登錄功能簡單。可是當代web站點的鑒權與授權都趨於多樣化。比如在鑒權的時候我們可以使用賬號密碼、手機簡訊驗證碼、OAuth、人臉識別等等;同樣不同站點對於授權的需求和許可權的體系都是各不相同的。由於兩者的多樣化與不同,為了降低耦合,提高內聚,我們就有必要將鑒權與授權過程分開看待。
實現單點登錄系統
當我們理解了鑒權與授權的概念之後,我們就很自然的會發現,一般來講當各站點需要同一套認證體系的時候,其實他們的鑒權體系是統一的,而授權過程則可能各不相同。
我們來思考一下現實生活中我們是如何解決類似的問題的:當我們認定一個人是我們公司的員工的時候,我們就會有一個統一的部門製作和發放給我們員工一張工作證;然後員工根據這張工作證上的信息不同,決定了他在公司各個部門中能幹什麼不能幹什麼。
同樣的我們可以製作一個統一認證站點來負責鑒權這步。
1、當用戶訪問我們的一個站點的受保護資源的時候,我們先將用戶重定向到統一認證站點;
2、如果用戶未登錄,則跳到統一認證站點的登錄界面進行登錄,登錄成功之後生成一個用戶的身份票據(就像工作證一樣),然後將票據信息返回給用戶訪問的站點;
3、如果用戶已登錄,則跳過登錄步驟,直接將用戶的身份票據返回給用戶訪問的站點;
4、不同的站點再根據自己的授權體系,決定用戶是否能夠訪問響應的資源。
這樣我們既解決了域名可能不統一的問題,又只需要實現統一分登錄認證功能。
TAG:萬方技術 |