單點登陸的設計,從單域名到多域名(經驗分享)

我的實踐總結,最初的的需求,多個產品線都在同一個根域名下面。ajax

獨立的用戶中心分離,單獨負責用戶登陸和用戶信息獲取、變動等處理邏輯。跨域

第一步,用戶登陸成功,分配給用戶一個memToken(令牌),經過cookie來多個產品線共享,後臺邏輯,生成memToken和用戶id的一個關聯關係存入緩存。瀏覽器

memToken生成邏輯,ip+memCard+時間戳+secret ,經過md5生成,可使用其它方式生成。緩存

第二部,有用戶相關操做經過memToken完成,這裏有一個地方須要注意,須要有公共的處理層解析處理驗證memToken,這樣能夠自由擴展memToken的驗證規則,好比限制某個ip的訪問頻率、或者拉黑某個ip等一些防爬取的邏輯。cookie

上面就是一個最簡易的單點登陸實現,但這時候有一個問題出現了...若是咱們的多個產品不是同一個根域名怎麼辦?設計

這時候其實沒有那麼複雜,只要作一些改變就行了接口

第一步:首先,cookie的存儲仍是能夠是某個根域名也能夠是用戶中心的子域名,但用戶中心須要配置好容許瀏覽器跨域名訪問(這個很關鍵)。ip

第二部:第一種方式能夠經過cookie直接獲取到memToken而後再根據memToken獲取用戶登陸狀態和登陸信息,這裏就要變化了,經過在瀏覽器訪問統一的用戶中心接口,而後接口不是經過參數獲取memToken了,而是改成從cookie獲取(這點變化挺明顯的)也可使用其它方法,總之就是曲線實現cookie的共享。注意:經過ajax跨域訪問必定要記得開啓cookie的信息攜帶(withCredentials: true)..否則會很坑md5

刪除:基於咱們的前面設計memToken和用戶關聯的邏輯,經過接口實現對memToken關聯關係的刪除來實現,cookie同步刪除。ajax跨域

我的的實踐,可能有漏洞也可能有更好的辦法,歡迎討論

qq技術交流羣:208779755

相關文章
相關標籤/搜索