2018-12-01 14:58:22
單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
概述:
很早期的公司,一家公司可能只有一個Server,慢慢的Server開始變多了。每個Server都要進行注冊登錄,退出的時候又要一個個退出。用戶體驗很不好!你可以想象一下,上豆瓣 要登錄豆瓣FM、豆瓣讀書、豆瓣電影、豆瓣日記......真的會讓人崩潰的。我們想要另一種登錄體驗:一家企業下的服務只要一次注冊,登錄的時候只要一次登錄,退出的時候只要一次退出。怎么做?
一次注冊。 一次注冊不難,想一下是不是只要Server之間同步用戶信息就行了?可以,但這樣描述不太完整,后續講用戶注冊的時候詳細說。實際上用戶信息的管理才是SSO真正的難點,只是作為初學者,我們的難點在於實現SSO的技術!我們先討論實現手段。
一次登錄與一次退出。 回頭看看普通商場的故事,什么東西才是保持登錄狀態關鍵的東西?記錄器(session)?那種叫做cookie的紙張?寫在紙張上的ID? 是session里面記錄的信息跟那個ID,cookie只不是記錄ID的工具而已。客戶端持有ID,服務端持有session,兩者一起用來保持登錄狀態。客戶端需要用ID來作為憑證,而服務端需要用session來驗證ID的有效性(ID可能過期、可能根本就是偽造的找不到對於的信息、ID下對應的客戶端還沒有進行登錄驗證等)。但是session這東西一開始是每個server自己獨有的,豆瓣FM有自己的session、豆瓣讀書有自己的session,而記錄ID的cookie又是不能跨域的。所以,我們要實現一次登錄一次退出,只需要想辦法讓各個server的共用一個session的信息,讓客戶端在各個域名下都能持有這個ID就好了。再進一步講,只要各個server拿到同一個ID,都能有辦法檢驗出ID的有效性、並且能得到ID對應的用戶信息就行了,也就是能檢驗ID
[1] 。
多點登錄:https://blog.csdn.net/wufaliang003/article/details/78650075
提問:什么是多點登錄?
回答:以微信為例,可以PC端,phone端同時登錄,同時收發消息。
需要注意的是,一個端只能登錄一個實例,例如同一個QQ號,在pc1上登錄,再到pc2上登錄,后者會把前者踢出,pc1會收到通知“你已在別處登錄xxoo”
提問:什么是消息漫游?
回答:在任何一個終端的任何一個實例登錄qq,都能夠拉取到所有歷史聊天消息,這個就是消息漫游。
微信目前只支持“多點登錄”同時收發在線消息,沒有實現“消息漫游”,潛台詞是:登出手機微信,登錄PC微信,聊天,再登錄手機微信,是看不到歷史消息的。
總結:
“多點登錄”是指多個端同時登錄一個帳號,同時收發消息,關鍵點是:
(1)需要在服務端存儲同一個用戶多個端的狀態與登陸點
(2)發出消息時,要對發送方的多端與接收端的多端,都進行消息投遞
“消息漫游”是指一個用戶在任何端,都可以拉取到歷史消息,關鍵點是:
(1)所有消息存儲在雲端
(2)每個端本地存儲last_msg_id,在登錄時可以到雲端同步歷史消息
(3)雲端存儲所有消息成本較高,一般會對歷史消息時間(或者條數)進行限制
---------------------
原文:https://blog.csdn.net/wufaliang003/article/details/78650075
