隨着互聯網的發展,web應用的複雜度也一直在提高,慢慢的單一的web應用已經不能知足複雜的業務需求。例如百度的搜索、新聞、百科、貼吧,其實本質上都是不一樣的網站。當用戶使用這些平臺的時候,咱們固然不但願用戶在每個平臺都有一個單獨的帳號,否則的話用戶和開發者可能都會有想哭的衝動。因此咱們就須要一種用戶登陸一次就能夠訪問全部相互信任的應用的系統,這種系統咱們就管它叫單點登陸(sso,Single Sign On)系統。html
在本系列的上一章的最後一節中咱們介紹了基於cookie的認證模式,基於這種模式咱們其實很容易實現一個單點登陸系統。通常咱們同一個系統的多個站點會在同一個頂級域名下(如,.baidu.com.cn),這樣咱們就可讓這些站點共享同一個頂級域名的cookie。這樣只要一個站點登陸了,全部的站點就均可以拿到登陸認證信息。可是這種作法有兩個缺點:web
一、咱們不必定可以保障咱們全部的子系統都在同一個頂級域名下。cookie
二、各個站點要分別實現一套登陸認證功能。網站
在討論如何解決僅僅基於cookie實現的單點登陸系統的缺點以前,咱們要先討論另外一個話題,就是鑑權與受權的分離。ui
咱們通常說的登陸系統指的是:識別用戶身份,而後容許用戶訪問符合其身份權限的資源。這裏邊其實有兩件事,識別用戶身份這一步咱們稱之爲鑑權,容許用戶訪問符合其身份權限的資源這一步咱們稱之爲受權。在傳統的單站點應用中,咱們不多會將鑑權與受權分開來討論,由於當時的登陸功能簡單。但是當代web站點的鑑權與受權都趨於多樣化。好比在鑑權的時候咱們可使用帳號密碼、手機短信驗證碼、OAuth、人臉識別等等;一樣不一樣站點對於受權的需求和權限的體系都是各不相同的。因爲二者的多樣化與不一樣,爲了下降耦合,提升內聚,咱們就有必要將鑑權與受權過程分開看待。htm
當咱們理解了鑑權與受權的概念以後,咱們就很天然的會發現,通常來說當各站點須要同一套認證體系的時候,其實他們的鑑權體系是統一的,而受權過程則可能各不相同。blog
咱們來思考一下現實生活中咱們是如何解決相似的問題的:當咱們認定一我的是咱們公司的員工的時候,咱們就會有一個統一的部門製做和發放給咱們員工一張工做證;而後員工更具這張工做證上的信息不一樣,決定了他在公司各個部門中能幹什麼不能幹什麼。資源
一樣的咱們能夠製做一個統一認證站點來負責鑑權這步。當用戶訪問咱們的一個站點的受保護資源的時候,咱們先將用戶重定向到統一認證站點;若是用戶未登陸,則跳到統一認證站點的登陸界面進行登陸,登陸成功以後生成一個用戶的身份票據(就像工做證同樣),而後將票據信息返回給用戶訪問的站點;若是用戶已登陸,則跳過登陸步驟,直接將用戶的身份票據返回給用戶訪問的站點;而後不一樣的站點再根據本身的受權體系,決定用戶是否可以訪問響應的資源。開發
這樣咱們既解決了域名可能不統一的問題,又只須要實現統一分登陸認證功能。域名
轉:https://www.cnblogs.com/meibaorui/p/9176772.html