Redis實現分布式單點登錄


Redis實現分布式單點登錄

什么是單點登錄?

單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。

為什么會存在單點登錄的問題?

  • Session默認是存儲在當前服務器的內存中,如果是集群,那么只有那台機器的內存中才會有這個session
  • 比如說我在A機器上登錄,B機器是沒有這個session存在的,所以需要重新驗證

如何解決這個單點登錄的問題

  • 不管在那一台Web服務器登錄,都會把Token值存放到我們的一個集中管理的redis服務器中
  • 但客戶端攜帶token驗證的時候,會先后redis中獲取,就實現了單點登錄

現實舉例

  • 比如自己寫的一個項目,分別部署到A、B兩台服務器的內存
  • 如果直接使用session,那么如果在A機器登錄,token只會在A服務器的內存中
  • 因為請求會分不到A、B兩個機器,如果這個請求到了B機器,B的內存中沒有用戶的session就會讓重新登錄
  • 所以登錄A機器的時候我們應該把token值寫到redis中,這樣A/B機器登錄,都會從redis中獲取token進行校驗

單點登錄的缺點及解決辦法:

引進SSO單點登錄的邏輯,它完美的解決了在多服務下的session共享問題,但是又會帶來哪些問題呢?

  1. 在高並發下,很難保證生成的token的唯一性,並且有可能存在cookie存儲的token信息,在redis 中查詢不到,

於是在這種情況下就需要使用分布式鎖!分布式鎖有很多實現方式, 利用redis 中的setnx 和get set命令來實現redis 分布式鎖!

SETNX命令簡介
命令格式
SETNX key value
將 key 的值設為 value ,當且僅當 key 不存在。
若給定的 key 已經存在,則 SETNX 不做任何動作。
SETNX 是『SET if Not eXists』(如果不存在,則 SET)的簡寫。
返回值
設置成功,返回 1 。
設置失敗,返回 0 。

單點登陸工作原理解析https://zhuanlan.zhihu.com/p/66308118


免責聲明!

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



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