分布式系統-單點登錄


前言: 單點登錄其實是一個概念,主要是為了解決一次登錄,多系統(本系統或外部系統)之間不需要重復登錄的問題,就目前來說,主流的解決方案針對業務場景分為3個方向:

1: 同一公司,同父域下的單點登錄解決方案.

  如[] [] []

  基於cookie開源項目代表: JWT();

      

  需要注意jwt token存儲在哪里的問題:

    首先我們要明確csrf和xss兩種漏洞的不同之處:

      csrf 攻擊無法獲取第三方的 cookie,而是直接使用 cookie進行查詢的時候會自動攜帶 cookie。

      xss攻擊通過代碼注入可以獲取 cookie。需要設置轉義。
    方式一、客戶端使用 cookie直接認證
      需要設置 cookie為 httpOnly,可以防止 xss攻擊。需要設置偽隨機數 X-XSRF-TOKEN,防止csrf攻擊。 (推薦!不 需要處理 xss,並且xsrf 隨機數有完善的應用機制)
    方式二、 客戶端使用 auth授權頭認證,token存儲在 cookie中
      token存儲在 cookie中,需要防止xss攻擊。可以防止 csrf攻擊,因為 csrf只能在請求中攜帶 cookie,而這里必須從 cookie中拿出相應的值並放到 authorization 頭中。
      實際上cookie不能跨站(同源政策)被取出,因此可以避免 csrf 攻擊。(適用於 ajax請求或者 api請求,可以方便的設置 auth頭)
    方式三、可以將token存儲在 localstorage里面
      token存儲在 localstorage里面,需要防止xss攻擊。同理可以防止csrf攻擊。實現方式可以在一個統一的地方復寫請求頭,讓每次請求都在header中帶上這個token,
       當token失效的時候,后端肯定會返回401,這個時候在你可以在前端代碼中操作返回登陸頁面,清除localstorage中的token。(適用於 ajax請求或者 api請求,可以方便的存入 localstorage)
 

2: 同一公司,不同域下的單點登錄解決方案.

  如[] []

  基於中央認證服務器開源項目代表:CAS();

      

 

3: 不同公司之間,不同域下的 第三方登錄功能實現.

  如第三方網站支持qq登錄,微信登錄,微博登錄等;

  基於OAuth2.0協議各大公司自己的支持;

 

  沒有用過,不太了解,不過微信公眾號開發獲取用戶授權好像就是oauth2.0,那首先用戶授權登錄獲取一個到code,拿到code換取access_token,然后就能使用access_token來獲取用戶信息了

 

 

 


免責聲明!

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



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