單點登錄實現原理(SSO)


簡介

  1. 單點登錄是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統的保護資源,若用戶在某個應用系統中進行注銷登錄,所有的應用系統都不能再直接訪問保護資源,像一些知名的大型網站,如:淘寶與天貓、新浪微博與新浪博客等都用到了這個技術。

原理

  1. 單點登錄

    1. 有一個獨立的認證中心,只有認證中心才能接受用戶的用戶名和密碼等信息進行認證,其他系統不提供登錄入口,只接受認證中心的間接授權。間接授權通過令牌實現,當用戶提供的用戶名和密碼通過認證中心認證后,認證中心會創建授權令牌,在接下來的跳轉過程中,授權令牌作為參數發送給各個子系統,子系統拿到令牌即得到了授權,然后創建局部會話。
    2. 示例:
      單點登錄的原理
      下面對上圖進行解釋:
      1. 當用戶還沒進行用戶登錄的時候

        1. 用戶去訪問系統1的保護資源 ,系統1檢測到用戶還沒登錄,跳轉至SSO認證中心,SSO認證中心也發現用戶沒有登錄,就跳轉到用戶至認證中心的登錄頁面
        2. 用戶在登錄頁面提交用戶相應信息后,認證中心會校驗用戶信息,如果用戶信息正確的話認證中心就會創建與該用戶的全局會話(全局會話過期的時候,用戶就需要重新登錄了。全局會話中存的信息可能有令牌,用戶信息,及該在各個系統的一些情況),同時創建授權令牌,然后進行下一步,否則認證中心給出提示(用戶信息有誤),待用戶再次點擊登錄的時候,再一次進行校驗用戶信息
        3. 認證中心帶着令牌跳轉到用戶最初請求的地址(系統1),系統1拿到令牌后去SSO認證中心校驗令牌是否有效,SSO認證中心校驗令牌,若該令牌有效則進行下一步
        4. 注冊系統1,然后系統1使用該令牌創建和用戶的局部會話(若局部會話過期,跳轉至SSO認證中心,SSO認證中心發現用戶已經登錄,然后執行第3步),返回受保護資源
      2. 用戶已經通過認證中心的認證后
        用戶訪問系統2的保護資源,系統2發現用戶未登錄,跳轉至SSO認證中心,SSO認證中心發現用戶已經登錄,就會帶着令牌跳轉回系統2,系統2拿到令牌后去SSO認證中心校驗令牌是否有效,SSO認證中心返回有效,注冊系統2,系統2使用該令牌創建與用戶的局部會話,返回受保護資源。

      3. 如果系統1的局部會話存在的話,當用戶去訪問系統1的保護資源時,就直接返回保護資源,不需要去認證中心驗證了

    局部會話存在,全局會話一定存在;全局會話存在,局部會話不一定存在;全局會話銷毀,局部會話必須銷毀
    如果在校驗令牌過程中發現客戶端令牌和服務器端令牌不一致或者令牌過期的話,則用戶之前的登錄就過期了,用戶需要重新登錄

    關於令牌可參考:基於跨域單點登錄令牌的設計與實現

  2. 單點注銷

    1. 在一個子系統中注銷,全局會話也會被注銷,所有子系統的會話都會被注銷
    2. 示例:
      單點注銷原理
      用戶向系統1發出注銷請求,系統1根據用戶與系統1建立的會話id從會話中拿到令牌,向SSO認證中心發起注銷請求,認證中心校驗令牌有效,會銷毀全局會話,同時取出此令牌注冊的系統地址,認證中心向所有注冊系統發出注銷請求,各系統收到注銷請求后銷毀局部會話,認證中心引導用戶跳轉值登錄頁面。
  3. 整體陳述

    1. 單點登錄涉及SSO認證中心與多個子系統,子系統與SSO認證中心需要通信(交換令牌、校驗令牌及發起注銷請求等),子系統中包含SSO的客戶端,SSO認證中心是服務端
    2. 認證中心與客戶端通信可通過 httpClient、web service、rpc、restful api(url是其中一種) 等實現
    3. 客戶端與服務器端的功能
      1. 客戶端:
        1. 攔截子系統未登錄用戶請求,跳轉至sso認證中心
        2. 接收並存儲sso認證中心發送的令牌
        3. 與服務器端通信,校驗令牌的有效性
        4. 建立局部會話
        5. 攔截用戶注銷請求,向sso認證中心發送注銷請求
        6. 接收sso認證中心發出的注銷請求,銷毀局部會話
      2. 服務器端:
        1. 驗證用戶的登錄信息
        2. 創建全局會話
        3. 創建授權令牌
        4. 與客戶端通信發送令牌
        5. 校驗客戶端令牌有效性
        6. 系統注冊
        7. 接收客戶端注銷請求,注銷所有會話

本文參考:單點登錄原理與簡單實現
本文有些地方可能寫的不對,如果發現有啥錯誤的話,歡迎賜教,不勝感激。
如需轉載請加上出處:http://www.cnblogs.com/zhuchenglin/p/8968530.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM