1、為什麼要有單點登入。
以往登入乙個系統使用session登入,但是隨著系統的完善和優化,模組與模組之間可能存放在不同的伺服器,中間使用**伺服器來分發例如:nginx。
但是多伺服器是如何共享使用者資訊的呢?
答案就是單點登入。
2、解決方式。
這裡的單點登陸在nginx集群的時候最常用
解決方式:
1、session同步,缺點在每乙個伺服器上都存在乙個session,每個伺服器的session都需要同步,但是這種會占用大量的資源。而且在不同的系統之間是不可能共享同乙個session的,例如:**和天貓。並且在使用同步session的時候,如果這時候併發訪問量比較大的時候,session又可能還沒有完全同步,但是請求已經過來,也容易造成資料汙染。
2、第三方儲存介質。
首先客戶端發出請求給伺服器,假設這裡使用了分布式集群開發,三個伺服器執行的是相同的業務邏輯的war包(可以是不同業務)。
假設客戶端做了登入操作,傳送給**伺服器nginx,通過負載均衡的演算法,將登入請求**到了伺服器1,伺服器1將資料去資料庫校驗,然後將使用者資料傳送給store,並以key-value的形式儲存,key通常會採用uui的方式生成,而value就是實際的使用者資料。
當儲存介質store儲存完使用者資料後,伺服器會將key實際上可以看成是乙個uuid返回給客戶端,客戶端就可以將這個key儲存起來了,一般會儲存在cookie,現在隨著h5的興起,locatstorage和sessionstorage也會用來儲存這個key。
假設客戶端再次傳送請求給nginx,nginx將請求**給了伺服器2,這時候通過客戶端之前儲存的key,就可以去儲存介質store中取出儲存的使用者資料了。就實現了單點登入,實現了跨伺服器共享資料。
常用的一些單點登入的框架:
spring session,spring security,ouah2.0
單點登入原理
單點登入sso single sign on 說得簡單點就是在乙個多系統共存的環境下,使用者在一處登入後,就不用在其他系統中登入,也就是使用者的一次登入能得到其他所有系統的信任。單點登入在大型 裡使用得非常頻繁,例如像阿里巴巴這樣的 在 的背後是成百上千的子系統,使用者一次操作或交易可能涉及到幾十個...
單點登入原理
問題 採用將session儲存到一台伺服器的做法,在大型 構建中,是不合理的,因為session資料不同的伺服器之間不能共享,會導致使用者在訪問 時,會有很多次的校驗,如果該伺服器中沒有使用者資訊,則會出現使用者重複登入的問題 session不能共享!解決 1.使用者輸入使用者名稱和密碼 2.當前臺...
單點登入原理
單點登入sso single sign on 說得簡單點就是在乙個多系統共存的環境下,使用者在一處登入後,就不用在其他系統中登入,也就是使用者的一次登入能得到其他所有系統的信任。單點登入在大型 裡使用得非常頻繁,例如,阿里旗下有 天貓 支付寶等 還有背後的成百上千的子系統,使用者一次操作或交易可能涉...