淺析單點登錄,以及不同二級域名下的SSO實現


  一家公司有多個產品線,就可能要有多個子域名,下頭以baidu域名為例,a.baidu.com, b.baidu.com。com 是頂級域名,baidu 就是一個二級域名,a和b就是子域名。

當用戶在a產品線上登錄了系統,此時切換到b產品,為了增加用戶體驗,不必再讓用戶登錄一次b。所以單點登錄就出來了。

  一般的實現就是增加一個passport.baidu.com,專門搞登錄的中控服務。

  當用戶第一次登錄 baidu域下,比如a產品。此時先跳轉到passport下進行登錄,登錄成功以后,passport生成一個token,在session服務中插入登錄信息,同時也將其種在cookie里,就放在 .baidu.com域下,當然這個token會和session中的登錄信息有聯系。

當用戶登錄b產品線時,檢測cookie下這個token在passport的session服務中是否存在,如果存在就認為該用戶已經登錄過在線狀態。 

  還有一種需要面對的情況,比如公司還有一個二級域名,舉例 hao123.com,這下二級域名不一樣了。跨域了,cookie就不能被passport直接拿到了。這怎么辦呢?

  可以這樣處理,當用戶第一次在passport下登錄時,生成的這個token,  在passport下跨域去請求 hao123.com,讓 hao123.com服務去把這個token種在自己域下cookie里。當用戶登錄成功 a產品以后,隨后去訪問了 hao123.com, hao123.com 域下的token被passport的session服務檢測,發現ok,就返回給 hao123.com帳號信息。

  以上的實現很容易當然也很粗糙,比如某一個產品線下用戶的cookie被盜了,這個token被人用了,這個人就可以隨意使用你的帳號在xxx下所有產品線瀏覽。

  這就需要更安全的機制。各個產品線也有各自的token生成。

  可以用瀏覽器觀察下登錄百度passport的現象:

  chrome瀏覽器登錄(在登錄passport時,勾選保存log,避免請求日志刷新沒了。搜索hao123關鍵字)。

  發現這個跨域請求是利用圖片的src屬性,請求hao123站點。把加密的token發到hao123,hao123響應,setcookie把token放到hao123域下。(這里說的token即是百度的bduss)。

       

 


免責聲明!

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



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