基于Redis的单点登录
單點(diǎn)登錄的使用流程
單點(diǎn)登錄的概念:
單點(diǎn)登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。SSO的定義是在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。
為什么會存在單點(diǎn)登錄的問題
session默認(rèn)是存儲在當(dāng)前服務(wù)器的內(nèi)存中,如果是集群,那么只有登錄那臺機(jī)器的內(nèi)存中才有這個session
比如說我在A機(jī)器登錄,B機(jī)器是沒有這個session存在的,所以需要重新驗(yàn)證
如何解決單點(diǎn)登錄問題
不管在那一臺web服務(wù)器登錄,都會把token值存放到我們的一個集中管理的redis服務(wù)器中
當(dāng)客戶端攜帶token驗(yàn)證的時候,會先從redis中獲取,再去redis中查詢是否有該用戶信息存在,如此實(shí)現(xiàn)單點(diǎn)登陸
為什么要使用redis 來解決session 共享問題呢?
redis 是一個純鍵值類型的NSQL數(shù)據(jù)庫,所有的操作都是具有原子性的.
redis 可以設(shè)置key的生存時間,訪問速度快速效率高.
缺點(diǎn)就是: 會對代碼有一定的侵入性.需要自行編碼實(shí)現(xiàn)!!!
單點(diǎn)登錄的缺點(diǎn)及解決辦法:
引進(jìn)SSO單點(diǎn)登錄的邏輯,它完美的解決了在多服務(wù)下的session共享問題,但是又會帶來哪些問題呢?
在高并發(fā)下,很難保證生成的token的唯一性,并且有可能存在cookie存儲的token信息,在redis 中查詢不到,
于是在這種情況下就需要使用分布式鎖,分布式鎖有很多實(shí)現(xiàn)方式, 利用redis 中的setnx 和getset命令來實(shí)現(xiàn)redis 分布式鎖!
SETNX命令簡介
命令格式
使用單點(diǎn)登錄的好處
- 方便用戶
用戶使用應(yīng)用系統(tǒng)時,能夠一次登錄,多次使用。用戶不再需要每次輸入用戶名稱和用戶密碼,也不需要牢記多套用戶名稱和用戶密碼。單點(diǎn)登錄平臺能夠改善用戶使用應(yīng)用系統(tǒng)的體驗(yàn)。 - 方便管理員
系統(tǒng)管理員只需要維護(hù)一套統(tǒng)一的用戶賬號,方便、簡單。相比之下,系統(tǒng)管理員以前需要管理很多套的用戶賬號。每一個應(yīng)用系統(tǒng)就有一套用戶賬號,不僅給管理上帶來不方便,而且,也容易出現(xiàn)管理漏洞。 - 簡化應(yīng)用系統(tǒng)開發(fā)
開發(fā)新的應(yīng)用系統(tǒng)時,可以直接使用單點(diǎn)登錄平臺的用戶認(rèn)證服務(wù),簡化開發(fā)流程。單點(diǎn)登錄平臺通過提供統(tǒng)一的認(rèn)證平臺,實(shí)現(xiàn)單點(diǎn)登錄。因此,應(yīng)用系統(tǒng)并不需要開發(fā)用戶認(rèn)證程序。
現(xiàn)實(shí)舉例
比如你寫的一個tornado項目,分別部署到A,B兩臺機(jī)器上
如果直接使用session,那么如果在A機(jī)器登錄,token只會在A服務(wù)器的內(nèi)存
因?yàn)檎埱髸獠坏紸,b連個機(jī)器,如果這個請求到了B機(jī)器,B的內(nèi)存中沒有就會讓重新登錄
所以登錄A機(jī)器的時候我們應(yīng)該把token值寫入到redis中,A/B機(jī)器登錄,都從redis中獲取token進(jìn)行校驗(yàn)
單點(diǎn)登錄的原理:
總結(jié)
以上是生活随笔為你收集整理的基于Redis的单点登录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis的特点持久化的原理及优缺点
- 下一篇: Redis事物分布式锁