單點登陸

1、單系統登陸機制
        web應用採用b/s架構,http做爲通訊協議。http是無狀態協議,瀏覽器的每一次請求,服務器會獨立處理,
        既然http協議無狀態,服務器和瀏覽器之間經過會話機制來將屢次請求進行關聯。瀏覽器第一次請求服務器,服務器建立一個會話,並將會話的id做爲響應的一部分發送給瀏覽器,瀏覽器存儲會話id,
        並在後續第二次和第三次請求中帶上會話id,服務器取得請求中的會話id就知道是否是同一個用戶了。服務器在內存中保存會話對象,瀏覽器一般採用cookie保存會話id。
        有了會話機制,登陸狀態就好明白了,咱們假設瀏覽器第一次請求服務器須要輸入用戶名與密碼驗證身份,服務器拿到用戶名密碼去數據庫比對,正確的話說明當前持有這個會話的用戶是合法用戶,應該將這個會話標記爲「已受權」或者「已登陸」等等之類的狀態,
         每次請求受保護資源時都會檢查會話對象中的登陸狀態,只有已完成登陸的會話才能訪問,登陸機制所以而實現。php

2、多系統的複雜性
        但隨着企業的發展,用到的系統隨之增多,運營人員在操做不一樣的系統時,須要屢次登陸,並且每一個系統的帳號都不同,這對於運營人員
        來講,很不方便。因而,就想到是否是能夠在一個系統登陸,其餘系統就不用登陸了呢。
         單系統登陸解決方案的核心是cookie,cookie攜帶會話id在瀏覽器與服務器之間維護會話狀態。但cookie是有限制的,這個限制就是cookie的域(一般對應網站的域名),
        瀏覽器發送http請求時會自動攜帶與該域匹配的cookie,而不是全部cookie
        既然這樣,爲何不將web應用羣中全部子系統的域名統一在一個頂級域名下,例如「*.baidu.com」,而後將它們的cookie域設置爲「baidu.com」,這種作法理論上是能夠的,甚至早期不少多系統登陸就採用這種同域名共享cookie的方式。
  然而,可行並不表明好,共享cookie的方式存在衆多侷限。首先,應用羣域名須要統一;其次,應用羣各系統使用的技術(至少是web服務器)要相同,否則cookie的key值(tomcat爲JSESSIONID)不一樣,沒法維持會話,共享cookie的方式是沒法實現跨語言技術平臺登陸的,好比java、php、.net系統之間;
        第三,cookie自己不安全。
  所以,咱們須要一種全新的登陸方式來實現多系統應用羣的登陸,這就是單點登陸。java

3、單點登陸
        什麼是單點登陸?單點登陸全稱Single Sign On(如下簡稱SSO),在多個應用系統中,只須要登陸一次,就能夠訪問其餘相互信任的應用系統。
        包括單點登陸與單點註銷兩部分。
       一、登陸
  相比於單系統登陸,sso須要一個獨立的認證中心,只有認證中心能接受用戶的用戶名密碼等安全信息,其餘系統不提供登陸入口,只接受認證中心的間接受權。間接受權經過令牌實現,sso認證中心驗證用戶的用戶名密碼沒問題,
        建立受權令牌,在接下來的跳轉過程當中,受權令牌做爲參數發送給各個子系統,子系統拿到令牌,即獲得了受權,能夠藉此建立局部會話,局部會話登陸方式與單系統的登陸方式相同。這個過程,也就是單點登陸的原理,單點登陸流程簡介以下:
        1 用戶訪問系統1的受保護資源,系統1發現用戶未登陸,跳轉至sso認證中心,並將本身的地址做爲參數
        2 sso認證中心發現用戶未登陸,將用戶引導至登陸頁面
        3 用戶輸入用戶名密碼提交登陸申請
        4 sso認證中心校驗用戶信息,建立用戶與sso認證中心之間的會話,稱爲全局會話,同時建立受權令牌
        5 sso認證中心帶着令牌跳轉會最初的請求地址(系統1)
        6 系統1拿到令牌,去sso認證中心校驗令牌是否有效
        7 sso認證中心校驗令牌,返回有效,註冊系統1
        8 系統1使用該令牌建立與用戶的會話,稱爲局部會話,返回受保護資源
        9 用戶訪問系統2的受保護資源
        10 系統2發現用戶未登陸,跳轉至sso認證中心,並將本身的地址做爲參數
        11 sso認證中心發現用戶已登陸,跳轉回系統2的地址,並附上令牌
        12 系統2拿到令牌,去sso認證中心校驗令牌是否有效
        13 sso認證中心校驗令牌,返回有效,註冊系統2
        14 系統2使用該令牌建立與用戶的局部會話,返回受保護資源web

二、註銷
        單點登陸天然也要單點註銷,在一個子系統中註銷,全部子系統的會話都將被銷燬。                單點註銷流程以下:
        1 用戶向系統1發起註銷請求
        2 系統1根據用戶與系統1創建的會話id拿到令牌,向sso認證中心發起註銷請求
        3 sso認證中心校驗令牌有效,銷燬全局會話,同時取出全部用此令牌註冊的系統地址
        4 sso認證中心向全部註冊系統發起註銷請求
        5 各註冊系統接收sso認證中心的註銷請求,銷燬局部會話
        6 sso認證中心引導用戶至登陸頁面數據庫

相關文章
相關標籤/搜索