多系統單點登錄原理(淘寶天貓) (sso)

問題提出

  • 多個系統中,如何做到其中一個系統登錄了,其他的打開其他系統也會成登錄狀態?比如在淘寶登陸了,打開天貓網頁,也會顯示已登錄

跨域獲取登錄狀態

簡單的實現

在開始前我們設定兩個變量:

  • t_token 這個瀏覽器的一個標誌,所有系統內的網站共享同一個t_token
  • access_token 用戶真正的token

要實現上述功能,我們可以使用跨域來機制來實現共享token。這裏我們設置三個系統,兩個客戶端系統,一個sso系統。如圖:
在這裏插入圖片描述

流程如下:
在這裏插入圖片描述

以上就是通過跨域來同步token的流程。

在上面的流程中,會存在一個跨域訪問的問題,一般來說有兩種解決方法:

  • 使用jsonp來獲取
  • 使用CORS機制跨域獲取數據

具體的可以看這兩篇文章:

CORS詳解
跨域訪問數據

淘寶天貓token的獲取(簡化版)

淘寶天貓token的獲取原理是一樣的,但是流程要稍複雜一些。主要是多了幾個重定向的步驟。廢話不多說,直接看時序圖,咱們看圖說話:
注:圖中設計的網址並非是實際的,我只是寫來做例子
在這裏插入圖片描述

可以看到,流程中經過多次的重定向最終使天貓中的cookie中有了t_tokenaccess_token的值

重定向的意義:
實際上我們完全可以通過跨域一次請求就可以把token拿到,就像我們的第一個例子一樣,爲什麼要經過這麼多次重定向呢。個人認爲有以下幾點:

  1. 獲取token的值完全由服務器設置到對應域名的cookie中,在安全方面更有保障
  2. 在重定向中,服務器可以檢測該域名下的請求是否允許重定向,可以進一步保障安全

登錄流程

登錄流程相對來說大家比較熟悉,在此就簡單的寫下流程就行了。在登錄之後可以通過上面的token獲取機制來獲取access_token。
流程如下:
在這裏插入圖片描述

以上講了多系統單點登錄的原理和流程圖,其實要理解這些原理,首先要知道跨域訪問數據以及重定向的處理。這些我文中也放了兩篇優秀的文章,不懂的可以看看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章